unix: unsafe-wrap install_main_guard_default · model-checking/verify-rust-std@aedc16c (original) (raw)

`@@ -419,6 +419,7 @@ mod imp {

`

419

419

`Some(stackaddr - page_size..stackaddr)

`

420

420

`}

`

421

421

``

``

422

`+

#[forbid(unsafe_op_in_unsafe_fn)]

`

422

423

`unsafe fn install_main_guard_default(page_size: usize) -> Option<Range> {

`

423

424

`// Reallocate the last page of the stack.

`

424

425

`// This ensures SIGBUS will be raised on

`

`@@ -429,19 +430,21 @@ mod imp {

`

429

430

`// read/write permissions and only then mprotect() it to

`

430

431

`// no permissions at all. See issue #50313.

`

431

432

`let stackptr = stack_start_aligned(page_size)?;

`

432

``

`-

let result = mmap64(

`

433

``

`-

stackptr,

`

434

``

`-

page_size,

`

435

``

`-

PROT_READ | PROT_WRITE,

`

436

``

`-

MAP_PRIVATE | MAP_ANON | MAP_FIXED,

`

437

``

`-

-1,

`

438

``

`-

0,

`

439

``

`-

);

`

``

433

`+

let result = unsafe {

`

``

434

`+

mmap64(

`

``

435

`+

stackptr,

`

``

436

`+

page_size,

`

``

437

`+

PROT_READ | PROT_WRITE,

`

``

438

`+

MAP_PRIVATE | MAP_ANON | MAP_FIXED,

`

``

439

`+

-1,

`

``

440

`+

0,

`

``

441

`+

)

`

``

442

`+

};

`

440

443

`if result != stackptr || result == MAP_FAILED {

`

441

444

`panic!("failed to allocate a guard page: {}", io::Error::last_os_error());

`

442

445

`}

`

443

446

``

444

``

`-

let result = mprotect(stackptr, page_size, PROT_NONE);

`

``

447

`+

let result = unsafe { mprotect(stackptr, page_size, PROT_NONE) };

`

445

448

`if result != 0 {

`

446

449

`panic!("failed to protect the guard page: {}", io::Error::last_os_error());

`

447

450

`}

`