• Borislav Petkov's avatar
    x86/insn: Use get_unaligned() instead of memcpy() · f96b4675
    Borislav Petkov authored
    Use get_unaligned() instead of memcpy() to access potentially unaligned
    memory, which, when accessed through a pointer, leads to undefined
    behavior. get_unaligned() describes much better what is happening there
    anyway even if memcpy() does the job.
    
    In addition, since perf tool builds with -Werror, it would fire with:
    
      util/intel-pt-decoder/../../../arch/x86/lib/insn.c: In function '__insn_get_emulate_prefix':
      tools/include/../include/asm-generic/unaligned.h:10:15: error: packed attribute is unnecessary [-Werror=packed]
         10 |  const struct { type x; } __packed *__pptr = (typeof(__pptr))(ptr); \
    
    because -Werror=packed would complain if the packed attribute would have
    no effect on the layout of the structure.
    
    In this case, that is intentional so disable the warning only for that
    compilation unit.
    
    That part is Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
    
    No functional changes.
    
    Fixes: 5ba1071f ("x86/insn, tools/x86: Fix undefined behavior due to potential unaligned accesses")
    Suggested-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Acked-by: default avatarMasami Hiramatsu <mhiramat@kernel.org>
    Tested-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
    Link: https://lkml.kernel.org/r/YVSsIkj9Z29TyUjE@zn.tnic
    f96b4675
insn.c 17.5 KB