x86/alternative: Support relocations in alternatives
authorPeter Zijlstra <peterz@infradead.org>
Wed, 8 Feb 2023 17:10:52 +0000 (18:10 +0100)
committerBorislav Petkov (AMD) <bp@alien8.de>
Wed, 10 May 2023 12:47:08 +0000 (14:47 +0200)
commit270a69c4485d7d07516d058bcc0473c90ee22185
treeb8f40326a00e414cc5a4cc7d7f768072bc669e38
parent6becb5026b8192e0ed6619d6e7793c2f1288244f
x86/alternative: Support relocations in alternatives

A little while ago someone (Kirill) ran into the whole 'alternatives don't
do relocations nonsense' again and I got annoyed enough to actually look
at the code.

Since the whole alternative machinery already fully decodes the
instructions it is simple enough to adjust immediates and displacement
when needed. Specifically, the immediates for IP modifying instructions
(JMP, CALL, Jcc) and the displacement for RIP-relative instructions.

  [ bp: Massage comment some more and get rid of third loop in
    apply_relocation(). ]

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/20230208171431.313857925@infradead.org
arch/x86/kernel/alternative.c
tools/objtool/arch/x86/special.c