mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-19 15:57:56 -05:00
ipv6: exthdrs: annotate data-race over multiple sysctl
Following four sysctls can change under us, add missing READ_ONCE(). - ipv6.sysctl.max_dst_opts_len - ipv6.sysctl.max_dst_opts_cnt - ipv6.sysctl.max_hbh_opts_len - ipv6.sysctl.max_hbh_opts_cnt Signed-off-by: Eric Dumazet <edumazet@google.com> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/20260115094141.3124990-8-edumazet@google.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
12eddc6857
commit
978b67d283
@@ -314,7 +314,7 @@ static int ipv6_destopt_rcv(struct sk_buff *skb)
|
||||
}
|
||||
|
||||
extlen = (skb_transport_header(skb)[1] + 1) << 3;
|
||||
if (extlen > net->ipv6.sysctl.max_dst_opts_len)
|
||||
if (extlen > READ_ONCE(net->ipv6.sysctl.max_dst_opts_len))
|
||||
goto fail_and_free;
|
||||
|
||||
opt->lastopt = opt->dst1 = skb_network_header_len(skb);
|
||||
@@ -322,7 +322,8 @@ static int ipv6_destopt_rcv(struct sk_buff *skb)
|
||||
dstbuf = opt->dst1;
|
||||
#endif
|
||||
|
||||
if (ip6_parse_tlv(false, skb, net->ipv6.sysctl.max_dst_opts_cnt)) {
|
||||
if (ip6_parse_tlv(false, skb,
|
||||
READ_ONCE(net->ipv6.sysctl.max_dst_opts_cnt))) {
|
||||
skb->transport_header += extlen;
|
||||
opt = IP6CB(skb);
|
||||
#if IS_ENABLED(CONFIG_IPV6_MIP6)
|
||||
@@ -1049,11 +1050,12 @@ int ipv6_parse_hopopts(struct sk_buff *skb)
|
||||
}
|
||||
|
||||
extlen = (skb_transport_header(skb)[1] + 1) << 3;
|
||||
if (extlen > net->ipv6.sysctl.max_hbh_opts_len)
|
||||
if (extlen > READ_ONCE(net->ipv6.sysctl.max_hbh_opts_len))
|
||||
goto fail_and_free;
|
||||
|
||||
opt->flags |= IP6SKB_HOPBYHOP;
|
||||
if (ip6_parse_tlv(true, skb, net->ipv6.sysctl.max_hbh_opts_cnt)) {
|
||||
if (ip6_parse_tlv(true, skb,
|
||||
READ_ONCE(net->ipv6.sysctl.max_hbh_opts_cnt))) {
|
||||
skb->transport_header += extlen;
|
||||
opt = IP6CB(skb);
|
||||
opt->nhoff = sizeof(struct ipv6hdr);
|
||||
|
||||
Reference in New Issue
Block a user