Messages in this thread | | | From | Sami Tolvanen <> | Date | Wed, 24 Mar 2021 15:34:33 -0700 | Subject | Re: [PATCH] static_call: fix function type mismatch |
| |
On Wed, Mar 24, 2021 at 2:51 PM Rasmus Villemoes <linux@rasmusvillemoes.dk> wrote: > > On 24/03/2021 18.33, Peter Zijlstra wrote: > > On Wed, Mar 24, 2021 at 05:45:52PM +0100, Rasmus Villemoes wrote: > >> Sorry, I think I misread the code. The static calls are indeed > >> initialized with a function with the right prototype. Try adding > >> "preempt=full" on the command line so that we exercise these lines > >> > >> static_call_update(cond_resched, > >> (typeof(&__cond_resched)) __static_call_return0); > >> static_call_update(might_resched, > >> (typeof(&__cond_resched)) __static_call_return0); > >> > >> I would expect that to blow up, since we end up calling a long (*)(void) > >> function using a function pointer of type int (*)(void). > > > > Note that on x86 there won't actually be any calling of function > > pointers. See what arch/x86/kernel/static_call.c does :-) > > I know, but so far x86 is the only one with HAVE_STATIC_CALL, so for > arm64 which is where CFI seems to be targeted initially, static_calls > are function pointers. And unless CFI ignores the return type, I'd > really expect the above to fail.
I think you're correct, this would trip CFI without HAVE_STATIC_CALL. However, arm64 also doesn't support PREEMPT_DYNAMIC at the moment, so this isn't currently a problem there.
Sami
| |