* pull request (net): ipsec 2017-10-24
@ 2017-10-24 10:37 Steffen Klassert
2017-10-24 10:37 ` [PATCH 1/2] ipsec: Fix dst leak in xfrm_bundle_create() Steffen Klassert
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Steffen Klassert @ 2017-10-24 10:37 UTC (permalink / raw)
To: David Miller; +Cc: Herbert Xu, Steffen Klassert, netdev
1) Fix a memleak when we don't find a inner_mode
during bundle creation. From David Miller.
2) Fix a xfrm policy dump crash. We may crash
on error when dumping policies via netlink.
Fix this by initializing the policy walk
with the cb->start method. This fix is a
serious stable candidate. From Herbert Xu.
Please pull or let me know if there are problems.
Thanks!
The following changes since commit c0576e3975084d4699b7bfef578613fb8e1144f6:
net: call cgroup_sk_alloc() earlier in sk_clone_lock() (2017-10-10 20:24:29 -0700)
are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec.git master
for you to fetch changes up to 1137b5e2529a8f5ca8ee709288ecba3e68044df2:
ipsec: Fix aborted xfrm policy dump crash (2017-10-23 09:35:48 +0200)
----------------------------------------------------------------
David Miller (1):
ipsec: Fix dst leak in xfrm_bundle_create().
Herbert Xu (1):
ipsec: Fix aborted xfrm policy dump crash
net/xfrm/xfrm_policy.c | 16 ++++++++--------
net/xfrm/xfrm_user.c | 25 +++++++++++++++----------
2 files changed, 23 insertions(+), 18 deletions(-)
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH 1/2] ipsec: Fix dst leak in xfrm_bundle_create(). 2017-10-24 10:37 pull request (net): ipsec 2017-10-24 Steffen Klassert @ 2017-10-24 10:37 ` Steffen Klassert 2017-10-24 10:37 ` [PATCH 2/2] ipsec: Fix aborted xfrm policy dump crash Steffen Klassert 2017-10-24 11:18 ` pull request (net): ipsec 2017-10-24 David Miller 2 siblings, 0 replies; 6+ messages in thread From: Steffen Klassert @ 2017-10-24 10:37 UTC (permalink / raw) To: David Miller; +Cc: Herbert Xu, Steffen Klassert, netdev From: David Miller <davem@davemloft.net> If we cannot find a suitable inner_mode value, we will leak the currently allocated 'xdst'. The fix is to make sure it is linked into the chain before erroring out. Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com> --- net/xfrm/xfrm_policy.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index f062539..2746b62 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@ -1573,6 +1573,14 @@ static struct dst_entry *xfrm_bundle_create(struct xfrm_policy *policy, goto put_states; } + if (!dst_prev) + dst0 = dst1; + else + /* Ref count is taken during xfrm_alloc_dst() + * No need to do dst_clone() on dst1 + */ + dst_prev->child = dst1; + if (xfrm[i]->sel.family == AF_UNSPEC) { inner_mode = xfrm_ip2inner_mode(xfrm[i], xfrm_af2proto(family)); @@ -1584,14 +1592,6 @@ static struct dst_entry *xfrm_bundle_create(struct xfrm_policy *policy, } else inner_mode = xfrm[i]->inner_mode; - if (!dst_prev) - dst0 = dst1; - else - /* Ref count is taken during xfrm_alloc_dst() - * No need to do dst_clone() on dst1 - */ - dst_prev->child = dst1; - xdst->route = dst; dst_copy_metrics(dst1, dst); -- 2.7.4 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] ipsec: Fix aborted xfrm policy dump crash 2017-10-24 10:37 pull request (net): ipsec 2017-10-24 Steffen Klassert 2017-10-24 10:37 ` [PATCH 1/2] ipsec: Fix dst leak in xfrm_bundle_create() Steffen Klassert @ 2017-10-24 10:37 ` Steffen Klassert 2017-10-24 11:18 ` pull request (net): ipsec 2017-10-24 David Miller 2 siblings, 0 replies; 6+ messages in thread From: Steffen Klassert @ 2017-10-24 10:37 UTC (permalink / raw) To: David Miller; +Cc: Herbert Xu, Steffen Klassert, netdev From: Herbert Xu <herbert@gondor.apana.org.au> An independent security researcher, Mohamed Ghannam, has reported this vulnerability to Beyond Security's SecuriTeam Secure Disclosure program. The xfrm_dump_policy_done function expects xfrm_dump_policy to have been called at least once or it will crash. This can be triggered if a dump fails because the target socket's receive buffer is full. This patch fixes it by using the cb->start mechanism to ensure that the initialisation is always done regardless of the buffer situation. Fixes: 12a169e7d8f4 ("ipsec: Put dumpers on the dump list") Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com> --- net/xfrm/xfrm_user.c | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c index b997f13..e44a0fe 100644 --- a/net/xfrm/xfrm_user.c +++ b/net/xfrm/xfrm_user.c @@ -1693,32 +1693,34 @@ static int dump_one_policy(struct xfrm_policy *xp, int dir, int count, void *ptr static int xfrm_dump_policy_done(struct netlink_callback *cb) { - struct xfrm_policy_walk *walk = (struct xfrm_policy_walk *) &cb->args[1]; + struct xfrm_policy_walk *walk = (struct xfrm_policy_walk *)cb->args; struct net *net = sock_net(cb->skb->sk); xfrm_policy_walk_done(walk, net); return 0; } +static int xfrm_dump_policy_start(struct netlink_callback *cb) +{ + struct xfrm_policy_walk *walk = (struct xfrm_policy_walk *)cb->args; + + BUILD_BUG_ON(sizeof(*walk) > sizeof(cb->args)); + + xfrm_policy_walk_init(walk, XFRM_POLICY_TYPE_ANY); + return 0; +} + static int xfrm_dump_policy(struct sk_buff *skb, struct netlink_callback *cb) { struct net *net = sock_net(skb->sk); - struct xfrm_policy_walk *walk = (struct xfrm_policy_walk *) &cb->args[1]; + struct xfrm_policy_walk *walk = (struct xfrm_policy_walk *)cb->args; struct xfrm_dump_info info; - BUILD_BUG_ON(sizeof(struct xfrm_policy_walk) > - sizeof(cb->args) - sizeof(cb->args[0])); - info.in_skb = cb->skb; info.out_skb = skb; info.nlmsg_seq = cb->nlh->nlmsg_seq; info.nlmsg_flags = NLM_F_MULTI; - if (!cb->args[0]) { - cb->args[0] = 1; - xfrm_policy_walk_init(walk, XFRM_POLICY_TYPE_ANY); - } - (void) xfrm_policy_walk(net, walk, dump_one_policy, &info); return skb->len; @@ -2474,6 +2476,7 @@ static const struct nla_policy xfrma_spd_policy[XFRMA_SPD_MAX+1] = { static const struct xfrm_link { int (*doit)(struct sk_buff *, struct nlmsghdr *, struct nlattr **); + int (*start)(struct netlink_callback *); int (*dump)(struct sk_buff *, struct netlink_callback *); int (*done)(struct netlink_callback *); const struct nla_policy *nla_pol; @@ -2487,6 +2490,7 @@ static const struct xfrm_link { [XFRM_MSG_NEWPOLICY - XFRM_MSG_BASE] = { .doit = xfrm_add_policy }, [XFRM_MSG_DELPOLICY - XFRM_MSG_BASE] = { .doit = xfrm_get_policy }, [XFRM_MSG_GETPOLICY - XFRM_MSG_BASE] = { .doit = xfrm_get_policy, + .start = xfrm_dump_policy_start, .dump = xfrm_dump_policy, .done = xfrm_dump_policy_done }, [XFRM_MSG_ALLOCSPI - XFRM_MSG_BASE] = { .doit = xfrm_alloc_userspi }, @@ -2539,6 +2543,7 @@ static int xfrm_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, { struct netlink_dump_control c = { + .start = link->start, .dump = link->dump, .done = link->done, }; -- 2.7.4 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: pull request (net): ipsec 2017-10-24 2017-10-24 10:37 pull request (net): ipsec 2017-10-24 Steffen Klassert 2017-10-24 10:37 ` [PATCH 1/2] ipsec: Fix dst leak in xfrm_bundle_create() Steffen Klassert 2017-10-24 10:37 ` [PATCH 2/2] ipsec: Fix aborted xfrm policy dump crash Steffen Klassert @ 2017-10-24 11:18 ` David Miller 2017-10-24 11:35 ` Steffen Klassert 2 siblings, 1 reply; 6+ messages in thread From: David Miller @ 2017-10-24 11:18 UTC (permalink / raw) To: steffen.klassert; +Cc: herbert, netdev From: Steffen Klassert <steffen.klassert@secunet.com> Date: Tue, 24 Oct 2017 12:37:38 +0200 > 1) Fix a memleak when we don't find a inner_mode > during bundle creation. From David Miller. > > 2) Fix a xfrm policy dump crash. We may crash > on error when dumping policies via netlink. > Fix this by initializing the policy walk > with the cb->start method. This fix is a > serious stable candidate. From Herbert Xu. > > Please pull or let me know if there are problems. Pulled, please submit #2 to -stable indeed! ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: pull request (net): ipsec 2017-10-24 2017-10-24 11:18 ` pull request (net): ipsec 2017-10-24 David Miller @ 2017-10-24 11:35 ` Steffen Klassert 2017-10-24 11:42 ` David Miller 0 siblings, 1 reply; 6+ messages in thread From: Steffen Klassert @ 2017-10-24 11:35 UTC (permalink / raw) To: David Miller; +Cc: herbert, netdev On Tue, Oct 24, 2017 at 08:18:32PM +0900, David Miller wrote: > From: Steffen Klassert <steffen.klassert@secunet.com> > Date: Tue, 24 Oct 2017 12:37:38 +0200 > > > 1) Fix a memleak when we don't find a inner_mode > > during bundle creation. From David Miller. > > > > 2) Fix a xfrm policy dump crash. We may crash > > on error when dumping policies via netlink. > > Fix this by initializing the policy walk > > with the cb->start method. This fix is a > > serious stable candidate. From Herbert Xu. > > > > Please pull or let me know if there are problems. > > Pulled, please submit #2 to -stable indeed! I can do so, but whenever I sent something networking related to -stable, it was ignored. I think this is because Greg expects that you do the stable submissions for networking. ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: pull request (net): ipsec 2017-10-24 2017-10-24 11:35 ` Steffen Klassert @ 2017-10-24 11:42 ` David Miller 0 siblings, 0 replies; 6+ messages in thread From: David Miller @ 2017-10-24 11:42 UTC (permalink / raw) To: steffen.klassert; +Cc: herbert, netdev From: Steffen Klassert <steffen.klassert@secunet.com> Date: Tue, 24 Oct 2017 13:35:25 +0200 > On Tue, Oct 24, 2017 at 08:18:32PM +0900, David Miller wrote: >> From: Steffen Klassert <steffen.klassert@secunet.com> >> Date: Tue, 24 Oct 2017 12:37:38 +0200 >> >> > 1) Fix a memleak when we don't find a inner_mode >> > during bundle creation. From David Miller. >> > >> > 2) Fix a xfrm policy dump crash. We may crash >> > on error when dumping policies via netlink. >> > Fix this by initializing the policy walk >> > with the cb->start method. This fix is a >> > serious stable candidate. From Herbert Xu. >> > >> > Please pull or let me know if there are problems. >> >> Pulled, please submit #2 to -stable indeed! > > I can do so, but whenever I sent something networking related > to -stable, it was ignored. I think this is because Greg expects > that you do the stable submissions for networking. Send it, CC: me, and I'll reply making sure Greg knows. Thanks. ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2017-10-24 11:42 UTC | newest] Thread overview: 6+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2017-10-24 10:37 pull request (net): ipsec 2017-10-24 Steffen Klassert 2017-10-24 10:37 ` [PATCH 1/2] ipsec: Fix dst leak in xfrm_bundle_create() Steffen Klassert 2017-10-24 10:37 ` [PATCH 2/2] ipsec: Fix aborted xfrm policy dump crash Steffen Klassert 2017-10-24 11:18 ` pull request (net): ipsec 2017-10-24 David Miller 2017-10-24 11:35 ` Steffen Klassert 2017-10-24 11:42 ` David Miller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).