diff options
Diffstat (limited to 'net/ipv6/reassembly.c')
-rw-r--r-- | net/ipv6/reassembly.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/net/ipv6/reassembly.c b/net/ipv6/reassembly.c index f936d045a39d..7b247e3a16fe 100644 --- a/net/ipv6/reassembly.c +++ b/net/ipv6/reassembly.c | |||
@@ -202,7 +202,7 @@ static void ip6_frag_expire(unsigned long data) | |||
202 | 202 | ||
203 | spin_lock(&fq->q.lock); | 203 | spin_lock(&fq->q.lock); |
204 | 204 | ||
205 | if (fq->q.last_in & COMPLETE) | 205 | if (fq->q.last_in & INET_FRAG_COMPLETE) |
206 | goto out; | 206 | goto out; |
207 | 207 | ||
208 | fq_kill(fq); | 208 | fq_kill(fq); |
@@ -217,7 +217,7 @@ static void ip6_frag_expire(unsigned long data) | |||
217 | rcu_read_unlock(); | 217 | rcu_read_unlock(); |
218 | 218 | ||
219 | /* Don't send error if the first segment did not arrive. */ | 219 | /* Don't send error if the first segment did not arrive. */ |
220 | if (!(fq->q.last_in&FIRST_IN) || !fq->q.fragments) | 220 | if (!(fq->q.last_in & INET_FRAG_FIRST_IN) || !fq->q.fragments) |
221 | goto out; | 221 | goto out; |
222 | 222 | ||
223 | /* | 223 | /* |
@@ -265,7 +265,7 @@ static int ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb, | |||
265 | struct net_device *dev; | 265 | struct net_device *dev; |
266 | int offset, end; | 266 | int offset, end; |
267 | 267 | ||
268 | if (fq->q.last_in & COMPLETE) | 268 | if (fq->q.last_in & INET_FRAG_COMPLETE) |
269 | goto err; | 269 | goto err; |
270 | 270 | ||
271 | offset = ntohs(fhdr->frag_off) & ~0x7; | 271 | offset = ntohs(fhdr->frag_off) & ~0x7; |
@@ -294,9 +294,9 @@ static int ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb, | |||
294 | * or have different end, the segment is corrupted. | 294 | * or have different end, the segment is corrupted. |
295 | */ | 295 | */ |
296 | if (end < fq->q.len || | 296 | if (end < fq->q.len || |
297 | ((fq->q.last_in & LAST_IN) && end != fq->q.len)) | 297 | ((fq->q.last_in & INET_FRAG_LAST_IN) && end != fq->q.len)) |
298 | goto err; | 298 | goto err; |
299 | fq->q.last_in |= LAST_IN; | 299 | fq->q.last_in |= INET_FRAG_LAST_IN; |
300 | fq->q.len = end; | 300 | fq->q.len = end; |
301 | } else { | 301 | } else { |
302 | /* Check if the fragment is rounded to 8 bytes. | 302 | /* Check if the fragment is rounded to 8 bytes. |
@@ -314,7 +314,7 @@ static int ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb, | |||
314 | } | 314 | } |
315 | if (end > fq->q.len) { | 315 | if (end > fq->q.len) { |
316 | /* Some bits beyond end -> corruption. */ | 316 | /* Some bits beyond end -> corruption. */ |
317 | if (fq->q.last_in & LAST_IN) | 317 | if (fq->q.last_in & INET_FRAG_LAST_IN) |
318 | goto err; | 318 | goto err; |
319 | fq->q.len = end; | 319 | fq->q.len = end; |
320 | } | 320 | } |
@@ -417,10 +417,11 @@ static int ip6_frag_queue(struct frag_queue *fq, struct sk_buff *skb, | |||
417 | */ | 417 | */ |
418 | if (offset == 0) { | 418 | if (offset == 0) { |
419 | fq->nhoffset = nhoff; | 419 | fq->nhoffset = nhoff; |
420 | fq->q.last_in |= FIRST_IN; | 420 | fq->q.last_in |= INET_FRAG_FIRST_IN; |
421 | } | 421 | } |
422 | 422 | ||
423 | if (fq->q.last_in == (FIRST_IN | LAST_IN) && fq->q.meat == fq->q.len) | 423 | if (fq->q.last_in == (INET_FRAG_FIRST_IN | INET_FRAG_LAST_IN) && |
424 | fq->q.meat == fq->q.len) | ||
424 | return ip6_frag_reasm(fq, prev, dev); | 425 | return ip6_frag_reasm(fq, prev, dev); |
425 | 426 | ||
426 | write_lock(&ip6_frags.lock); | 427 | write_lock(&ip6_frags.lock); |
@@ -600,7 +601,7 @@ static int ipv6_frag_rcv(struct sk_buff *skb) | |||
600 | return 1; | 601 | return 1; |
601 | } | 602 | } |
602 | 603 | ||
603 | net = skb->dev->nd_net; | 604 | net = dev_net(skb->dev); |
604 | if (atomic_read(&net->ipv6.frags.mem) > net->ipv6.frags.high_thresh) | 605 | if (atomic_read(&net->ipv6.frags.mem) > net->ipv6.frags.high_thresh) |
605 | ip6_evictor(net, ip6_dst_idev(skb->dst)); | 606 | ip6_evictor(net, ip6_dst_idev(skb->dst)); |
606 | 607 | ||