Messages in this thread | | | Date | Fri, 4 Dec 2020 16:05:22 +0100 | From | Borislav Petkov <> | Subject | Re: [PATCH v3 1/3] x86/uprobes: Fix not using prefixes.nbytes for loop over prefixes.bytes |
| |
On Fri, Dec 04, 2020 at 07:55:20PM +0900, Masami Hiramatsu wrote: > +/** > + * for_each_insn_prefix() -- Iterate prefixes in the instruction > + * @insn: Pointer to struct insn. > + * @idx: Index storage. > + * @prefix: Prefix byte. > + * > + * Iterate prefix bytes of given @insn. Each prefix byte is stored in @prefix > + * and the index is stored in @idx (note that this @idx is just for a cursor, > + * do not change it.) > + * Since prefixes.nbytes can be bigger than NUM_INSN_FIELD_BYTES when some > + * prefixes are repeated, it can not be used for looping over the prefixes. > + */ > +#define for_each_insn_prefix(insn, idx, prefix) \ > + for (idx = 0; \ > + idx < MAX_LEGACY_PREFIX_GROUPS && \
The problem I see here is that you check for the index limit to be < MAX_LEGACY_PREFIX_GROUPS but the array itself is defined using NUM_INSN_FIELD_BYTES, and that is confusing.
I guess this should be:
#define MAX_LEGACY_PREFIX_GROUPS 4 #define NUM_INSN_FIELD_BYTES MAX_LEGACY_PREFIX_GROUPS
and later, iff the legacy prefixes array size needs separating from the insn field array size, then the defines would need to change too.
Thx.
-- Regards/Gruss, Boris.
https://people.kernel.org/tglx/notes-about-netiquette
| |