]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ipv6: annotate data-races around devconf->proxy_ndp
authorEric Dumazet <edumazet@google.com>
Wed, 28 Feb 2024 13:54:34 +0000 (13:54 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 1 Mar 2024 08:42:32 +0000 (08:42 +0000)
devconf->proxy_ndp can be read and written locklessly,
add appropriate annotations.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/addrconf.c
net/ipv6/ip6_output.c
net/ipv6/ndisc.c

index 82b8d90afb6aa44dc7d1c8ba278403ca7de03f31..409aa5ddb8569b375c4d436969df2ab0dc78d348 100644 (file)
@@ -561,7 +561,8 @@ static int inet6_netconf_fill_devconf(struct sk_buff *skb, int ifindex,
                goto nla_put_failure;
 #endif
        if ((all || type == NETCONFA_PROXY_NEIGH) &&
-           nla_put_s32(skb, NETCONFA_PROXY_NEIGH, devconf->proxy_ndp) < 0)
+           nla_put_s32(skb, NETCONFA_PROXY_NEIGH,
+                       READ_ONCE(devconf->proxy_ndp)) < 0)
                goto nla_put_failure;
 
        if ((all || type == NETCONFA_IGNORE_ROUTES_WITH_LINKDOWN) &&
index 444be8c84cc579bf32b2950e0261ffe7c1d265a8..f08af3f4e54f5dcb0b8b5fb8f60463e41bd1f578 100644 (file)
@@ -552,7 +552,7 @@ int ip6_forward(struct sk_buff *skb)
        }
 
        /* XXX: idev->cnf.proxy_ndp? */
-       if (net->ipv6.devconf_all->proxy_ndp &&
+       if (READ_ONCE(net->ipv6.devconf_all->proxy_ndp) &&
            pneigh_lookup(&nd_tbl, net, &hdr->daddr, skb->dev, 0)) {
                int proxied = ip6_forward_proxy_check(skb);
                if (proxied > 0) {
index f6430db249401b12debc0b174027af966fa71ccb..4114918f12c88f2b74e53d6d726018994feaf213 100644 (file)
@@ -904,7 +904,8 @@ have_ifp:
 
                if (ipv6_chk_acast_addr(net, dev, &msg->target) ||
                    (READ_ONCE(idev->cnf.forwarding) &&
-                    (net->ipv6.devconf_all->proxy_ndp || idev->cnf.proxy_ndp) &&
+                    (READ_ONCE(net->ipv6.devconf_all->proxy_ndp) ||
+                     READ_ONCE(idev->cnf.proxy_ndp)) &&
                     (is_router = pndisc_is_router(&msg->target, dev)) >= 0)) {
                        if (!(NEIGH_CB(skb)->flags & LOCALLY_ENQUEUED) &&
                            skb->pkt_type != PACKET_HOST &&
@@ -1101,7 +1102,7 @@ static enum skb_drop_reason ndisc_recv_na(struct sk_buff *skb)
                 */
                if (lladdr && !memcmp(lladdr, dev->dev_addr, dev->addr_len) &&
                    READ_ONCE(net->ipv6.devconf_all->forwarding) &&
-                   net->ipv6.devconf_all->proxy_ndp &&
+                   READ_ONCE(net->ipv6.devconf_all->proxy_ndp) &&
                    pneigh_lookup(&nd_tbl, net, &msg->target, dev, 0)) {
                        /* XXX: idev->cnf.proxy_ndp */
                        goto out;