mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
ipv6: rpl: Remove pskb(_may)?_pull() in ipv6_rpl_srh_rcv().
As Eric Dumazet pointed out [0], ipv6_rthdr_rcv() pulls these data - Segment Routing Header : 8 - Hdr Ext Len : skb_transport_header(skb)[1] << 3 needed by ipv6_rpl_srh_rcv(). We can remove pskb_may_pull() and replace pskb_pull() with skb_pull() in ipv6_rpl_srh_rcv(). Link: https://lore.kernel.org/netdev/CANn89iLboLwLrHXeHJucAqBkEL_S0rJFog68t7wwwXO-aNf5Mg@mail.gmail.com/ [0] Signed-off-by: Kuniyuki Iwashima <kuniyu@amazon.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
9a94d764e9
commit
ac9d8a66e4
@ -23,9 +23,6 @@ static inline int rpl_init(void)
|
|||||||
static inline void rpl_exit(void) {}
|
static inline void rpl_exit(void) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
size_t ipv6_rpl_srh_size(unsigned char n, unsigned char cmpri,
|
|
||||||
unsigned char cmpre);
|
|
||||||
|
|
||||||
void ipv6_rpl_srh_decompress(struct ipv6_rpl_sr_hdr *outhdr,
|
void ipv6_rpl_srh_decompress(struct ipv6_rpl_sr_hdr *outhdr,
|
||||||
const struct ipv6_rpl_sr_hdr *inhdr,
|
const struct ipv6_rpl_sr_hdr *inhdr,
|
||||||
const struct in6_addr *daddr, unsigned char n);
|
const struct in6_addr *daddr, unsigned char n);
|
||||||
|
@ -517,11 +517,7 @@ looped_back:
|
|||||||
|
|
||||||
skb_postpull_rcsum(skb, skb_network_header(skb),
|
skb_postpull_rcsum(skb, skb_network_header(skb),
|
||||||
skb_network_header_len(skb));
|
skb_network_header_len(skb));
|
||||||
|
skb_pull(skb, offset);
|
||||||
if (!pskb_pull(skb, offset)) {
|
|
||||||
kfree_skb(skb);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
skb_postpull_rcsum(skb, skb_transport_header(skb),
|
skb_postpull_rcsum(skb, skb_transport_header(skb),
|
||||||
offset);
|
offset);
|
||||||
|
|
||||||
@ -543,11 +539,6 @@ looped_back:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pskb_may_pull(skb, sizeof(*hdr))) {
|
|
||||||
kfree_skb(skb);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
n = (hdr->hdrlen << 3) - hdr->pad - (16 - hdr->cmpre);
|
n = (hdr->hdrlen << 3) - hdr->pad - (16 - hdr->cmpre);
|
||||||
r = do_div(n, (16 - hdr->cmpri));
|
r = do_div(n, (16 - hdr->cmpri));
|
||||||
/* checks if calculation was without remainder and n fits into
|
/* checks if calculation was without remainder and n fits into
|
||||||
@ -567,12 +558,6 @@ looped_back:
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pskb_may_pull(skb, ipv6_rpl_srh_size(n, hdr->cmpri,
|
|
||||||
hdr->cmpre))) {
|
|
||||||
kfree_skb(skb);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
hdr->segments_left--;
|
hdr->segments_left--;
|
||||||
i = n - hdr->segments_left;
|
i = n - hdr->segments_left;
|
||||||
|
|
||||||
|
@ -29,13 +29,6 @@ static void *ipv6_rpl_segdata_pos(const struct ipv6_rpl_sr_hdr *hdr, int i)
|
|||||||
return (void *)&hdr->rpl_segdata[i * IPV6_PFXTAIL_LEN(hdr->cmpri)];
|
return (void *)&hdr->rpl_segdata[i * IPV6_PFXTAIL_LEN(hdr->cmpri)];
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t ipv6_rpl_srh_size(unsigned char n, unsigned char cmpri,
|
|
||||||
unsigned char cmpre)
|
|
||||||
{
|
|
||||||
return sizeof(struct ipv6_rpl_sr_hdr) + (n * IPV6_PFXTAIL_LEN(cmpri)) +
|
|
||||||
IPV6_PFXTAIL_LEN(cmpre);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ipv6_rpl_srh_decompress(struct ipv6_rpl_sr_hdr *outhdr,
|
void ipv6_rpl_srh_decompress(struct ipv6_rpl_sr_hdr *outhdr,
|
||||||
const struct ipv6_rpl_sr_hdr *inhdr,
|
const struct ipv6_rpl_sr_hdr *inhdr,
|
||||||
const struct in6_addr *daddr, unsigned char n)
|
const struct in6_addr *daddr, unsigned char n)
|
||||||
|
Loading…
Reference in New Issue
Block a user