From nobody Tue Apr 7 07:14:54 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id ED362C0502C for ; Tue, 30 Aug 2022 05:00:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229892AbiH3FAM (ORCPT ); Tue, 30 Aug 2022 01:00:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45920 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229556AbiH3FAI (ORCPT ); Tue, 30 Aug 2022 01:00:08 -0400 Received: from mail-qt1-x833.google.com (mail-qt1-x833.google.com [IPv6:2607:f8b0:4864:20::833]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E201910FE6 for ; Mon, 29 Aug 2022 22:00:01 -0700 (PDT) Received: by mail-qt1-x833.google.com with SMTP id r6so7742802qtx.6 for ; Mon, 29 Aug 2022 22:00:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc; bh=I53anoOXNt7rTHSRPo4j42KHm4z7y87xF4J5ljpGIqM=; b=Htu05WzvVRDm+Xumm+rHwVxvbnwoRA05W1J1mp3J6WLjalNXIoCQyffl+/icOznwrz WadY5GW0Pqy+ESMgOiztmpjcc4+UfK97vPA1lu52B2w1zZZc+qg/DOvrXh4SN53Sf666 LS85RWAiXu6i0WFoePcb8C9Fy/S76+YdtvXUA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc; bh=I53anoOXNt7rTHSRPo4j42KHm4z7y87xF4J5ljpGIqM=; b=ylqaodbgiOWOG//YjAg9/KxWHg/KScME9Q35oj731HK0C6eSOiXsmljgO0wnnIE85r AgF41Hnr8kRhYFygXmZWT+m0Bzuf52fWbJh626/clmpC7y5QRyjWg49HeWpi/DRLdbWe 2/YQhU9A3XhjXF+L6zA/ZGSIIDD/ICXlSmvl4ZslkOzZxJTbWAaVFSF7p3nhz9k/QUn9 ybwptFjEhKC2pxgaAKPfNcP4oad3geY0c5p7SS6SVTJMBOu4zX3eC8yVFSm/LXAjFgC6 lxjHYAgkx2wpF1jnNU/IpK4skV5GP5ndukyGt8oZgIJf50oXbcxwbHglkmyXyMiFzusB ypkg== X-Gm-Message-State: ACgBeo1n6fNS69nj9rEbJ4id3k5KKjQE++/4MRUB1WkDl++FUdjoxeQu gyMsvLPyJYdDRIU8p9wyER29ZNdAh6GmkCMf X-Google-Smtp-Source: AA6agR71cY3PDc8ND17Ruv81ez8CXnnUQ0EHo2jFhVWRNeAlHJ0/IDfcL8p62fd0iPZ1EAxAmk+hoQ== X-Received: by 2002:a05:622a:344:b0:343:6a5f:321 with SMTP id r4-20020a05622a034400b003436a5f0321mr12655063qtw.204.1661835600783; Mon, 29 Aug 2022 22:00:00 -0700 (PDT) Received: from trappist.c.googlers.com.com (48.230.85.34.bc.googleusercontent.com. [34.85.230.48]) by smtp.gmail.com with ESMTPSA id dm56-20020a05620a1d7800b006b941e994fasm6981047qkb.14.2022.08.29.22.00.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 29 Aug 2022 22:00:00 -0700 (PDT) From: Sven van Ashbrook To: LKML Cc: Alex Levin , Chithra Annegowda , Frank Gorgenyi , Sven van Ashbrook , Aaron Ma , David Ober , "David S. Miller" , Eric Dumazet , Hao Chen , Hayes Wang , Jakub Kicinski , Jean-Francois Le Fillatre , Paolo Abeni , linux-usb@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH net-next v1] r8152: allow userland to disable multicast Date: Tue, 30 Aug 2022 04:59:39 +0000 Message-Id: <20220830045923.net-next.v1.1.I4fee0ac057083d4f848caf0fa3a9fd466fc374a0@changeid> X-Mailer: git-send-email 2.37.2.672.g94769d06f0-goog MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The rtl8152 driver does not disable multicasting when userspace asks it to. For example: $ ifconfig eth0 -multicast -allmulti $ tcpdump -p -i eth0 # will still capture multicast frames Fix by clearing the device multicast filter table when multicast and allmulti are both unset. Tested as follows: - Set multicast on eth0 network interface - verify that multicast packets are coming in: $ tcpdump -p -i eth0 - Clear multicast and allmulti on eth0 network interface - verify that no more multicast packets are coming in: $ tcpdump -p -i eth0 Signed-off-by: Sven van Ashbrook Acked-by: Hayes Wang --- drivers/net/usb/r8152.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/net/usb/r8152.c b/drivers/net/usb/r8152.c index 688905ea0a6d..5e85b8bf9e87 100644 --- a/drivers/net/usb/r8152.c +++ b/drivers/net/usb/r8152.c @@ -2727,22 +2727,26 @@ static void _rtl8152_set_rx_mode(struct net_device = *netdev) ocp_data |=3D RCR_AM | RCR_AAP; mc_filter[1] =3D 0xffffffff; mc_filter[0] =3D 0xffffffff; - } else if ((netdev_mc_count(netdev) > multicast_filter_limit) || - (netdev->flags & IFF_ALLMULTI)) { + } else if ((netdev->flags & IFF_MULTICAST && + netdev_mc_count(netdev) > multicast_filter_limit) || + (netdev->flags & IFF_ALLMULTI)) { /* Too many to filter perfectly -- accept all multicasts. */ ocp_data |=3D RCR_AM; mc_filter[1] =3D 0xffffffff; mc_filter[0] =3D 0xffffffff; } else { - struct netdev_hw_addr *ha; - mc_filter[1] =3D 0; mc_filter[0] =3D 0; - netdev_for_each_mc_addr(ha, netdev) { - int bit_nr =3D ether_crc(ETH_ALEN, ha->addr) >> 26; =20 - mc_filter[bit_nr >> 5] |=3D 1 << (bit_nr & 31); - ocp_data |=3D RCR_AM; + if (netdev->flags & IFF_MULTICAST) { + struct netdev_hw_addr *ha; + + netdev_for_each_mc_addr(ha, netdev) { + int bit_nr =3D ether_crc(ETH_ALEN, ha->addr) >> 26; + + mc_filter[bit_nr >> 5] |=3D 1 << (bit_nr & 31); + ocp_data |=3D RCR_AM; + } } } =20 --=20 2.37.2.672.g94769d06f0-goog