From nobody Sun May 24 18:41:54 2026 Received: from mail-pj1-f46.google.com (mail-pj1-f46.google.com [209.85.216.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E8405233941 for ; Sun, 24 May 2026 02:25:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779589503; cv=none; b=JKjrsCF0P+fj6RTsB1Rf1HH9bUorVJvr9tB8M7kWF6JY4sbBtL9XAK8MkwTCXVYNcmlOK0lXS9KZ+sasBDk7235vWaA4xFAkG1sflYDP1HNEZ1BYPn/evXFUdjdIQyP77Vv3v6Am8m3lh5mvnIqxw8gZkuk3/5IeXgVxh9oJK0M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779589503; c=relaxed/simple; bh=oNTzb7NkiEkjWclnnfQ+ldPnLfWe/Z2tuddaLXzWkfI=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=e9OEEg/2jqcdi/dgh+/sc06omrlSdGz0V3kAjNOKsD//88PDTIJqeBtizobpUcan27XlgC3Ds2XFsQA4mEp6faMnuM9/HjISxhSI9xEDD0z9x02VsZkaI/vvyRRsVLi96J5A1WnVwQyhUpbHYP45aDf+HnQGHXsHiUViHhV//jE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=K8t+wmQj; arc=none smtp.client-ip=209.85.216.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="K8t+wmQj" Received: by mail-pj1-f46.google.com with SMTP id 98e67ed59e1d1-3664df32e91so9866395a91.3 for ; Sat, 23 May 2026 19:25:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779589501; x=1780194301; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=9aBpdYtn6siEZeQVdZJ+u5zexn0oUPIQQRdLGlWKXK8=; b=K8t+wmQjzfKy/xC5ZP5d8StbPZadyRk5h1C/0n50RCsJpBiafwZvMGT9ce96tDMLtJ FMqgOd8ndDeSKlU906t5i2qMo2CO8wuMIzliSuj3n0MjXM6/7x03ax6HutYaseLtMORv 8t3XakaiwrlH4PFSxIZ2GEm+wvrQaAyOglFvkubUPKS+OJN/FzMoxRMNCnLgb4xyZ6UQ wE7Rhhx6MyoA5PkB72XnipsnnX6bVgiryXyvg04WkOXu33hZQfN7UAdCHb3W/I/KPDct QqWZ9ll4gfWHBG4J0Jx9Qss8z6bxkKm/C1nukxZbfsn7zvUuKTJfobgAi7nnwuCoBQ4V wURw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779589501; x=1780194301; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=9aBpdYtn6siEZeQVdZJ+u5zexn0oUPIQQRdLGlWKXK8=; b=KW3dtDWguDs/QzcBN7xMYCbyjarjvbQNOZF8l1xBW2bAq83uu8IW25W993N6yEOa9y Evg96/tCNBGVOeIOSCYNMQ2YGvUFcIyglOZvf6KB41tI2//FwrJLP2XCswUZPO7aoXw5 uJPO2UJ1tvCuQID//biwXYRZ14TmQ+Af0Qc1bfKp6OrGeH3Bo5Ku/hKzdkDiRU4xFl0D 5+Ox1B5onAIfqFofjm082WkpweIAJZEhrueauU5b6jC63ailXg4VIzcSlt5lidYQCiBe XWOC0RtBZ8i6fhd9mx3TvoBFD08syD8xNy86FAd0ZzghHyae2EyrcyGr3WxL8pkWCLW8 udKw== X-Forwarded-Encrypted: i=1; AFNElJ9ovKeniAZrBrBk5nS7N747FaFAbwLaag7sd1sfv51qZgb/HBFZhSpP7Gn+/UFsc5p7WP4zVVnVqH5xLF8=@vger.kernel.org X-Gm-Message-State: AOJu0YzN2NsHQNT/lv1WHZMvJNylDljbDrAPDrs1HaMiWrlYmNA3BDpe p8GGFdE4EkKxOwnzCn2NR4QBVvxcDMFAYFU8/GwA5xexRp3EeRvrOmE6 X-Gm-Gg: Acq92OFxE1qNTzXK+LmanONTzDp4sU2uvyjLmymKtA93BRyMbtL7yjb/H4SlcPoE155 eWkTxh7VCc12dFq2/oENkBQqqdxxokXggi1HQB/iyA9J1wqIQaJYGzpVnXboDwqKdjW0aoPMlIp 2r5o1itNdoRIcaZ9q3mcckb7yHIKN/P6gwumqH73d1zi6AvaAxrNE++0T+VC0r6vmiMzbWnxcTz MoywTTLbQdF0DxBYb4wxHEAVJgMMQ6T1nzzrjlL1slebCOuedxlFrfo/sAHBLhEVS+4+h8Fyc90 7fTRbC8nNQ5xJPTCn8rLePyEj/FEcxLB8SCfJY/Mwe4YN2PX1qtOTcwZHg2BM3cxiYHceWQN2Vx 65uruyqtdQkr1l9lr6I/rAI2B2jlDhV9nadoptBbiUkNqmbm5gvA/RkqTRg95/2HloEyIJ/a4iN OwocWhA18UMYyp2OcjMbHc/DjggKD1fxCWVggflQOkTCwiJJW0SHWSBA== X-Received: by 2002:a17:90b:38cc:b0:369:de03:29c8 with SMTP id 98e67ed59e1d1-36a6764cb9cmr9252232a91.23.1779589501010; Sat, 23 May 2026 19:25:01 -0700 (PDT) Received: from m-upc-A520M-HDV.flets-east.jp ([2400:2410:3f60:500:ab70:7969:6f78:2a4f]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-36a72c4ca35sm5804400a91.9.2026.05.23.19.24.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 May 2026 19:25:00 -0700 (PDT) From: Yuyang Huang To: Yuyang Huang Cc: Jiayuan Chen , "David S. Miller" , David Ahern , Eric Dumazet , Ido Schimmel , Jakub Kicinski , Paolo Abeni , Simon Horman , linux-kernel@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next] ipv6: mcast: annotate data-races around mca_users Date: Sun, 24 May 2026 11:24:56 +0900 Message-ID: <20260524022456.20689-1-sigefriedhyy@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" /proc/net/igmp6 walks IPv6 multicast memberships under RCU and prints mca_users without holding idev->mc_lock, while multicast join and leave paths update the field while holding idev->mc_lock. Annotate this intentional lockless snapshot with READ_ONCE() and the matching writers with WRITE_ONCE(). Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Yuyang Huang --- net/ipv6/mcast.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index 6ddc18ac59b9..1297047fedb2 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c @@ -876,7 +876,7 @@ static struct ifmcaddr6 *mca_alloc(struct inet6_dev *id= ev, =20 mc->mca_addr =3D *addr; mc->idev =3D idev; /* reference taken by caller */ - mc->mca_users =3D 1; + WRITE_ONCE(mc->mca_users, 1); /* mca_stamp should be updated upon changes */ mc->mca_cstamp =3D mc->mca_tstamp =3D jiffies; refcount_set(&mc->mca_refcnt, 1); @@ -950,7 +950,7 @@ static int __ipv6_dev_mc_inc(struct net_device *dev, =20 for_each_mc_mclock(idev, mc) { if (ipv6_addr_equal(&mc->mca_addr, addr)) { - mc->mca_users++; + WRITE_ONCE(mc->mca_users, mc->mca_users + 1); ip6_mc_add_src(idev, &mc->mca_addr, mode, 0, NULL, 0); mutex_unlock(&idev->mc_lock); in6_dev_put(idev); @@ -995,7 +995,10 @@ int __ipv6_dev_mc_dec(struct inet6_dev *idev, const st= ruct in6_addr *addr) (ma =3D mc_dereference(*map, idev)); map =3D &ma->next) { if (ipv6_addr_equal(&ma->mca_addr, addr)) { - if (--ma->mca_users =3D=3D 0) { + int new_users =3D ma->mca_users - 1; + + WRITE_ONCE(ma->mca_users, new_users); + if (new_users =3D=3D 0) { *map =3D ma->next; =20 igmp6_group_dropped(ma); @@ -2974,7 +2977,7 @@ static int igmp6_mc_seq_show(struct seq_file *seq, vo= id *v) "%-4d %-15s %pi6 %5d %08X %ld\n", state->dev->ifindex, state->dev->name, &im->mca_addr, - im->mca_users, im->mca_flags, + READ_ONCE(im->mca_users), im->mca_flags, (im->mca_flags & MAF_TIMER_RUNNING) ? jiffies_to_clock_t(im->mca_work.timer.expires - jiffies) : 0); return 0; --=20 2.43.0