fix(__tls_get_addr): NULL check

Has to be done before adding the offsets.

Signed-off-by: Anhad Singh <andypython@protonmail.com>
This commit is contained in:
Anhad Singh
2024-12-05 13:58:45 +11:00
parent 1c846f8013
commit d8f7590848
+7 -7
View File
@@ -22,7 +22,7 @@ pub unsafe extern "C" fn __tls_get_addr(ti: *mut dl_tls_index) -> *mut c_void {
(*ti).ti_module,
(*ti).ti_offset,
tcb.masters().unwrap().len(),
tcb.dtv_mut().len()
tcb.dtv_mut().unwrap().len()
);
if tcb.dtv_mut().unwrap_or_default().len() < tcb.masters().unwrap().len() {
@@ -52,12 +52,6 @@ pub unsafe extern "C" fn __tls_get_addr(ti: *mut dl_tls_index) -> *mut c_void {
let mut ptr = tcb.dtv_mut().unwrap()[dtv_index];
if cfg!(target_arch = "riscv64") {
ptr = ptr.add(0x800 + ti.ti_offset as usize); // dynamic offsets are 0x800-based on risc-v
} else {
ptr = ptr.add(ti.ti_offset as usize);
}
if ptr.is_null() {
panic!(
"__tls_get_addr({ti:p}: {:#x}, {:#x})",
@@ -65,6 +59,12 @@ pub unsafe extern "C" fn __tls_get_addr(ti: *mut dl_tls_index) -> *mut c_void {
);
}
if cfg!(target_arch = "riscv64") {
ptr = ptr.add(0x800 + ti.ti_offset as usize); // dynamic offsets are 0x800-based on risc-v
} else {
ptr = ptr.add(ti.ti_offset as usize);
}
ptr.cast::<c_void>()
}