diff options
Diffstat (limited to 'net/core')
-rw-r--r-- | net/core/datagram.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/net/core/datagram.c b/net/core/datagram.c index 5574a5ddf908..95b851f3d713 100644 --- a/net/core/datagram.c +++ b/net/core/datagram.c | |||
@@ -229,9 +229,13 @@ EXPORT_SYMBOL(skb_free_datagram); | |||
229 | 229 | ||
230 | void skb_free_datagram_locked(struct sock *sk, struct sk_buff *skb) | 230 | void skb_free_datagram_locked(struct sock *sk, struct sk_buff *skb) |
231 | { | 231 | { |
232 | lock_sock(sk); | 232 | lock_sock_bh(sk); |
233 | skb_free_datagram(sk, skb); | 233 | skb_orphan(skb); |
234 | release_sock(sk); | 234 | sk_mem_reclaim_partial(sk); |
235 | unlock_sock_bh(sk); | ||
236 | |||
237 | /* skb is now orphaned, might be freed outside of locked section */ | ||
238 | consume_skb(skb); | ||
235 | } | 239 | } |
236 | EXPORT_SYMBOL(skb_free_datagram_locked); | 240 | EXPORT_SYMBOL(skb_free_datagram_locked); |
237 | 241 | ||