Messages in this thread | | | Date | Tue, 19 Jul 2022 10:19:18 -0700 | From | Sami Tolvanen <> | Subject | Re: [patch 00/38] x86/retbleed: Call depth tracking mitigation |
| |
On Mon, Jul 18, 2022 at 05:11:27PM -0700, Linus Torvalds wrote: > On Mon, Jul 18, 2022 at 5:03 PM Linus Torvalds > <torvalds@linux-foundation.org> wrote: > > > > So it already only adds the pattern to things that have their address > > taken, not all functions?
The preamble is added to address-taken static functions and all global functions, because those might be indirectly called from other translation units. With LTO, we could prune unnecessary preambles from non-address-taken globals too.
> > If so, that's simple enough to sort out: don't do any RSB stack > > adjustment for those thunks AT ALL. > > > > Because they should just then end up with a jump to the "real" target, > > and that real target will do the RSB stack thing. > > Put another way, let's say that you have a function that looks like this: > > int silly(void) > { > return 0; > } > > and now you have two cases: > > - the "direct callable version" of that function looks exactly the > way it always has looked, and gets the 16 bytes of padding for it, and > the RSB counting can happen in that padding > > - the "somebody took the address of this function" creates code that > has the hash marker before it, and has the hash check, and then does a > "jmp silly" to actually jump to the real code.
Clang's current CFI implementation is somewhat similar to this. It creates separate thunks for address-taken functions and changes function addresses in C code to point to the thunks instead.
While this works, it creates painful situations when interacting with assembly (e.g. a function address taken in assembly cannot be used for indirect calls in C as it doesn't point to the thunk) and needs unpleasant hacks when we want take the actual function address in C (i.e. scattering the code with function_nocfi() calls).
I have to agree with Peter on this, I would rather avoid messing with function pointers in KCFI to avoid these issues.
Sami
| |