Re: drivers/net/can/usb/etas_es58x/es58x_fd.c:174:8: warning: Uninitialized variable: rx_event_msg [uninitvar]

From: Marc Kleine-Budde
Date: Wed Mar 02 2022 - 05:32:39 EST


On 02.03.2022 17:47:08, kernel test robot wrote:
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: 575115360652e9920cc56a028a286ebe9bf82694
> commit: c664e2137a27680922d8aeb64fb10313416b254f can: etas_es58x: add support for the ETAS ES58X_FD CAN USB interfaces
> date: 11 months ago
> compiler: powerpc64-linux-gcc (GCC) 11.2.0
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <yujie.liu@xxxxxxxxx>
>
>
> 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);
> ^
>
> vim +174 drivers/net/can/usb/etas_es58x/es58x_fd.c
>
> c664e2137a2768 Vincent Mailhol 2021-04-10 165
> c664e2137a2768 Vincent Mailhol 2021-04-10 166 static int es58x_fd_rx_event_msg(struct net_device *netdev,
> c664e2137a2768 Vincent Mailhol 2021-04-10 167 const struct es58x_fd_urb_cmd *es58x_fd_urb_cmd)
> c664e2137a2768 Vincent Mailhol 2021-04-10 168 {
> c664e2137a2768 Vincent Mailhol 2021-04-10 169 struct es58x_device *es58x_dev = es58x_priv(netdev)->es58x_dev;
> c664e2137a2768 Vincent Mailhol 2021-04-10 170 u16 msg_len = get_unaligned_le16(&es58x_fd_urb_cmd->msg_len);
> c664e2137a2768 Vincent Mailhol 2021-04-10 @171 const struct es58x_fd_rx_event_msg *rx_event_msg;
> c664e2137a2768 Vincent Mailhol 2021-04-10 172 int ret;
> c664e2137a2768 Vincent Mailhol 2021-04-10 173
> c664e2137a2768 Vincent Mailhol 2021-04-10 @174 ret = es58x_check_msg_len(es58x_dev->dev, *rx_event_msg, msg_len);
> c664e2137a2768 Vincent Mailhol 2021-04-10 175 if (ret)
> c664e2137a2768 Vincent Mailhol 2021-04-10 176 return ret;
> c664e2137a2768 Vincent Mailhol 2021-04-10 177
> c664e2137a2768 Vincent Mailhol 2021-04-10 178 rx_event_msg = &es58x_fd_urb_cmd->rx_event_msg;
> c664e2137a2768 Vincent Mailhol 2021-04-10 179
> c664e2137a2768 Vincent Mailhol 2021-04-10 180 return es58x_rx_err_msg(netdev, rx_event_msg->error_code,
> c664e2137a2768 Vincent Mailhol 2021-04-10 181 rx_event_msg->event_code,
> c664e2137a2768 Vincent Mailhol 2021-04-10 182 get_unaligned_le64(&rx_event_msg->timestamp));
> c664e2137a2768 Vincent Mailhol 2021-04-10 183 }
> c664e2137a2768 Vincent Mailhol 2021-04-10 184

Thanks for the report.

This looks like a false positive to me, as es58x_check_msg_len() is not
a function, but a macro:

| #define es58x_check_msg_len(dev, msg, actual_len) \
| __es58x_check_msg_len(dev, __stringify(msg), \
| actual_len, sizeof(msg))

__es58x_check_msg_len() don't use "rx_event_msg" directly, but only a
string representation of it and a "sizeof()".

I think it's possible to assign rx_event_msg before the
es58x_check_msg_len(). I think (hope?) the compiler will not optimize
anything away. :)

regards,
Marc

--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |

Attachment: signature.asc
Description: PGP signature