ipvs: get sctphdr by sctphoff in sctp_csum_check
sctp_csum_check() is called by sctp_s/dnat_handler() where it calls skb_make_writable() to ensure sctphdr to be linearized. So there's no need to get sctphdr by calling skb_header_pointer() in sctp_csum_check(). Signed-off-by: Xin Long <lucien.xin@gmail.com> Reviewed-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Acked-by: Julian Anastasov <ja@ssi.bg> Acked-by: Simon Horman <horms@verge.net.au> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
Родитель
11d4dd0b20
Коммит
f52a40fb41
|
@ -186,7 +186,7 @@ static int
|
||||||
sctp_csum_check(int af, struct sk_buff *skb, struct ip_vs_protocol *pp)
|
sctp_csum_check(int af, struct sk_buff *skb, struct ip_vs_protocol *pp)
|
||||||
{
|
{
|
||||||
unsigned int sctphoff;
|
unsigned int sctphoff;
|
||||||
struct sctphdr *sh, _sctph;
|
struct sctphdr *sh;
|
||||||
__le32 cmp, val;
|
__le32 cmp, val;
|
||||||
|
|
||||||
#ifdef CONFIG_IP_VS_IPV6
|
#ifdef CONFIG_IP_VS_IPV6
|
||||||
|
@ -196,10 +196,7 @@ sctp_csum_check(int af, struct sk_buff *skb, struct ip_vs_protocol *pp)
|
||||||
#endif
|
#endif
|
||||||
sctphoff = ip_hdrlen(skb);
|
sctphoff = ip_hdrlen(skb);
|
||||||
|
|
||||||
sh = skb_header_pointer(skb, sctphoff, sizeof(_sctph), &_sctph);
|
sh = (struct sctphdr *)(skb->data + sctphoff);
|
||||||
if (sh == NULL)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
cmp = sh->checksum;
|
cmp = sh->checksum;
|
||||||
val = sctp_compute_cksum(skb, sctphoff);
|
val = sctp_compute_cksum(skb, sctphoff);
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче