Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 362584
b: refs/heads/master
c: 97599dc
h: refs/heads/master
v: v3
  • Loading branch information
Eric Dumazet authored and David S. Miller committed Apr 17, 2013
1 parent ece0ba9 commit b680c72
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 8d7ed0f051caf192994c02fbefb859eac03d1646
refs/heads/master: 97599dc792b45b1669c3cdb9a4b365aad0232f65
14 changes: 10 additions & 4 deletions trunk/net/ipv4/ip_fragment.c
Original file line number Diff line number Diff line change
Expand Up @@ -248,8 +248,7 @@ static void ip_expire(unsigned long arg)
if (!head->dev)
goto out_rcu_unlock;

/* skb dst is stale, drop it, and perform route lookup again */
skb_dst_drop(head);
/* skb has no dst, perform route lookup again */
iph = ip_hdr(head);
err = ip_route_input_noref(head, iph->daddr, iph->saddr,
iph->tos, head->dev);
Expand Down Expand Up @@ -523,9 +522,16 @@ static int ip_frag_queue(struct ipq *qp, struct sk_buff *skb)
qp->q.max_size = skb->len + ihl;

if (qp->q.last_in == (INET_FRAG_FIRST_IN | INET_FRAG_LAST_IN) &&
qp->q.meat == qp->q.len)
return ip_frag_reasm(qp, prev, dev);
qp->q.meat == qp->q.len) {
unsigned long orefdst = skb->_skb_refdst;

skb->_skb_refdst = 0UL;
err = ip_frag_reasm(qp, prev, dev);
skb->_skb_refdst = orefdst;
return err;
}

skb_dst_drop(skb);
inet_frag_lru_move(&qp->q);
return -EINPROGRESS;

Expand Down
12 changes: 10 additions & 2 deletions trunk/net/ipv6/reassembly.c
Original file line number Diff line number Diff line change
Expand Up @@ -330,9 +330,17 @@ static int ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb,
}

if (fq->q.last_in == (INET_FRAG_FIRST_IN | INET_FRAG_LAST_IN) &&
fq->q.meat == fq->q.len)
return ip6_frag_reasm(fq, prev, dev);
fq->q.meat == fq->q.len) {
int res;
unsigned long orefdst = skb->_skb_refdst;

skb->_skb_refdst = 0UL;
res = ip6_frag_reasm(fq, prev, dev);
skb->_skb_refdst = orefdst;
return res;
}

skb_dst_drop(skb);
inet_frag_lru_move(&fq->q);
return -1;

Expand Down

0 comments on commit b680c72

Please sign in to comment.