diff --git a/[refs] b/[refs] index 9476850117d9..21f9446a44e6 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: c883f215a23a9352097b8d17fb8dae22ff134a14 +refs/heads/master: ba78073e6f70cd9c64a478a9bd901d7c8736cfbc diff --git a/trunk/net/core/sock.c b/trunk/net/core/sock.c index 22183c2ef284..7e51d3a5e4f6 100644 --- a/trunk/net/core/sock.c +++ b/trunk/net/core/sock.c @@ -206,7 +206,19 @@ static int sock_set_timeout(long *timeo_p, char __user *optval, int optlen) return -EINVAL; if (copy_from_user(&tv, optval, sizeof(tv))) return -EFAULT; - + if (tv.tv_usec < 0 || tv.tv_usec >= USEC_PER_SEC) + return -EDOM; + + if (tv.tv_sec < 0) { + static int warned = 0; + *timeo_p = 0; + if (warned < 10 && net_ratelimit()) + warned++; + printk(KERN_INFO "sock_set_timeout: `%s' (pid %d) " + "tries to set negative timeout\n", + current->comm, current->pid); + return 0; + } *timeo_p = MAX_SCHEDULE_TIMEOUT; if (tv.tv_sec == 0 && tv.tv_usec == 0) return 0;