From fe9ef3ce395d06e4f17e5995ab8455b9627f3306 Mon Sep 17 00:00:00 2001 From: Nikolay Aleksandrov Date: Sat, 21 Nov 2015 15:57:28 +0100 Subject: [PATCH] net: ipmr: make ip_mroute_getsockopt more understandable Use a switch to determine if optname is correct and set val accordingly. This produces a much more straight-forward and readable code. Signed-off-by: Nikolay Aleksandrov Signed-off-by: David S. Miller --- net/ipv4/ipmr.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/net/ipv4/ipmr.c b/net/ipv4/ipmr.c index 286ede3716ee..694fecf7838e 100644 --- a/net/ipv4/ipmr.c +++ b/net/ipv4/ipmr.c @@ -1443,29 +1443,29 @@ int ip_mroute_getsockopt(struct sock *sk, int optname, char __user *optval, int if (!mrt) return -ENOENT; - if (optname != MRT_VERSION && - optname != MRT_PIM && - optname != MRT_ASSERT) - return -ENOPROTOOPT; - - if (get_user(olr, optlen)) - return -EFAULT; - - olr = min_t(unsigned int, olr, sizeof(int)); - if (olr < 0) - return -EINVAL; - - if (put_user(olr, optlen)) - return -EFAULT; - if (optname == MRT_VERSION) { + switch (optname) { + case MRT_VERSION: val = 0x0305; - } else if (optname == MRT_PIM) { + break; + case MRT_PIM: if (!pimsm_enabled()) return -ENOPROTOOPT; val = mrt->mroute_do_pim; - } else { + break; + case MRT_ASSERT: val = mrt->mroute_do_assert; + break; + default: + return -ENOPROTOOPT; } + + if (get_user(olr, optlen)) + return -EFAULT; + olr = min_t(unsigned int, olr, sizeof(int)); + if (olr < 0) + return -EINVAL; + if (put_user(olr, optlen)) + return -EFAULT; if (copy_to_user(optval, &val, olr)) return -EFAULT; return 0;