X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=net%2Fsocket.c;h=41e8847508aad85a22f1ba61e4999daa5ca46342;hb=0aa73ba1c4e1ad1d51a29e0df95ccd9f746918b6;hp=49917a1cac7d921f6fae418bb89a19a4e9e02a1f;hpb=85afd82780df133f03185aec7943ee3e0ed56a7b;p=firefly-linux-kernel-4.4.55.git diff --git a/net/socket.c b/net/socket.c index 49917a1cac7d..41e8847508aa 100644 --- a/net/socket.c +++ b/net/socket.c @@ -2098,12 +2098,17 @@ SYSCALL_DEFINE2(socketcall, int, call, unsigned long __user *, args) unsigned long a[6]; unsigned long a0, a1; int err; + unsigned int len; if (call < 1 || call > SYS_ACCEPT4) return -EINVAL; + len = nargs[call]; + if (len > sizeof(a)) + return -EINVAL; + /* copy_from_user should be SMP safe. */ - if (copy_from_user(a, args, nargs[call])) + if (copy_from_user(a, args, len)) return -EFAULT; audit_socketcall(nargs[call] / sizeof(unsigned long), a);