浏览代码

do_ipv6_setsockopt(): don't open-code memdup_user()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Al Viro 8 年之前
父节点
当前提交
43727da90e
共有 1 个文件被更改,包括 3 次插入8 次删除
  1. 3 8
      net/ipv6/ipv6_sockglue.c

+ 3 - 8
net/ipv6/ipv6_sockglue.c

@@ -735,14 +735,9 @@ done:
 			retv = -ENOBUFS;
 			retv = -ENOBUFS;
 			break;
 			break;
 		}
 		}
-		gsf = kmalloc(optlen, GFP_KERNEL);
-		if (!gsf) {
-			retv = -ENOBUFS;
-			break;
-		}
-		retv = -EFAULT;
-		if (copy_from_user(gsf, optval, optlen)) {
-			kfree(gsf);
+		gsf = memdup_user(optval, optlen);
+		if (IS_ERR(gsf)) {
+			retv = PTR_ERR(gsf);
 			break;
 			break;
 		}
 		}
 		/* numsrc >= (4G-140)/128 overflow in 32 bits */
 		/* numsrc >= (4G-140)/128 overflow in 32 bits */