can: pch_can: pch_can_error(): initialize errc before using it
authorVincent Mailhol <mailhol.vincent@wanadoo.fr>
Thu, 21 Jul 2022 16:00:32 +0000 (01:00 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Aug 2022 09:11:19 +0000 (11:11 +0200)
[ Upstream commit 9950f11211331180269867aef848c7cf56861742 ]

After commit 3a5c7e4611dd, the variable errc is accessed before being
initialized, c.f. below W=2 warning:

| In function 'pch_can_error',
|     inlined from 'pch_can_poll' at drivers/net/can/pch_can.c:739:4:
| drivers/net/can/pch_can.c:501:29: warning: 'errc' may be used uninitialized [-Wmaybe-uninitialized]
|   501 |                 cf->data[6] = errc & PCH_TEC;
|       |                             ^
| drivers/net/can/pch_can.c: In function 'pch_can_poll':
| drivers/net/can/pch_can.c:484:13: note: 'errc' was declared here
|   484 |         u32 errc, lec;
|       |             ^~~~

Moving errc initialization up solves this issue.

Fixes: 3a5c7e4611dd ("can: pch_can: do not report txerr and rxerr during bus-off")
Reported-by: Nathan Chancellor <nathan@kernel.org>
Signed-off-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Reviewed-by: Nathan Chancellor <nathan@kernel.org>
Link: https://lore.kernel.org/all/20220721160032.9348-1-mailhol.vincent@wanadoo.fr
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/can/pch_can.c

index 3e1d71c70b0d66488fceeb12c71302d73367d5e8..25def028a1dce08e0362af0c91913624d1f03ad0 100644 (file)
@@ -500,6 +500,7 @@ static void pch_can_error(struct net_device *ndev, u32 status)
        if (!skb)
                return;
 
+       errc = ioread32(&priv->regs->errc);
        if (status & PCH_BUS_OFF) {
                pch_can_set_tx_all(priv, 0);
                pch_can_set_rx_all(priv, 0);
@@ -512,7 +513,6 @@ static void pch_can_error(struct net_device *ndev, u32 status)
                cf->data[7] = (errc & PCH_REC) >> 8;
        }
 
-       errc = ioread32(&priv->regs->errc);
        /* Warning interrupt. */
        if (status & PCH_EWARN) {
                state = CAN_STATE_ERROR_WARNING;