kern_{get,set}sockopt - invalid value check
authorAlex Hornung <ahornung@gmail.com>
Wed, 17 Mar 2010 14:20:15 +0000 (14:20 +0000)
committerAlex Hornung <ahornung@gmail.com>
Wed, 17 Mar 2010 14:20:15 +0000 (14:20 +0000)
* Check for sopt_val != NULL && sopt_valsize == 0 and return EINVAL in
  this case, or else an assert will be triggered and the kernel will
  panic.

Dragonfly-bug: http://bugs.dragonflybsd.org/issue1696

sys/kern/uipc_syscalls.c

index 5aaa424..2c3774c 100644 (file)
@@ -1091,6 +1091,8 @@ kern_setsockopt(int s, struct sockopt *sopt)
 
        if (sopt->sopt_val == NULL && sopt->sopt_valsize != 0)
                return (EFAULT);
+       if (sopt->sopt_val != NULL && sopt->sopt_valsize == 0)
+               return (EINVAL);
        if (sopt->sopt_valsize < 0)
                return (EINVAL);
 
@@ -1154,6 +1156,8 @@ kern_getsockopt(int s, struct sockopt *sopt)
 
        if (sopt->sopt_val == NULL && sopt->sopt_valsize != 0)
                return (EFAULT);
+       if (sopt->sopt_val != NULL && sopt->sopt_valsize == 0)
+               return (EINVAL);
        if (sopt->sopt_valsize < 0 || sopt->sopt_valsize > SOMAXOPT_SIZE)
                return (EINVAL);