diff options
author | Steffen Klassert <steffen.klassert@secunet.com> | 2018-02-01 02:49:23 -0500 |
---|---|---|
committer | Steffen Klassert <steffen.klassert@secunet.com> | 2018-02-02 03:23:23 -0500 |
commit | 19d7df69fdb2636856dc8919de72fc1bf8f79598 (patch) | |
tree | ee6305700ada26831ec92f469be4fdb7d4199f4e /net/xfrm | |
parent | 743ffffefac1c670c6618742c923f6275d819604 (diff) |
xfrm: Refuse to insert 32 bit userspace socket policies on 64 bit systems
We don't have a compat layer for xfrm, so userspace and kernel
structures have different sizes in this case. This results in
a broken configuration, so refuse to configure socket policies
when trying to insert from 32 bit userspace as we do it already
with policies inserted via netlink.
Reported-and-tested-by: syzbot+e1a1577ca8bcb47b769a@syzkaller.appspotmail.com
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Diffstat (limited to 'net/xfrm')
-rw-r--r-- | net/xfrm/xfrm_state.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c index 54e21f19d722..f9d2f2233f09 100644 --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c | |||
@@ -2056,6 +2056,11 @@ int xfrm_user_policy(struct sock *sk, int optname, u8 __user *optval, int optlen | |||
2056 | struct xfrm_mgr *km; | 2056 | struct xfrm_mgr *km; |
2057 | struct xfrm_policy *pol = NULL; | 2057 | struct xfrm_policy *pol = NULL; |
2058 | 2058 | ||
2059 | #ifdef CONFIG_COMPAT | ||
2060 | if (in_compat_syscall()) | ||
2061 | return -EOPNOTSUPP; | ||
2062 | #endif | ||
2063 | |||
2059 | if (!optval && !optlen) { | 2064 | if (!optval && !optlen) { |
2060 | xfrm_sk_policy_insert(sk, XFRM_POLICY_IN, NULL); | 2065 | xfrm_sk_policy_insert(sk, XFRM_POLICY_IN, NULL); |
2061 | xfrm_sk_policy_insert(sk, XFRM_POLICY_OUT, NULL); | 2066 | xfrm_sk_policy_insert(sk, XFRM_POLICY_OUT, NULL); |