|
@@ -1231,7 +1231,7 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
|
|
int proto)
|
|
int proto)
|
|
{
|
|
{
|
|
struct sock *sk;
|
|
struct sock *sk;
|
|
- struct udphdr *uh = udp_hdr(skb);
|
|
|
|
|
|
+ struct udphdr *uh;
|
|
unsigned short ulen;
|
|
unsigned short ulen;
|
|
struct rtable *rt = (struct rtable*)skb->dst;
|
|
struct rtable *rt = (struct rtable*)skb->dst;
|
|
__be32 saddr = ip_hdr(skb)->saddr;
|
|
__be32 saddr = ip_hdr(skb)->saddr;
|
|
@@ -1244,6 +1244,7 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
|
|
if (!pskb_may_pull(skb, sizeof(struct udphdr)))
|
|
if (!pskb_may_pull(skb, sizeof(struct udphdr)))
|
|
goto drop; /* No space for header. */
|
|
goto drop; /* No space for header. */
|
|
|
|
|
|
|
|
+ uh = udp_hdr(skb);
|
|
ulen = ntohs(uh->len);
|
|
ulen = ntohs(uh->len);
|
|
if (ulen > skb->len)
|
|
if (ulen > skb->len)
|
|
goto short_packet;
|
|
goto short_packet;
|