can: etas_es58x: es58x_fd_rx_event_msg(): initialize rx_event_msg before calling...
authorVincent Mailhol <mailhol.vincent@wanadoo.fr>
Sun, 6 Mar 2022 10:13:02 +0000 (19:13 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 13 Apr 2022 18:59:08 +0000 (20:59 +0200)
[ Upstream commit 7a8cd7c0ee823a1cc893ab3feaa23e4b602bfb9a ]

Function es58x_fd_rx_event() invokes the es58x_check_msg_len() macro:

|  ret = es58x_check_msg_len(es58x_dev->dev, *rx_event_msg, msg_len);

While doing so, it dereferences an uninitialized
variable: *rx_event_msg.

This is actually harmless because es58x_check_msg_len() only uses
preprocessor macros (sizeof() and __stringify()) on
*rx_event_msg. c.f. [1].

Nonetheless, this pattern is confusing so the lines are reordered to
make sure that rx_event_msg is correctly initialized.

This patch also fixes a false positive warning reported by cppcheck:

| cppcheck possible warnings: (new ones prefixed by >>, may not be real problems)
|
|    In file included from drivers/net/can/usb/etas_es58x/es58x_fd.c:
| >> drivers/net/can/usb/etas_es58x/es58x_fd.c:174:8: warning: Uninitialized variable: rx_event_msg [uninitvar]
|     ret = es58x_check_msg_len(es58x_dev->dev, *rx_event_msg, msg_len);
|           ^

[1] https://elixir.bootlin.com/linux/v5.16/source/drivers/net/can/usb/etas_es58x/es58x_core.h#L467

Link: https://lore.kernel.org/all/20220306101302.708783-1-mailhol.vincent@wanadoo.fr
Signed-off-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/can/usb/etas_es58x/es58x_fd.c

index af042aa55f59e25ce82f7543587f631277fdcc2b..26bf4775e884c3108737cedb8a6e9b06c342fab0 100644 (file)
@@ -171,12 +171,11 @@ static int es58x_fd_rx_event_msg(struct net_device *netdev,
        const struct es58x_fd_rx_event_msg *rx_event_msg;
        int ret;
 
+       rx_event_msg = &es58x_fd_urb_cmd->rx_event_msg;
        ret = es58x_check_msg_len(es58x_dev->dev, *rx_event_msg, msg_len);
        if (ret)
                return ret;
 
-       rx_event_msg = &es58x_fd_urb_cmd->rx_event_msg;
-
        return es58x_rx_err_msg(netdev, rx_event_msg->error_code,
                                rx_event_msg->event_code,
                                get_unaligned_le64(&rx_event_msg->timestamp));