-
Notifications
You must be signed in to change notification settings - Fork 391
Description
Most Miri shims use check_shim
to ensure they are called with the right ABI and right number of arguments. However, some shims emulate vararg functions. There, we currently separately call check_abi_and_shim_symbol_clash
and then check_min_arg_count
,however, that misses potential UB: when a function, like open
, is declared with 2 fixed args followed by varargs, then it is crucial that the caller uses a signature that actually involves 2 fixed args followed by varargs. If someone were to, say, declare this function as
pub fn open(path: *const c_char, ...) -> ::c_int;
and then call it as open(path, flags)
, that is Undefined Behavior!
Similarly, non-vararg shims can actually currently be invoked with a vararg import, which should also be detected as UB.
Unfortunately, emulate_foreign_item
is not even given enough information to detect this -- we are given a slice of args
, but we don't learn how many of those were passed as fixed args vs varargs. So this requires changing the rustc side of this to pass more information to find_mir_or_eval_fn
-- basically, we should pass down the full FnAbi
.
Activity
tiif commentedon Nov 5, 2024
This sounds interesting :)
@rustbot claim
RalfJung commentedon Nov 5, 2024
In fact we probably want to pass that down instead of the
ExternAbi
we pass currently. That will require changing our shim ABI compat checks a bit, but that's fine.Great. :D
The first part of this, about passing more things down to
find_mir_or_eval_fn
, will have to be a rustc PR.tiif commentedon Nov 16, 2024
Do we really want to remove passing
ExternAbi
infind_mir_or_eval_fn
? It seems to be needed forcheck_abi_and_shim_symbol_clash
. I can add a new function parameter passing down passing downFnAbi
first while keepingExternAbi
.RalfJung commentedon Nov 16, 2024
That should be changed to check the calling convention stored in
FnAbi
, instead of checkingExternAbi
.Rollup merge of rust-lang#133103 - tiif:fnabi, r=RalfJung
Rollup merge of rust-lang#133103 - tiif:fnabi, r=RalfJung
Rollup merge of rust-lang#133103 - tiif:fnabi, r=RalfJung
Unrolled build for rust-lang#133103
Rollup merge of #133103 - tiif:fnabi, r=RalfJung
tiif commentedon Dec 27, 2024
This is currently the next thing on my queue, but I am on a break for a few days, so this probably won't be resumed until 2025 ^^.
Rollup merge of #133103 - tiif:fnabi, r=RalfJung
tiif commentedon Feb 1, 2025
Progress on this issue (mostly a reminder for myself):
Currently we already have detection for wrong fixed arg number and calling vararg shim with non-vararg import. The final step for this is detecting if non-vararg shim is invoked with vararg import. We probably can just add a check in
check_shim
.