|
@@ -1985,6 +1985,10 @@ static int copy_msghdr_from_user(struct msghdr *kmsg,
|
|
|
{
|
|
{
|
|
|
if (copy_from_user(kmsg, umsg, sizeof(struct msghdr)))
|
|
if (copy_from_user(kmsg, umsg, sizeof(struct msghdr)))
|
|
|
return -EFAULT;
|
|
return -EFAULT;
|
|
|
|
|
+
|
|
|
|
|
+ if (kmsg->msg_namelen < 0)
|
|
|
|
|
+ return -EINVAL;
|
|
|
|
|
+
|
|
|
if (kmsg->msg_namelen > sizeof(struct sockaddr_storage))
|
|
if (kmsg->msg_namelen > sizeof(struct sockaddr_storage))
|
|
|
kmsg->msg_namelen = sizeof(struct sockaddr_storage);
|
|
kmsg->msg_namelen = sizeof(struct sockaddr_storage);
|
|
|
return 0;
|
|
return 0;
|