Auto merge of #101442 - joboet:null_check_tcs, r=thomcc
Check if TCS is a null pointer on SGX The `EENTER` instruction only checks if the TCS is aligned, not if it zero. Saying the address returned is a `NonNull<u8>` (for which `Tcs` is a type alias) is unsound. As well-behaved runners will not put the TCS at address zero, so the definition of `Tcs` is correct. However, `std` should check the address before casting it to a `NonNull`. ping `@jethrogb` `@raoulstrackx` `@rustbot` label I-unsound
This commit is contained in:
commit
98e1f041b6
1 changed files with 6 additions and 2 deletions
|
@ -7,7 +7,11 @@ use fortanix_sgx_abi::Tcs;
|
|||
#[unstable(feature = "sgx_platform", issue = "56975")]
|
||||
pub fn current() -> Tcs {
|
||||
extern "C" {
|
||||
fn get_tcs_addr() -> Tcs;
|
||||
fn get_tcs_addr() -> *mut u8;
|
||||
}
|
||||
let addr = unsafe { get_tcs_addr() };
|
||||
match Tcs::new(addr) {
|
||||
Some(tcs) => tcs,
|
||||
None => rtabort!("TCS must not be placed at address zero (this is a linker error)"),
|
||||
}
|
||||
unsafe { get_tcs_addr() }
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue