diff options
Diffstat (limited to 'net/ipv4/raw.c')
-rw-r--r-- | net/ipv4/raw.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index 007e2eb769d3..3ccda5ae8a27 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c | |||
@@ -292,7 +292,8 @@ static int raw_rcv_skb(struct sock * sk, struct sk_buff * skb) | |||
292 | { | 292 | { |
293 | /* Charge it to the socket. */ | 293 | /* Charge it to the socket. */ |
294 | 294 | ||
295 | if (ip_queue_rcv_skb(sk, skb) < 0) { | 295 | ipv4_pktinfo_prepare(skb); |
296 | if (sock_queue_rcv_skb(sk, skb) < 0) { | ||
296 | kfree_skb(skb); | 297 | kfree_skb(skb); |
297 | return NET_RX_DROP; | 298 | return NET_RX_DROP; |
298 | } | 299 | } |
@@ -327,6 +328,7 @@ static int raw_send_hdrinc(struct sock *sk, struct flowi4 *fl4, | |||
327 | unsigned int iphlen; | 328 | unsigned int iphlen; |
328 | int err; | 329 | int err; |
329 | struct rtable *rt = *rtp; | 330 | struct rtable *rt = *rtp; |
331 | int hlen, tlen; | ||
330 | 332 | ||
331 | if (length > rt->dst.dev->mtu) { | 333 | if (length > rt->dst.dev->mtu) { |
332 | ip_local_error(sk, EMSGSIZE, fl4->daddr, inet->inet_dport, | 334 | ip_local_error(sk, EMSGSIZE, fl4->daddr, inet->inet_dport, |
@@ -336,12 +338,14 @@ static int raw_send_hdrinc(struct sock *sk, struct flowi4 *fl4, | |||
336 | if (flags&MSG_PROBE) | 338 | if (flags&MSG_PROBE) |
337 | goto out; | 339 | goto out; |
338 | 340 | ||
341 | hlen = LL_RESERVED_SPACE(rt->dst.dev); | ||
342 | tlen = rt->dst.dev->needed_tailroom; | ||
339 | skb = sock_alloc_send_skb(sk, | 343 | skb = sock_alloc_send_skb(sk, |
340 | length + LL_ALLOCATED_SPACE(rt->dst.dev) + 15, | 344 | length + hlen + tlen + 15, |
341 | flags & MSG_DONTWAIT, &err); | 345 | flags & MSG_DONTWAIT, &err); |
342 | if (skb == NULL) | 346 | if (skb == NULL) |
343 | goto error; | 347 | goto error; |
344 | skb_reserve(skb, LL_RESERVED_SPACE(rt->dst.dev)); | 348 | skb_reserve(skb, hlen); |
345 | 349 | ||
346 | skb->priority = sk->sk_priority; | 350 | skb->priority = sk->sk_priority; |
347 | skb->mark = sk->sk_mark; | 351 | skb->mark = sk->sk_mark; |