[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] x86: x86_emulate: address violations of MISRA C Rule 19.1
commit 8808f9a2afc7eab67b761145c84fc32580c51c2f Author: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx> AuthorDate: Fri May 2 16:35:34 2025 -0700 Commit: Stefano Stabellini <stefano.stabellini@xxxxxxx> CommitDate: Fri May 9 15:54:31 2025 -0700 x86: x86_emulate: address violations of MISRA C Rule 19.1 Rule 19.1 states: "An object shall not be assigned or copied to an overlapping object". In the function like macro "get_rep_prefix", one member of a union is assigned the value of another member. Reading from one member and writing to the other violates the rule, while not causing Undefined Behavior due to their relative sizes. Instead, use casts combined with exactly overlapping accesses to address violations. No functional change. Signed-off-by: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx> Signed-off-by: Federico Serafini <federico.serafini@xxxxxxxxxxx> Signed-off-by: Victor Lira <victorm.lira@xxxxxxx> Reviewed-by: Stefano Stabellini <sstabellini@xxxxxxxxxx> Acked-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> --- xen/arch/x86/x86_emulate/x86_emulate.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/x86_emulate/x86_emulate.c b/xen/arch/x86/x86_emulate/x86_emulate.c index 8e14ebb35b..a588435b5e 100644 --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -527,8 +527,8 @@ static inline void put_loop_count( if ( !amd_like(ctxt) && mode_64bit() && ad_bytes == 4 ) \ { \ _regs.r(cx) = 0; \ - if ( extend_si ) _regs.r(si) = _regs.esi; \ - if ( extend_di ) _regs.r(di) = _regs.edi; \ + if ( extend_si ) _regs.r(si) = (uint32_t)_regs.r(si); \ + if ( extend_di ) _regs.r(di) = (uint32_t)_regs.r(di); \ } \ goto complete_insn; \ } \ @@ -2029,7 +2029,7 @@ x86_emulate( switch ( op_bytes ) { case 2: _regs.ax = (int8_t)_regs.ax; break; /* cbw */ - case 4: _regs.r(ax) = (uint32_t)(int16_t)_regs.ax; break; /* cwde */ + case 4: _regs.r(ax) = (uint32_t)(int16_t)_regs.r(ax); break; /* cwde */ case 8: _regs.r(ax) = (int32_t)_regs.r(ax); break; /* cdqe */ } break; -- generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |