@@ -141,13 +141,21 @@ static int wolfssl_init(void)
141141
142142#ifdef HAVE_LINUXKM_PIE_SUPPORT
143143
144- #if LINUX_VERSION_CODE >= KERNEL_VERSION (4 , 5 , 0 )
145- #define THIS_MODULE_BASE (THIS_MODULE->core_layout.base)
144+ #if LINUX_VERSION_CODE >= KERNEL_VERSION (6 , 4 , 0 )
145+ /* see linux commit ac3b432839 */
146+ #define THIS_MODULE_TEXT_BASE (THIS_MODULE->mem[MOD_TEXT].base)
147+ #define THIS_MODULE_TEXT_SIZE (THIS_MODULE->mem[MOD_TEXT].size)
148+ #define THIS_MODULE_RO_BASE (THIS_MODULE->mem[MOD_RODATA].base)
149+ #define THIS_MODULE_RO_SIZE (THIS_MODULE->mem[MOD_RODATA].size)
150+ #elif LINUX_VERSION_CODE >= KERNEL_VERSION (4 , 5 , 0 )
151+ #define THIS_MODULE_TEXT_BASE (THIS_MODULE->core_layout.base)
146152 #define THIS_MODULE_TEXT_SIZE (THIS_MODULE->core_layout.text_size)
153+ #define THIS_MODULE_RO_BASE ((char *)THIS_MODULE->core_layout.base + THIS_MODULE->core_layout.text_size)
147154 #define THIS_MODULE_RO_SIZE (THIS_MODULE->core_layout.ro_size)
148155#else
149- #define THIS_MODULE_BASE (THIS_MODULE->module_core)
156+ #define THIS_MODULE_TEXT_BASE (THIS_MODULE->module_core)
150157 #define THIS_MODULE_TEXT_SIZE (THIS_MODULE->core_text_size)
158+ #define THIS_MODULE_RO_BASE ((char *)THIS_MODULE->module_core + THIS_MODULE->core_ro_size)
151159 #define THIS_MODULE_RO_SIZE (THIS_MODULE->core_ro_size)
152160#endif
153161
@@ -159,8 +167,8 @@ static int wolfssl_init(void)
159167 unsigned int text_hash , rodata_hash ;
160168
161169 if ((pie_text_start < pie_text_end ) &&
162- (pie_text_start >= (char * )THIS_MODULE_BASE ) &&
163- (pie_text_end - (char * )THIS_MODULE_BASE <= THIS_MODULE_TEXT_SIZE ))
170+ (pie_text_start >= (char * )THIS_MODULE_TEXT_BASE ) &&
171+ (pie_text_end - (char * )THIS_MODULE_TEXT_BASE <= THIS_MODULE_TEXT_SIZE ))
164172 {
165173 text_hash = hash_span (pie_text_start , pie_text_end );
166174 } else {
@@ -169,14 +177,14 @@ static int wolfssl_init(void)
169177 pie_text_start ,
170178 pie_text_end ,
171179 pie_text_end - pie_text_start ,
172- THIS_MODULE_BASE ,
173- (char * )THIS_MODULE_BASE + THIS_MODULE_TEXT_SIZE );
180+ THIS_MODULE_TEXT_BASE ,
181+ (char * )THIS_MODULE_TEXT_BASE + THIS_MODULE_TEXT_SIZE );
174182 text_hash = 0 ;
175183 }
176184
177185 if ((pie_rodata_start < pie_rodata_end ) && // cppcheck-suppress comparePointers
178- (pie_rodata_start >= (char * )THIS_MODULE_BASE + THIS_MODULE_TEXT_SIZE ) &&
179- (pie_rodata_end - (char * )THIS_MODULE_BASE <= THIS_MODULE_RO_SIZE ))
186+ (pie_rodata_start >= (char * )THIS_MODULE_RO_BASE ) &&
187+ (pie_rodata_end - (char * )THIS_MODULE_RO_BASE <= THIS_MODULE_RO_SIZE ))
180188 {
181189 rodata_hash = hash_span (pie_rodata_start , pie_rodata_end );
182190 } else {
@@ -185,19 +193,19 @@ static int wolfssl_init(void)
185193 pie_rodata_start ,
186194 pie_rodata_end ,
187195 pie_rodata_end - pie_rodata_start ,
188- (char * )THIS_MODULE_BASE + THIS_MODULE_TEXT_SIZE ,
189- (char * )THIS_MODULE_BASE + THIS_MODULE_RO_SIZE );
196+ (char * )THIS_MODULE_RO_BASE ,
197+ (char * )THIS_MODULE_RO_BASE + THIS_MODULE_RO_SIZE );
190198 rodata_hash = 0 ;
191199 }
192200
193201 /* note, "%pK" conceals the actual layout information. "%px" exposes
194202 * the true module start address, which is potentially useful to an
195203 * attacker.
196204 */
197- pr_info ("wolfCrypt container hashes (spans): %x (%lu) %x (%lu), module base %pK\n" ,
205+ pr_info ("wolfCrypt container hashes (spans): %x (%lu) %x (%lu), text base %pK, ro base %pK\n" ,
198206 text_hash , pie_text_end - pie_text_start ,
199207 rodata_hash , pie_rodata_end - pie_rodata_start ,
200- THIS_MODULE_BASE );
208+ THIS_MODULE_TEXT_BASE , THIS_MODULE_RO_BASE );
201209 }
202210#endif /* HAVE_LINUXKM_PIE_SUPPORT */
203211
0 commit comments