diff options
Diffstat (limited to 'net/ipv4/ipvs/ip_vs_proto_tcp.c')
-rw-r--r-- | net/ipv4/ipvs/ip_vs_proto_tcp.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/net/ipv4/ipvs/ip_vs_proto_tcp.c b/net/ipv4/ipvs/ip_vs_proto_tcp.c index 16a9ebee2fe..e65382da713 100644 --- a/net/ipv4/ipvs/ip_vs_proto_tcp.c +++ b/net/ipv4/ipvs/ip_vs_proto_tcp.c | |||
@@ -76,8 +76,7 @@ tcp_conn_schedule(struct sk_buff *skb, | |||
76 | struct ip_vs_service *svc; | 76 | struct ip_vs_service *svc; |
77 | struct tcphdr _tcph, *th; | 77 | struct tcphdr _tcph, *th; |
78 | 78 | ||
79 | th = skb_header_pointer(skb, skb->nh.iph->ihl*4, | 79 | th = skb_header_pointer(skb, ip_hdrlen(skb), sizeof(_tcph), &_tcph); |
80 | sizeof(_tcph), &_tcph); | ||
81 | if (th == NULL) { | 80 | if (th == NULL) { |
82 | *verdict = NF_DROP; | 81 | *verdict = NF_DROP; |
83 | return 0; | 82 | return 0; |
@@ -127,7 +126,7 @@ tcp_snat_handler(struct sk_buff **pskb, | |||
127 | struct ip_vs_protocol *pp, struct ip_vs_conn *cp) | 126 | struct ip_vs_protocol *pp, struct ip_vs_conn *cp) |
128 | { | 127 | { |
129 | struct tcphdr *tcph; | 128 | struct tcphdr *tcph; |
130 | unsigned int tcphoff = (*pskb)->nh.iph->ihl * 4; | 129 | const unsigned int tcphoff = ip_hdrlen(*pskb); |
131 | 130 | ||
132 | /* csum_check requires unshared skb */ | 131 | /* csum_check requires unshared skb */ |
133 | if (!ip_vs_make_skb_writable(pskb, tcphoff+sizeof(*tcph))) | 132 | if (!ip_vs_make_skb_writable(pskb, tcphoff+sizeof(*tcph))) |
@@ -175,7 +174,7 @@ tcp_dnat_handler(struct sk_buff **pskb, | |||
175 | struct ip_vs_protocol *pp, struct ip_vs_conn *cp) | 174 | struct ip_vs_protocol *pp, struct ip_vs_conn *cp) |
176 | { | 175 | { |
177 | struct tcphdr *tcph; | 176 | struct tcphdr *tcph; |
178 | unsigned int tcphoff = (*pskb)->nh.iph->ihl * 4; | 177 | const unsigned int tcphoff = ip_hdrlen(*pskb); |
179 | 178 | ||
180 | /* csum_check requires unshared skb */ | 179 | /* csum_check requires unshared skb */ |
181 | if (!ip_vs_make_skb_writable(pskb, tcphoff+sizeof(*tcph))) | 180 | if (!ip_vs_make_skb_writable(pskb, tcphoff+sizeof(*tcph))) |
@@ -224,7 +223,7 @@ tcp_dnat_handler(struct sk_buff **pskb, | |||
224 | static int | 223 | static int |
225 | tcp_csum_check(struct sk_buff *skb, struct ip_vs_protocol *pp) | 224 | tcp_csum_check(struct sk_buff *skb, struct ip_vs_protocol *pp) |
226 | { | 225 | { |
227 | unsigned int tcphoff = skb->nh.iph->ihl*4; | 226 | const unsigned int tcphoff = ip_hdrlen(skb); |
228 | 227 | ||
229 | switch (skb->ip_summed) { | 228 | switch (skb->ip_summed) { |
230 | case CHECKSUM_NONE: | 229 | case CHECKSUM_NONE: |
@@ -467,8 +466,7 @@ tcp_state_transition(struct ip_vs_conn *cp, int direction, | |||
467 | { | 466 | { |
468 | struct tcphdr _tcph, *th; | 467 | struct tcphdr _tcph, *th; |
469 | 468 | ||
470 | th = skb_header_pointer(skb, skb->nh.iph->ihl*4, | 469 | th = skb_header_pointer(skb, ip_hdrlen(skb), sizeof(_tcph), &_tcph); |
471 | sizeof(_tcph), &_tcph); | ||
472 | if (th == NULL) | 470 | if (th == NULL) |
473 | return 0; | 471 | return 0; |
474 | 472 | ||