Message ID | 20230415210506.2283603-1-aahringo@redhat.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] net: rpl: fix rpl header size calculation | expand |
On 4/15/23 3:05 PM, Alexander Aring wrote: > diff --git a/net/ipv6/rpl.c b/net/ipv6/rpl.c > index 488aec9e1a74..16e19fec18a4 100644 > --- a/net/ipv6/rpl.c > +++ b/net/ipv6/rpl.c > @@ -32,7 +32,7 @@ static void *ipv6_rpl_segdata_pos(const struct ipv6_rpl_sr_hdr *hdr, int i) > size_t ipv6_rpl_srh_size(unsigned char n, unsigned char cmpri, > unsigned char cmpre) > { > - return (n * IPV6_PFXTAIL_LEN(cmpri)) + IPV6_PFXTAIL_LEN(cmpre); > + return 8 + (n * IPV6_PFXTAIL_LEN(cmpri)) + IPV6_PFXTAIL_LEN(cmpre); no magic numbers; there should be a macro for that size.
Hi, On Sun, Apr 16, 2023 at 12:37 PM David Ahern <dsahern@kernel.org> wrote: > > On 4/15/23 3:05 PM, Alexander Aring wrote: > > diff --git a/net/ipv6/rpl.c b/net/ipv6/rpl.c > > index 488aec9e1a74..16e19fec18a4 100644 > > --- a/net/ipv6/rpl.c > > +++ b/net/ipv6/rpl.c > > @@ -32,7 +32,7 @@ static void *ipv6_rpl_segdata_pos(const struct ipv6_rpl_sr_hdr *hdr, int i) > > size_t ipv6_rpl_srh_size(unsigned char n, unsigned char cmpri, > > unsigned char cmpre) > > { > > - return (n * IPV6_PFXTAIL_LEN(cmpri)) + IPV6_PFXTAIL_LEN(cmpre); > > + return 8 + (n * IPV6_PFXTAIL_LEN(cmpri)) + IPV6_PFXTAIL_LEN(cmpre); > > > > no magic numbers; there should be a macro for that size. > ok. We can actually use sizeof(*hdr) here. Which is actually the header size without the "addresses" payload. Thanks. - Alex
diff --git a/net/ipv6/rpl.c b/net/ipv6/rpl.c index 488aec9e1a74..16e19fec18a4 100644 --- a/net/ipv6/rpl.c +++ b/net/ipv6/rpl.c @@ -32,7 +32,7 @@ static void *ipv6_rpl_segdata_pos(const struct ipv6_rpl_sr_hdr *hdr, int i) size_t ipv6_rpl_srh_size(unsigned char n, unsigned char cmpri, unsigned char cmpre) { - return (n * IPV6_PFXTAIL_LEN(cmpri)) + IPV6_PFXTAIL_LEN(cmpre); + return 8 + (n * IPV6_PFXTAIL_LEN(cmpri)) + IPV6_PFXTAIL_LEN(cmpre); } void ipv6_rpl_srh_decompress(struct ipv6_rpl_sr_hdr *outhdr,
This patch fixes a missing 8 byte for the header size calculation. The ipv6_rpl_srh_size() is used to check a skb_pull() on skb->data which points to skb_transport_header(). Currently we only check on the calculated addresses fields using CmprI and CmprE fields, see: https://www.rfc-editor.org/rfc/rfc6554#section-3 there is however a missing 8 byte inside the calculation which stands for the fields before the addresses field. Fixes: 8610c7c6e3bd ("net: ipv6: add support for rpl sr exthdr") Signed-off-by: Alexander Aring <aahringo@redhat.com> --- net/ipv6/rpl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)