netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] xfrm: Force a dst refcount before entering the xfrm type handlers
@ 2011-03-16  7:08 Steffen Klassert
  2011-03-16  7:09 ` [PATCH 2/2] dst: Clone child entry in skb_dst_pop Steffen Klassert
  2011-03-16  7:17 ` [PATCH 1/2] xfrm: Force a dst refcount before entering the xfrm type handlers David Miller
  0 siblings, 2 replies; 5+ messages in thread
From: Steffen Klassert @ 2011-03-16  7:08 UTC (permalink / raw)
  To: David Miller, Eric Dumazet; +Cc: netdev

Crypto requests might return asynchronous. In this case we leave
the rcu protected region, so force a refcount on the skb's
destination entry before we enter the xfrm type input/output
handlers.

This fixes a crash when a route is deleted whilst sending IPsec
data that is transformed by an asynchronous algorithm.

Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
---
 net/xfrm/xfrm_input.c  |    2 ++
 net/xfrm/xfrm_output.c |    2 ++
 2 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c
index 872065c..341cd11 100644
--- a/net/xfrm/xfrm_input.c
+++ b/net/xfrm/xfrm_input.c
@@ -190,6 +190,8 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
 		XFRM_SKB_CB(skb)->seq.input.low = seq;
 		XFRM_SKB_CB(skb)->seq.input.hi = seq_hi;
 
+		skb_dst_force(skb);
+
 		nexthdr = x->type->input(x, skb);
 
 		if (nexthdr == -EINPROGRESS)
diff --git a/net/xfrm/xfrm_output.c b/net/xfrm/xfrm_output.c
index 1aba03f..8f3f0ee 100644
--- a/net/xfrm/xfrm_output.c
+++ b/net/xfrm/xfrm_output.c
@@ -78,6 +78,8 @@ static int xfrm_output_one(struct sk_buff *skb, int err)
 
 		spin_unlock_bh(&x->lock);
 
+		skb_dst_force(skb);
+
 		err = x->type->output(x, skb);
 		if (err == -EINPROGRESS)
 			goto out_exit;
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-03-16 17:40 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-16  7:08 [PATCH 1/2] xfrm: Force a dst refcount before entering the xfrm type handlers Steffen Klassert
2011-03-16  7:09 ` [PATCH 2/2] dst: Clone child entry in skb_dst_pop Steffen Klassert
2011-03-16  7:17 ` [PATCH 1/2] xfrm: Force a dst refcount before entering the xfrm type handlers David Miller
2011-03-16  7:43   ` Steffen Klassert
2011-03-16 17:41     ` 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).