Messages in this thread Patch in this message | | | Date | Fri, 18 Oct 2019 09:35:34 +0200 | From | Peter Zijlstra <> | Subject | [PATCH v4 09/16] x86/alternative: Remove text_poke_loc::len |
| |
Per the BUG_ON(len != insn.length) in text_poke_loc_init(), tp->len must indeed be the same as text_opcode_size(tp->opcode). Use this to remove this field from the structure.
Sadly, due to 8 byte alignment, this only increases the structure padding.
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> --- arch/x86/kernel/alternative.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)
--- a/arch/x86/kernel/alternative.c +++ b/arch/x86/kernel/alternative.c @@ -938,7 +938,6 @@ static void do_sync_core(void *info) struct text_poke_loc { void *addr; - int len; s32 rel32; u8 opcode; const u8 text[POKE_MAX_OPCODE_SIZE]; @@ -965,6 +964,7 @@ int notrace poke_int3_handler(struct pt_ { struct text_poke_loc *tp; void *ip; + int len; /* * Having observed our INT3 instruction, we now must observe @@ -1004,7 +1004,8 @@ int notrace poke_int3_handler(struct pt_ return 0; } - ip += tp->len; + len = text_opcode_size(tp->opcode); + ip += len; switch (tp->opcode) { case INT3_INSN_OPCODE: @@ -1085,10 +1086,12 @@ static void text_poke_bp_batch(struct te * Second step: update all but the first byte of the patched range. */ for (do_sync = 0, i = 0; i < nr_entries; i++) { - if (tp[i].len - sizeof(int3) > 0) { + int len = text_opcode_size(tp[i].opcode); + + if (len - sizeof(int3) > 0) { text_poke((char *)tp[i].addr + sizeof(int3), (const char *)tp[i].text + sizeof(int3), - tp[i].len - sizeof(int3)); + len - sizeof(int3)); do_sync++; } } @@ -1141,7 +1144,6 @@ void text_poke_loc_init(struct text_poke BUG_ON(len != insn.length); tp->addr = addr; - tp->len = len; tp->opcode = insn.opcode.bytes[0]; switch (tp->opcode) {
| |