forked from rust-lang/rust
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Rollup merge of rust-lang#99679 - repnop:kernel-address-sanitizer, r=…
…cuviper Add `kernel-address` sanitizer support for freestanding targets This PR adds support for KASan (kernel address sanitizer) instrumentation in freestanding targets. I included the minimal set of `x86_64-unknown-none`, `riscv64{imac, gc}-unknown-none-elf`, and `aarch64-unknown-none` but there's likely other targets it can be added to. (`linux_kernel_base.rs`?) KASan uses the address sanitizer attributes but has the `CompileKernel` parameter set to `true` in the pass creation.
- Loading branch information
Showing
18 changed files
with
142 additions
and
12 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
// Verifies that `-Zsanitizer=kernel-address` emits sanitizer instrumentation. | ||
|
||
// compile-flags: -Zsanitizer=kernel-address | ||
// revisions: aarch64 riscv64imac riscv64gc x86_64 | ||
//[aarch64] compile-flags: --target aarch64-unknown-none | ||
//[aarch64] needs-llvm-components: aarch64 | ||
//[riscv64imac] compile-flags: --target riscv64imac-unknown-none-elf | ||
//[riscv64imac] needs-llvm-components: riscv | ||
//[riscv64imac] min-llvm-version: 16 | ||
//[riscv64gc] compile-flags: --target riscv64gc-unknown-none-elf | ||
//[riscv64gc] needs-llvm-components: riscv | ||
//[riscv64gc] min-llvm-version: 16 | ||
//[x86_64] compile-flags: --target x86_64-unknown-none | ||
//[x86_64] needs-llvm-components: x86 | ||
|
||
#![crate_type = "rlib"] | ||
#![feature(no_core, no_sanitize, lang_items)] | ||
#![no_core] | ||
|
||
#[lang = "sized"] | ||
trait Sized {} | ||
|
||
#[lang = "copy"] | ||
trait Copy {} | ||
|
||
impl Copy for u8 {} | ||
|
||
// CHECK-LABEL: ; sanitizer_kasan_emits_instrumentation::unsanitized | ||
// CHECK-NEXT: ; Function Attrs: | ||
// CHECK-NOT: sanitize_address | ||
// CHECK: start: | ||
// CHECK-NOT: call void @__asan_report_load | ||
// CHECK: } | ||
#[no_sanitize(address)] | ||
pub fn unsanitized(b: &mut u8) -> u8 { | ||
*b | ||
} | ||
|
||
// CHECK-LABEL: ; sanitizer_kasan_emits_instrumentation::sanitized | ||
// CHECK-NEXT: ; Function Attrs: | ||
// CHECK: sanitize_address | ||
// CHECK: start: | ||
// CHECK: call void @__asan_report_load | ||
// CHECK: } | ||
pub fn sanitized(b: &mut u8) -> u8 { | ||
*b | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
// Verifies that when compiling with -Zsanitizer=kernel-address, | ||
// the `#[cfg(sanitize = "address")]` attribute is configured. | ||
|
||
// check-pass | ||
// compile-flags: -Zsanitizer=kernel-address --cfg kernel_address | ||
// revisions: aarch64 riscv64imac riscv64gc x86_64 | ||
//[aarch64] compile-flags: --target aarch64-unknown-none | ||
//[aarch64] needs-llvm-components: aarch64 | ||
//[riscv64imac] compile-flags: --target riscv64imac-unknown-none-elf | ||
//[riscv64imac] needs-llvm-components: riscv | ||
//[riscv64imac] min-llvm-version: 16 | ||
//[riscv64gc] compile-flags: --target riscv64gc-unknown-none-elf | ||
//[riscv64gc] needs-llvm-components: riscv | ||
//[riscv64gc] min-llvm-version: 16 | ||
//[x86_64] compile-flags: --target x86_64-unknown-none | ||
//[x86_64] needs-llvm-components: x86 | ||
|
||
#![crate_type = "rlib"] | ||
#![feature(cfg_sanitize, no_core, lang_items)] | ||
#![no_core] | ||
|
||
#[lang = "sized"] | ||
trait Sized {} | ||
|
||
const _: fn() -> () = main; | ||
|
||
#[cfg(all(sanitize = "address", kernel_address))] | ||
fn main() {} |