can: raw: fix getsockopt() for new CAN_RAW_XL_VCID_OPTS
authorOliver Hartkopp <socketcan@hartkopp.net>
Mon, 19 Feb 2024 20:00:21 +0000 (21:00 +0100)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Tue, 20 Feb 2024 07:20:42 +0000 (08:20 +0100)
The code for the CAN_RAW_XL_VCID_OPTS getsockopt() was incompletely adopted
from the CAN_RAW_FILTER getsockopt().

Add the missing put_user() and return statements.

Flagged by Smatch.

Fixes: c83c22ec1493 ("can: canxl: add virtual CAN network identifier support")
Reported-by: Simon Horman <horms@kernel.org>
Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
Link: https://lore.kernel.org/all/20240219200021.12113-1-socketcan@hartkopp.net
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
net/can/raw.c

index cb8e6f788af84ac65830399baac6d1cf3d093e08..897ffc17d850670003e5cf3402477e8fc201f61e 100644 (file)
@@ -835,7 +835,9 @@ static int raw_getsockopt(struct socket *sock, int level, int optname,
                        if (copy_to_user(optval, &ro->raw_vcid_opts, len))
                                err = -EFAULT;
                }
-               break;
+               if (!err)
+                       err = put_user(len, optlen);
+               return err;
 
        case CAN_RAW_JOIN_FILTERS:
                if (len > sizeof(int))