aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Marc Kleine-Budde <mkl@pengutronix.de> 2024-02-20 09:16:16 +0100
committerGravatar Marc Kleine-Budde <mkl@pengutronix.de> 2024-02-20 09:40:46 +0100
commit00bf80c437dcbbd808d61cc2866c8f065ff436bd (patch)
treeb0166c3d4fa8e4e26b30b7105bf032e0a60208c4
parentcan: raw: fix getsockopt() for new CAN_RAW_XL_VCID_OPTS (diff)
downloadlinux-00bf80c437dcbbd808d61cc2866c8f065ff436bd.tar.gz
linux-00bf80c437dcbbd808d61cc2866c8f065ff436bd.tar.bz2
linux-00bf80c437dcbbd808d61cc2866c8f065ff436bd.zip
can: raw: raw_getsockopt(): reduce scope of err
Reduce the scope of the variable "err" to the individual cases. This is to avoid the mistake of setting "err" in the mistaken belief that it will be evaluated later. Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr> Link: https://lore.kernel.org/all/20240220-raw-setsockopt-v1-1-7d34cb1377fc@pengutronix.de Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
-rw-r--r--net/can/raw.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/net/can/raw.c b/net/can/raw.c
index 897ffc17d850..00533f64d69d 100644
--- a/net/can/raw.c
+++ b/net/can/raw.c
@@ -756,7 +756,6 @@ static int raw_getsockopt(struct socket *sock, int level, int optname,
struct raw_sock *ro = raw_sk(sk);
int len;
void *val;
- int err = 0;
if (level != SOL_CAN_RAW)
return -EINVAL;
@@ -766,7 +765,9 @@ static int raw_getsockopt(struct socket *sock, int level, int optname,
return -EINVAL;
switch (optname) {
- case CAN_RAW_FILTER:
+ case CAN_RAW_FILTER: {
+ int err = 0;
+
lock_sock(sk);
if (ro->count > 0) {
int fsize = ro->count * sizeof(struct can_filter);
@@ -791,7 +792,7 @@ static int raw_getsockopt(struct socket *sock, int level, int optname,
if (!err)
err = put_user(len, optlen);
return err;
-
+ }
case CAN_RAW_ERR_FILTER:
if (len > sizeof(can_err_mask_t))
len = sizeof(can_err_mask_t);
@@ -822,7 +823,9 @@ static int raw_getsockopt(struct socket *sock, int level, int optname,
val = &ro->xl_frames;
break;
- case CAN_RAW_XL_VCID_OPTS:
+ case CAN_RAW_XL_VCID_OPTS: {
+ int err = 0;
+
/* user space buffer to small for VCID opts? */
if (len < sizeof(ro->raw_vcid_opts)) {
/* return -ERANGE and needed space in optlen */
@@ -838,7 +841,7 @@ static int raw_getsockopt(struct socket *sock, int level, int optname,
if (!err)
err = put_user(len, optlen);
return err;
-
+ }
case CAN_RAW_JOIN_FILTERS:
if (len > sizeof(int))
len = sizeof(int);