mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-09 15:29:16 +00:00
Rust fixes for v6.2
A soundness fix: - Avoid evaluating arguments in 'pr_*' macros in 'unsafe' blocks. -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEPjU5OPd5QIZ9jqqOGXyLc2htIW0FAmPQCLIACgkQGXyLc2ht IW1D5w/+KReYuziOU9pT9DvWg0qY1Fb9w8JQQxG/qKRtAzm3s3DQFFHRmfHnhW/L k2ESdGemAkWSplmjVYjbQVSHBfq50lhkMmnwzh6FS3StpeX4P65RdOiew6AJFjJC XpRzaDbpbaBWdiv3Xw5IQHOOnPqmyX+d8caX8P1IeUBMDFx+BhbfKL2saTRvnj1k PW0yAxDLxhiFph8Il98pLzrPRJ4TVUHHS0Bl505tMsWPGOXabCYbiGUCycXcjR5A 7c1muA0EXF/5A2J1RzDJMYSUOBK3tKqYenXAh21WyaRbD5syglQazfBLFMhM4R6G ZQbr1hTVb2mEov9F3EfOvkx6lHilrCQedyr4bs54uhUjbGqdBFEXCKd+xWyyFp6M U9xxqRQ98Ex+IIbLIL+iNalDDQ/rWFlFonWwEZNsrgcEwsDIIJvqnd238sv1inOV Hx186F9jDLFGtsIGwj6xI2HwXpQQhU0Q/GQ+JfkXk7ZjtVQc0TQVDEf/3cHmUpgk u8ARDjUqRH4y35cH99Sclhztm47GbTFIUD3tAAgBb3JF5QP6igSTnlbml2VbdCf7 plyleZbGwD5/RMv8XOuwGlzZQxykxRKFUrs4FnfpCpvD6wtMl+64j/aNrOb0vNuT iJbAef07FAlVvmVfQgQXeVcnO6S/Hh2a/d5dlccVmdDValff4C4= =01k+ -----END PGP SIGNATURE----- Merge tag 'rust-fixes-6.2' of https://github.com/Rust-for-Linux/linux Pull rust fix from Miguel Ojeda: - Avoid evaluating arguments in 'pr_*' macros in 'unsafe' blocks * tag 'rust-fixes-6.2' of https://github.com/Rust-for-Linux/linux: rust: print: avoid evaluating arguments in `pr_*` macros in `unsafe` blocks
This commit is contained in:
commit
246dc53fb2
@ -142,17 +142,24 @@ pub fn call_printk_cont(args: fmt::Arguments<'_>) {
|
||||
macro_rules! print_macro (
|
||||
// The non-continuation cases (most of them, e.g. `INFO`).
|
||||
($format_string:path, false, $($arg:tt)+) => (
|
||||
// SAFETY: This hidden macro should only be called by the documented
|
||||
// printing macros which ensure the format string is one of the fixed
|
||||
// ones. All `__LOG_PREFIX`s are null-terminated as they are generated
|
||||
// by the `module!` proc macro or fixed values defined in a kernel
|
||||
// crate.
|
||||
unsafe {
|
||||
$crate::print::call_printk(
|
||||
&$format_string,
|
||||
crate::__LOG_PREFIX,
|
||||
format_args!($($arg)+),
|
||||
);
|
||||
// To remain sound, `arg`s must be expanded outside the `unsafe` block.
|
||||
// Typically one would use a `let` binding for that; however, `format_args!`
|
||||
// takes borrows on the arguments, but does not extend the scope of temporaries.
|
||||
// Therefore, a `match` expression is used to keep them around, since
|
||||
// the scrutinee is kept until the end of the `match`.
|
||||
match format_args!($($arg)+) {
|
||||
// SAFETY: This hidden macro should only be called by the documented
|
||||
// printing macros which ensure the format string is one of the fixed
|
||||
// ones. All `__LOG_PREFIX`s are null-terminated as they are generated
|
||||
// by the `module!` proc macro or fixed values defined in a kernel
|
||||
// crate.
|
||||
args => unsafe {
|
||||
$crate::print::call_printk(
|
||||
&$format_string,
|
||||
crate::__LOG_PREFIX,
|
||||
args,
|
||||
);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user