Message ID | cd1c829cfd9ee916e57c51f6879947f0f88c1eb1.1551094063.git.lucien.xin@gmail.com |
---|---|
State | Accepted |
Delegated to: | Pablo Neira |
Headers | show |
Series | [net] ipvs: get sctphdr by sctphoff in sctp_csum_check | expand |
On Mon, Feb 25, 2019 at 07:27:43PM +0800, Xin Long wrote: > 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> > --- > net/netfilter/ipvs/ip_vs_proto_sctp.c | 7 ++----- > 1 file changed, 2 insertions(+), 5 deletions(-) > > diff --git a/net/netfilter/ipvs/ip_vs_proto_sctp.c b/net/netfilter/ipvs/ip_vs_proto_sctp.c > index b0cd7d0..0ecf241 100644 > --- a/net/netfilter/ipvs/ip_vs_proto_sctp.c > +++ b/net/netfilter/ipvs/ip_vs_proto_sctp.c > @@ -183,7 +183,7 @@ static int > sctp_csum_check(int af, struct sk_buff *skb, struct ip_vs_protocol *pp) > { > unsigned int sctphoff; > - struct sctphdr *sh, _sctph; > + struct sctphdr *sh; > __le32 cmp, val; > > #ifdef CONFIG_IP_VS_IPV6 > @@ -193,10 +193,7 @@ sctp_csum_check(int af, struct sk_buff *skb, struct ip_vs_protocol *pp) > #endif > sctphoff = ip_hdrlen(skb); > > - sh = skb_header_pointer(skb, sctphoff, sizeof(_sctph), &_sctph); > - if (sh == NULL) > - return 0; > - > + sh = (struct sctphdr *)(skb->data + sctphoff); > cmp = sh->checksum; > val = sctp_compute_cksum(skb, sctphoff); > > -- > 2.1.0 >
Hello, On Mon, 25 Feb 2019, Xin Long wrote: > 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> Looks good to me, thanks! Acked-by: Julian Anastasov <ja@ssi.bg> I guess, it is for the nf-next/net-next tree because it just eliminates a duplicate check. > --- > net/netfilter/ipvs/ip_vs_proto_sctp.c | 7 ++----- > 1 file changed, 2 insertions(+), 5 deletions(-) > > diff --git a/net/netfilter/ipvs/ip_vs_proto_sctp.c b/net/netfilter/ipvs/ip_vs_proto_sctp.c > index b0cd7d0..0ecf241 100644 > --- a/net/netfilter/ipvs/ip_vs_proto_sctp.c > +++ b/net/netfilter/ipvs/ip_vs_proto_sctp.c > @@ -183,7 +183,7 @@ static int > sctp_csum_check(int af, struct sk_buff *skb, struct ip_vs_protocol *pp) > { > unsigned int sctphoff; > - struct sctphdr *sh, _sctph; > + struct sctphdr *sh; > __le32 cmp, val; > > #ifdef CONFIG_IP_VS_IPV6 > @@ -193,10 +193,7 @@ sctp_csum_check(int af, struct sk_buff *skb, struct ip_vs_protocol *pp) > #endif > sctphoff = ip_hdrlen(skb); > > - sh = skb_header_pointer(skb, sctphoff, sizeof(_sctph), &_sctph); > - if (sh == NULL) > - return 0; > - > + sh = (struct sctphdr *)(skb->data + sctphoff); > cmp = sh->checksum; > val = sctp_compute_cksum(skb, sctphoff); > > -- > 2.1.0 Regards -- Julian Anastasov <ja@ssi.bg>
On Mon, Feb 25, 2019 at 07:27:43PM +0800, Xin Long wrote: > 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> Acked-by: Simon Horman <horms@verge.net.au> Pablo, please consider applying this to nf-next. > --- > net/netfilter/ipvs/ip_vs_proto_sctp.c | 7 ++----- > 1 file changed, 2 insertions(+), 5 deletions(-) > > diff --git a/net/netfilter/ipvs/ip_vs_proto_sctp.c b/net/netfilter/ipvs/ip_vs_proto_sctp.c > index b0cd7d0..0ecf241 100644 > --- a/net/netfilter/ipvs/ip_vs_proto_sctp.c > +++ b/net/netfilter/ipvs/ip_vs_proto_sctp.c > @@ -183,7 +183,7 @@ static int > sctp_csum_check(int af, struct sk_buff *skb, struct ip_vs_protocol *pp) > { > unsigned int sctphoff; > - struct sctphdr *sh, _sctph; > + struct sctphdr *sh; > __le32 cmp, val; > > #ifdef CONFIG_IP_VS_IPV6 > @@ -193,10 +193,7 @@ sctp_csum_check(int af, struct sk_buff *skb, struct ip_vs_protocol *pp) > #endif > sctphoff = ip_hdrlen(skb); > > - sh = skb_header_pointer(skb, sctphoff, sizeof(_sctph), &_sctph); > - if (sh == NULL) > - return 0; > - > + sh = (struct sctphdr *)(skb->data + sctphoff); > cmp = sh->checksum; > val = sctp_compute_cksum(skb, sctphoff); > > -- > 2.1.0 >
On Mon, Feb 25, 2019 at 07:27:43PM +0800, Xin Long wrote: > 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(). Applied, thanks.
diff --git a/net/netfilter/ipvs/ip_vs_proto_sctp.c b/net/netfilter/ipvs/ip_vs_proto_sctp.c index b0cd7d0..0ecf241 100644 --- a/net/netfilter/ipvs/ip_vs_proto_sctp.c +++ b/net/netfilter/ipvs/ip_vs_proto_sctp.c @@ -183,7 +183,7 @@ static int sctp_csum_check(int af, struct sk_buff *skb, struct ip_vs_protocol *pp) { unsigned int sctphoff; - struct sctphdr *sh, _sctph; + struct sctphdr *sh; __le32 cmp, val; #ifdef CONFIG_IP_VS_IPV6 @@ -193,10 +193,7 @@ sctp_csum_check(int af, struct sk_buff *skb, struct ip_vs_protocol *pp) #endif sctphoff = ip_hdrlen(skb); - sh = skb_header_pointer(skb, sctphoff, sizeof(_sctph), &_sctph); - if (sh == NULL) - return 0; - + sh = (struct sctphdr *)(skb->data + sctphoff); cmp = sh->checksum; val = sctp_compute_cksum(skb, sctphoff);
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> --- net/netfilter/ipvs/ip_vs_proto_sctp.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-)