Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

netfilter: nf_nat: use local variable hdrlen

Use local variable hdrlen instead of ip_hdrlen(skb).

Signed-off-by: Changli Gao <xiaosuo@gmail.com>
Signed-off-by: Patrick McHardy <kaber@trash.net>

authored by

Changli Gao and committed by
Patrick McHardy
794dbc1d 5c0d2374

+7 -11
+7 -11
net/ipv4/netfilter/nf_nat_core.c
··· 435 435 if (!skb_make_writable(skb, hdrlen + sizeof(*inside))) 436 436 return 0; 437 437 438 - inside = (void *)skb->data + ip_hdrlen(skb); 438 + inside = (void *)skb->data + hdrlen; 439 439 440 440 /* We're actually going to mangle it beyond trivial checksum 441 441 adjustment, so make sure the current checksum is correct. */ ··· 465 465 /* rcu_read_lock()ed by nf_hook_slow */ 466 466 l4proto = __nf_ct_l4proto_find(PF_INET, inside->ip.protocol); 467 467 468 - if (!nf_ct_get_tuple(skb, 469 - ip_hdrlen(skb) + sizeof(struct icmphdr), 470 - (ip_hdrlen(skb) + 468 + if (!nf_ct_get_tuple(skb, hdrlen + sizeof(struct icmphdr), 469 + (hdrlen + 471 470 sizeof(struct icmphdr) + inside->ip.ihl * 4), 472 - (u_int16_t)AF_INET, 473 - inside->ip.protocol, 471 + (u_int16_t)AF_INET, inside->ip.protocol, 474 472 &inner, l3proto, l4proto)) 475 473 return 0; 476 474 ··· 477 479 pass all hooks (locally-generated ICMP). Consider incoming 478 480 packet: PREROUTING (DST manip), routing produces ICMP, goes 479 481 through POSTROUTING (which must correct the DST manip). */ 480 - if (!manip_pkt(inside->ip.protocol, skb, 481 - ip_hdrlen(skb) + sizeof(inside->icmp), 482 - &ct->tuplehash[!dir].tuple, 483 - !manip)) 482 + if (!manip_pkt(inside->ip.protocol, skb, hdrlen + sizeof(inside->icmp), 483 + &ct->tuplehash[!dir].tuple, !manip)) 484 484 return 0; 485 485 486 486 if (skb->ip_summed != CHECKSUM_PARTIAL) { 487 487 /* Reloading "inside" here since manip_pkt inner. */ 488 - inside = (void *)skb->data + ip_hdrlen(skb); 488 + inside = (void *)skb->data + hdrlen; 489 489 inside->icmp.checksum = 0; 490 490 inside->icmp.checksum = 491 491 csum_fold(skb_checksum(skb, hdrlen,