Messages in this thread | | | From | Sami Tolvanen <> | Date | Tue, 15 Feb 2022 08:56:03 -0800 | Subject | Re: [RFC][PATCH 6/6] objtool: Add IBT validation / fixups |
| |
On Mon, Feb 14, 2022 at 2:25 PM Peter Zijlstra <peterz@infradead.org> wrote: > On Mon, Feb 14, 2022 at 01:38:18PM -0800, Sami Tolvanen wrote: > > I'm fine with adding a trap mode that's used by default, but having > > more helpful diagnostics when something fails is useful even in > > production systems in my experience. This change results in a vmlinux > > that's another 0.92% smaller. > > You can easily have the exception generate a nice warning, you can even > have it continue. You really don't need a call for that.
Sure, but wouldn't that require us to generate something like __bug_table, so we know where the CFI specific traps are?
> > In this case the function has two indirect calls and Clang seems to > > prefer to emit just one ud2. > > That will not allow you to recover from the exception. UD2 is not an > unconditional fail. It should have an out-going edge in this case too.
Yes, CFI failures are not recoverable in that code. In fact, LLVM assumes that the llvm.trap intrinsic (i.e. ud2) never returns, but I suppose we could just use an int3 instead. I assume that's sufficient to stop speculation?
> Also, you really should add a CS prefix to the retpoline thunk call if > you insist on using r11 (or any of the higher regs).
I actually didn't touch the retpoline thunk call, that's exactly the code Clang normally generates.
> > How would you like to deal with the 4-byte hashes in objtool? We > > either need to annotate all function symbols in the kernel, or we need > > a way to distinguish the hashes from random instructions, so we can > > also have functions that don't have a type hash. > > Easiest would be to create a special section with all the hash offsets > in I suppose. A bit like -mfentry-section=name.
OK, I'll take a look. With 64-bit hashes I was planning to use a known prefix, but that's not really an option with a 32-bit hash.
Sami
| |