From: Bernhard Beschow <[email protected]> Implement FIFO entry shifting using the underlying `mbs[]` array instead of the overlapping `fifo` union view. This makes it explicit that the operation copies within a contiguous mailbox array and avoids Coverity CID 1662971.
Reported-by: Peter Maydell <[email protected]> Signed-off-by: Bernhard Beschow <[email protected]> Tested-by: Pavel Pisa <[email protected]> Reviewed-by: Philippe Mathieu-Daudé <[email protected]> Message-id: [email protected] Signed-off-by: Peter Maydell <[email protected]> --- hw/net/can/flexcan.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hw/net/can/flexcan.c b/hw/net/can/flexcan.c index da36d10bd33..3a97edf7a4d 100644 --- a/hw/net/can/flexcan.c +++ b/hw/net/can/flexcan.c @@ -879,22 +879,22 @@ static bool flexcan_can_receive(CanBusClientState *client) */ static void flexcan_fifo_pop(FlexcanState *s) { - if (s->regs.fifo.mb_back.can_ctrl != 0) { + if (s->regs.mbs[0].can_ctrl != 0) { /* move queue elements forward */ - memmove(&s->regs.fifo.mb_back, &s->regs.fifo.mbs_queue[0], - sizeof(s->regs.fifo.mbs_queue)); + memmove(&s->regs.mbs[0], &s->regs.mbs[1], + sizeof(s->regs.mbs[0]) * (FLEXCAN_FIFO_DEPTH - 1)); /* clear the first-in slot */ memset(&s->regs.mbs[FLEXCAN_FIFO_DEPTH - 1], 0, sizeof(FlexcanRegsMessageBuffer)); trace_flexcan_fifo_pop(DEVICE(s)->canonical_path, 1, - s->regs.fifo.mb_back.can_ctrl != 0); + s->regs.mbs[0].can_ctrl != 0); } else { trace_flexcan_fifo_pop(DEVICE(s)->canonical_path, 0, 0); } - if (s->regs.fifo.mb_back.can_ctrl != 0) { + if (s->regs.mbs[0].can_ctrl != 0) { flexcan_irq_iflag_set(s, I_FIFO_AVAILABLE); } else { flexcan_irq_iflag_clear(s, I_FIFO_AVAILABLE); -- 2.43.0
