From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=91.218.175.247 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793513779; b=STA2YGTI4KY+LmuLbsPKh9Gk5CGm1Fg1kOJEnIF0P+4lPFtefaOcsRdXfBu2e7K4Dare qGJuyJyE7m4w+ZkFAeIVU62SJsK+iG1Htg36bhXR+U9AGa27OA5hr1foTLmaIL3eIoblh EnSh2v1QzsLmxRVOa7KrkzzQTjhFl+kbSR1HmwaLtw52UBG8X9tEe4z5spuPXM7X8QK3Q /VUFPWhA49RCO7BmahHLuZoC7WbUdFW9VEwlsM0iJKkNzsqFWRwx5ehcMVY4Q7bQ096wG eIyeOa4AEOcyjkZlOvejbOwBdVjVyJoUKPKZSMf2/+cYSppEnE2U+Vlg1eEo1i3dkwA== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793513779; h=DMARC-Filter:X-Envelope-To:DKIM-Signature:X-Envelope-To:Received: X-Mizu-Trace-ID:X-Migadu-Flow:From:To:Cc:Subject:Date:Message-ID: X-Mailer:In-Reply-To:References:MIME-Version: Content-Transfer-Encoding; bh=hP/wufYrzFLIuJAB9Y1+6Fe9O2Um3BU+tPM/w5XHFXA=; b=phf4inXTMeJXyZVQGHYJ7NczL+3rzvJ1Uik5AYJR2VKQS4iIvOhGVuEq+EUnDWqwJq5j +m6SgTLhSB4YxgMFAbHz/qJZw3AfGZJypoibJXHznUVroc7rXWm30NRcflanRQEtXmZXK nmI6d32mjpNOw7c7AaROFRD8fUv0iUTwbmqATT4C5wKpKjrm3vXiQy1cWIntrn+fIwwGd tI+3U7VVzpNSiLuTtVusv9O+UfbnTB9reFVMUNJO7GCPGhWnT8nwKgvSTrI6shf3xAlsq dnncfNTw1bh7l5l+1w4HDZo3+xzZ7KL5irI4xqE6tvkSgwfLEW1ECTFAmUqh+47eEnw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass header.d=linux.dev header.i=@linux.dev header.a=rsa-sha256 header.s=key1 header.b=MFnAF+8G; arc=none smtp.remote-ip=91.218.175.247 Received: from mta0.migadu.com (out-247.mta0.migadu.com [91.218.175.247]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7FCF6606A32D for ; Sun, 1 Nov 2026 06:16:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 7FCF6606A32D Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=linux.dev header.i=@linux.dev header.a=rsa-sha256 header.s=key1 header.b=MFnAF+8G X-Envelope-To: linux-kernel@vger.kernel.org DKIM-Signature: a=rsa-sha256; bh=+jgyQbXsrKaLn9nkl/YpTRZhwiLrtYdg6s8W7kdR5tM=; c=simple/simple; d=linux.dev; h=from:to:subject:date:message-id:mime-version:content-type; s=key1; t=1793513775; v=1; x=1794118575; b=MFnAF+8GyLoxxXthUq9nkMxYhCujTC1xqC3wKS4b1fwYCoAoc3DZUE1EClXqOMOCPVbaz9OH TR7MVF3X9jpBnKYORazMRzqzQpRN60+TqMJT+qgv1fI4G3QBn3C/wL9qd/AVJUlb7wOoQbFAgnZ CHwlE2V8XyWhBjWj8HJ8ag3o= X-Envelope-To: linux-kernel@vger.kernel.org Received: by smtp.migadu.com with ESMTPS id 1f105a6221850481; Sun, 01 Nov 2026 06:16:15 +0000 X-Mizu-Trace-ID: 1f105a6221850481 X-Migadu-Flow: FLOW_OUT From: Jiayuan Chen To: netdev@vger.kernel.org Cc: Jiayuan Chen , stable@vger.kernel.org, Fernando Fernandez Mancera , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Jonathan Corbet , Shuah Khan , Randy Dunlap , David Ahern , Ido Schimmel , Joel Granados , Thomas Gleixner , Petr Pavlu , Kuniyuki Iwashima , Maoyi Xie , Jiri Wiesner , Oleg Nesterov , Gerd Rausch , Neal Cardwell , Chia-Yu Chang , Yung Chih Su , Wyatt Feng , Hannes Frederic Sowa , Flavio Leitner , "Paul E. McKenney" , Petr Mladek , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net v3 4/5] ipv4: restrict igmp_qrv to 255 Date: Sun, 1 Nov 2026 14:12:02 +0800 Message-ID: <20261101061331.286404-5-jiayuan.chen@linux.dev> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20261101061331.286404-1-jiayuan.chen@linux.dev> References: <20261101061331.286404-1-jiayuan.chen@linux.dev> X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit net.ipv4.igmp_qrv only has a lower bound, but ip_mc_reset() stores it into the u8 in_device::mr_qrv, and the IGMPv3 retransmit counters filled from it (crcount, sf_crcount) are u8 as well. Anything above 255 silently wraps. With 256, mr_qrv becomes 0, every "in_dev->mr_qrv ?: sysctl_igmp_qrv" falls back to 256, which truncates to 0 again in crcount, and igmpv3_send_cr() never puts the state change records for the group into a report. The older version querier present timeout (mr_qrv * mr_qi + mr_qri) also collapses to just mr_qri. Make the sysctl a u8 like mr_qrv and switch to proc_dou8vec_minmax(), which rejects anything above 255, and document it. Fixes: a9fe8e29945d ("ipv4: implement igmp_qrv sysctl to tune igmp robustness variable") Cc: stable@vger.kernel.org Reviewed-by: Fernando Fernandez Mancera Signed-off-by: Jiayuan Chen --- For AI review: drivers/net/amt.c writing sysctl_igmp_qrv into the 3-bit qrv wire fields is pre-existing and out of scope for this patch. v2: switched to u8 and proc_dou8vec_minmax(), as suggested by Kuniyuki Iwashima. --- Documentation/networking/ip-sysctl.rst | 2 ++ Documentation/networking/net_cachelines/netns_ipv4_sysctl.rst | 2 +- include/net/netns/ipv4.h | 2 +- net/ipv4/sysctl_net_ipv4.c | 4 ++-- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Documentation/networking/ip-sysctl.rst b/Documentation/networking/ip-sysctl.rst index 71f334f27004e..9e282fb046904 100644 --- a/Documentation/networking/ip-sysctl.rst +++ b/Documentation/networking/ip-sysctl.rst @@ -1906,6 +1906,8 @@ igmp_qrv - INTEGER Minimum: 1 (as specified by RFC6636 4.5) + Maximum: 255 + force_igmp_version - INTEGER - 0 - (default) No enforcement of a IGMP version, IGMPv1/v2 fallback allowed. Will back to IGMPv3 mode again if all IGMPv1/v2 Querier diff --git a/Documentation/networking/net_cachelines/netns_ipv4_sysctl.rst b/Documentation/networking/net_cachelines/netns_ipv4_sysctl.rst index 3dc03bff739e4..2833ce6cba1d4 100644 --- a/Documentation/networking/net_cachelines/netns_ipv4_sysctl.rst +++ b/Documentation/networking/net_cachelines/netns_ipv4_sysctl.rst @@ -143,9 +143,9 @@ int sysctl_udp_rmem_min u8 sysctl_fib_notify_on_flag_change u8 sysctl_udp_l3mdev_accept u8 sysctl_igmp_llm_reports +u8 sysctl_igmp_qrv int sysctl_igmp_max_memberships int sysctl_igmp_max_msf -int sysctl_igmp_qrv struct_ping_group_range ping_group_range atomic_t dev_addr_genid unsigned_int sysctl_udp_child_hash_entries diff --git a/include/net/netns/ipv4.h b/include/net/netns/ipv4.h index cb7f8bf15671c..3efbc7f4b4f7d 100644 --- a/include/net/netns/ipv4.h +++ b/include/net/netns/ipv4.h @@ -258,9 +258,9 @@ struct netns_ipv4 { #endif u8 sysctl_igmp_llm_reports; + u8 sysctl_igmp_qrv; int sysctl_igmp_max_memberships; int sysctl_igmp_max_msf; - int sysctl_igmp_qrv; struct ping_group_range ping_group_range; u16 ping_port_rover; diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c index e3760daa34706..09f7fc6771456 100644 --- a/net/ipv4/sysctl_net_ipv4.c +++ b/net/ipv4/sysctl_net_ipv4.c @@ -975,9 +975,9 @@ static const struct ctl_table ipv4_net_table[] = { { .procname = "igmp_qrv", .data = &init_net.ipv4.sysctl_igmp_qrv, - .maxlen = sizeof(int), + .maxlen = sizeof(u8), .mode = 0644, - .proc_handler = proc_dointvec_minmax, + .proc_handler = proc_dou8vec_minmax, .extra1 = SYSCTL_ONE }, #endif -- 2.43.0