diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2017-05-14 00:16:28 +0200 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2017-06-30 08:04:07 +0200 |
commit | 7f2d17c67ae3a0954e35092564f1cf58726b2c44 (patch) | |
tree | a994866af9e81e5199a273c4f3741abceecd0476 /net | |
parent | ima_write_policy(): don't open-code memdup_user_nul() (diff) | |
download | linux-7f2d17c67ae3a0954e35092564f1cf58726b2c44.tar.xz linux-7f2d17c67ae3a0954e35092564f1cf58726b2c44.zip |
xfrm_user_policy(): don't open-code memdup_user()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'net')
-rw-r--r-- | net/xfrm/xfrm_state.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c index fc3c5aa38754..5780cdad2260 100644 --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c @@ -2023,13 +2023,9 @@ int xfrm_user_policy(struct sock *sk, int optname, u8 __user *optval, int optlen if (optlen <= 0 || optlen > PAGE_SIZE) return -EMSGSIZE; - data = kmalloc(optlen, GFP_KERNEL); - if (!data) - return -ENOMEM; - - err = -EFAULT; - if (copy_from_user(data, optval, optlen)) - goto out; + data = memdup_user(optval, optlen); + if (IS_ERR(data)) + return PTR_ERR(data); err = -EINVAL; rcu_read_lock(); @@ -2047,7 +2043,6 @@ int xfrm_user_policy(struct sock *sk, int optname, u8 __user *optval, int optlen err = 0; } -out: kfree(data); return err; } |