diff options
Diffstat (limited to 'net/ipv4/udp.c')
-rw-r--r-- | net/ipv4/udp.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index 608a5446d05b..8fef859db35d 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c | |||
@@ -95,6 +95,7 @@ | |||
95 | #include <linux/mm.h> | 95 | #include <linux/mm.h> |
96 | #include <linux/inet.h> | 96 | #include <linux/inet.h> |
97 | #include <linux/netdevice.h> | 97 | #include <linux/netdevice.h> |
98 | #include <linux/slab.h> | ||
98 | #include <net/tcp_states.h> | 99 | #include <net/tcp_states.h> |
99 | #include <linux/skbuff.h> | 100 | #include <linux/skbuff.h> |
100 | #include <linux/proc_fs.h> | 101 | #include <linux/proc_fs.h> |
@@ -471,8 +472,8 @@ static struct sock *__udp4_lib_lookup(struct net *net, __be32 saddr, | |||
471 | if (hslot->count < hslot2->count) | 472 | if (hslot->count < hslot2->count) |
472 | goto begin; | 473 | goto begin; |
473 | 474 | ||
474 | result = udp4_lib_lookup2(net, INADDR_ANY, sport, | 475 | result = udp4_lib_lookup2(net, saddr, sport, |
475 | daddr, hnum, dif, | 476 | INADDR_ANY, hnum, dif, |
476 | hslot2, slot2); | 477 | hslot2, slot2); |
477 | } | 478 | } |
478 | rcu_read_unlock(); | 479 | rcu_read_unlock(); |
@@ -1371,8 +1372,10 @@ int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) | |||
1371 | bh_lock_sock(sk); | 1372 | bh_lock_sock(sk); |
1372 | if (!sock_owned_by_user(sk)) | 1373 | if (!sock_owned_by_user(sk)) |
1373 | rc = __udp_queue_rcv_skb(sk, skb); | 1374 | rc = __udp_queue_rcv_skb(sk, skb); |
1374 | else | 1375 | else if (sk_add_backlog(sk, skb)) { |
1375 | sk_add_backlog(sk, skb); | 1376 | bh_unlock_sock(sk); |
1377 | goto drop; | ||
1378 | } | ||
1376 | bh_unlock_sock(sk); | 1379 | bh_unlock_sock(sk); |
1377 | 1380 | ||
1378 | return rc; | 1381 | return rc; |