net: xfrm: fix memory leak in xfrm_user_policy()
authorYu Kuai <yukuai3@huawei.com>
Tue, 10 Nov 2020 01:14:43 +0000 (09:14 +0800)
committerSteffen Klassert <steffen.klassert@secunet.com>
Tue, 10 Nov 2020 08:14:25 +0000 (09:14 +0100)
if xfrm_get_translator() failed, xfrm_user_policy() return without
freeing 'data', which is allocated in memdup_sockptr().

Fixes: 96392ee5a13b ("xfrm/compat: Translate 32-bit user_policy from sockptr")
Reported-by: Hulk Robot <hulkci@huawei.com>
Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
net/xfrm/xfrm_state.c

index a77da7a..2f15178 100644 (file)
@@ -2382,8 +2382,10 @@ int xfrm_user_policy(struct sock *sk, int optname, sockptr_t optval, int optlen)
        if (in_compat_syscall()) {
                struct xfrm_translator *xtr = xfrm_get_translator();
 
-               if (!xtr)
+               if (!xtr) {
+                       kfree(data);
                        return -EOPNOTSUPP;
+               }
 
                err = xtr->xlate_user_policy_sockptr(&data, optlen);
                xfrm_put_translator(xtr);