On 17/03/2022 14:21, Jan Beulich wrote: > On 17.03.2022 15:06, Andrew Cooper wrote: >> For livepatching, we need to look at a potentially clobbered function and >> determine whether it used to have an ENDBR64 instruction. >> >> Use a non-default 4-byte P6 long nop, not emitted by toolchains, and extend >> check-endbr.sh to look for it. The same logic can check for the absence of >> any endbr32 instructions, so include a check for those too. >> >> The choice of nop has some complicated consequences. nopw (%rax) has a ModRM >> byte of 0, which the Bourne compatible shells unconditionally strip from >> parameters, meaning that we can't pass it to `grep -aob`. >> >> Therefore, use nopw (%rcx) so the ModRM byte becomes 1. >> >> This then demonstrates another bug. Under perl regexes, \1 thru \9 are >> subpattern matches, and not octal escapes, while the behaviour of \10 and >> higher depend on the number of capture groups. Switch the `grep -P` runes to >> use hex escapes instead, which are unambiguous >> >> The build time check then requires that the endbr64 poison have the same >> treatment as endbr64 to avoid placing the byte pattern in immediate operands. >> >> Signed-off-by: Andrew Cooper <andrew.coop...@citrix.com> > Reviewed-by: Jan Beulich <jbeul...@suse.com>
Thanks. > with one nit (which likely I should have spotted before): Unlikely, seeing as that was part that I rewrote between v2 and v3. Will fix. ~Andrew