diff options
author | Hiroaki SHIMODA <shimoda.hiroaki@gmail.com> | 2011-02-10 23:08:33 -0800 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-02-10 23:08:33 -0800 |
commit | 0b150932197b185ad5816932912e648116c7a96a (patch) | |
tree | 3b3092f2876be20a48088ee0d1cf29cf6028c843 /net | |
parent | 520732af9158308e96245b54f1d573861eafb631 (diff) | |
download | lwn-0b150932197b185ad5816932912e648116c7a96a.tar.gz lwn-0b150932197b185ad5816932912e648116c7a96a.zip |
xfrm: avoid possible oopse in xfrm_alloc_dst
Commit 80c802f3073e84 (xfrm: cache bundles instead of policies for
outgoing flows) introduced possible oopse when dst_alloc returns NULL.
Signed-off-by: Hiroaki SHIMODA <shimoda.hiroaki@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net')
-rw-r--r-- | net/xfrm/xfrm_policy.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 8b3ef404c794..6459588befc3 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@ -1340,10 +1340,13 @@ static inline struct xfrm_dst *xfrm_alloc_dst(struct net *net, int family) default: BUG(); } - xdst = dst_alloc(dst_ops) ?: ERR_PTR(-ENOBUFS); + xdst = dst_alloc(dst_ops); xfrm_policy_put_afinfo(afinfo); - xdst->flo.ops = &xfrm_bundle_fc_ops; + if (likely(xdst)) + xdst->flo.ops = &xfrm_bundle_fc_ops; + else + xdst = ERR_PTR(-ENOBUFS); return xdst; } |