diff --git a/net/core/sock.c b/net/core/sock.c index 1a7e6eac90b04f89efca8620ed64686496a8e647..e110b9004147b4418391467a4b31715a5dc2902a 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -404,8 +404,9 @@ int sock_setsockopt(struct socket *sock, int level, int optname, if (!valbool) { sk->sk_bound_dev_if = 0; } else { - if (optlen > IFNAMSIZ) - optlen = IFNAMSIZ; + if (optlen > IFNAMSIZ - 1) + optlen = IFNAMSIZ - 1; + memset(devname, 0, sizeof(devname)); if (copy_from_user(devname, optval, optlen)) { ret = -EFAULT; break;