Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp869092pxb; Tue, 1 Feb 2022 12:06:13 -0800 (PST) X-Google-Smtp-Source: ABdhPJwwnflVJdFg7SmlgL5hcFy096W9FYz1S7XHk6PC3TLK95rfFAdmOaQGTaRx40k+DgaRNbN+ X-Received: by 2002:a05:6a00:1d94:: with SMTP id z20mr26072156pfw.40.1643745973146; Tue, 01 Feb 2022 12:06:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643745973; cv=none; d=google.com; s=arc-20160816; b=XzbvLsjTKJhm/m2448mYeefk333K0C+VplIFclkbQ0Wz98orX6Wt37V/qGE+58zWZ5 FMKmAlUa5ms5rIllYe+1hylXaCapCUSGDW9xUbz2Fu2H79ah/x10DQCIxc28f47zjVYS NP+fJaETZnB+94BQaOPnbn1TJeQbiWUzxJ0/v7z0tv1LML7JQsO5QUYGnRPA0r71qh6B Xyrw6HInsitUqTM1a1ife0MawgskSACfDx5fwgtN+MqvP7/IRuCRJFSMrdIOB59cTFJB /6s0cO1WG/3u+aN0Vhaxcyk82dWHOUrCjx9FXiUtOCs9LRVXc+MUOj/IQbdSBVOXr0pd L04A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=JOBmS2HD3OpfS8/U2Q2CXpfq1EIhu9WFVm9rgnNwJuI=; b=EYFPuq5xrju9dxfWFzzJMo4JGaYf5PCH7Z2gBKNW0RZ+mfi084ld/8PrSeP5eeW1bt QHnRgCu8Oaqex+eK4BEjHMhJwdJivRIK/Ly+xLM0fnHyOJ27XJJMjoXZ56EwaoLmATsb vgOZ6KV0AzNlRmTaOL9xP8wwTaJVtp/woZGEr4kV3sInV8n2yq77x4kGkvcmN2iNEXUv DyfLeRTqPXFVQs+aJjP8900nz2SxFgl5pj6anmlyjLJytZntIHHDCOW+REznk6334aMi YoItVFIq+38PqwSYLhRthZXBzWzmzZjf4LT0HkFxAiguwjlPHEDLL7UpApL9LEU/7mFT If9A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=zTb0qxmJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y15si16131037pll.552.2022.02.01.12.06.01; Tue, 01 Feb 2022 12:06:13 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=zTb0qxmJ; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377636AbiAaLYM (ORCPT + 99 others); Mon, 31 Jan 2022 06:24:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45686 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1359820AbiAaLPH (ORCPT ); Mon, 31 Jan 2022 06:15:07 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 30B8BC061774; Mon, 31 Jan 2022 03:11:18 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id C55D6610B1; Mon, 31 Jan 2022 11:11:17 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8EBACC340E8; Mon, 31 Jan 2022 11:11:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1643627477; bh=8pC7zi+x+Nwfp2vVMr81Kz8GvyFvgdehqb2HvP18y6Y=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=zTb0qxmJUxx0L3CcBlcgWHz6tLTBSOfAQNCIG2+PoOrMoxrUPOT7rI9fPY8C98qUN D7N3cgyThCuGAHmiAIdr+8e7wHqrkFJC3pi643cceANcPTagoXF+1pphcAOZqHTuCm X5EqemSCyS7rDwrewsZZHQuRTFam1G0uVGfOlFJ4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jianguo Wu , "David S. Miller" Subject: [PATCH 5.15 095/171] net-procfs: show net devices bound packet types Date: Mon, 31 Jan 2022 11:56:00 +0100 Message-Id: <20220131105233.252404337@linuxfoundation.org> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220131105229.959216821@linuxfoundation.org> References: <20220131105229.959216821@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jianguo Wu commit 1d10f8a1f40b965d449e8f2d5ed7b96a7c138b77 upstream. After commit:7866a621043f ("dev: add per net_device packet type chains"), we can not get packet types that are bound to a specified net device by /proc/net/ptype, this patch fix the regression. Run "tcpdump -i ens192 udp -nns0" Before and after apply this patch: Before: [root@localhost ~]# cat /proc/net/ptype Type Device Function 0800 ip_rcv 0806 arp_rcv 86dd ipv6_rcv After: [root@localhost ~]# cat /proc/net/ptype Type Device Function ALL ens192 tpacket_rcv 0800 ip_rcv 0806 arp_rcv 86dd ipv6_rcv v1 -> v2: - fix the regression rather than adding new /proc API as suggested by Stephen Hemminger. Fixes: 7866a621043f ("dev: add per net_device packet type chains") Signed-off-by: Jianguo Wu Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- net/core/net-procfs.c | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) --- a/net/core/net-procfs.c +++ b/net/core/net-procfs.c @@ -190,12 +190,23 @@ static const struct seq_operations softn .show = softnet_seq_show, }; -static void *ptype_get_idx(loff_t pos) +static void *ptype_get_idx(struct seq_file *seq, loff_t pos) { + struct list_head *ptype_list = NULL; struct packet_type *pt = NULL; + struct net_device *dev; loff_t i = 0; int t; + for_each_netdev_rcu(seq_file_net(seq), dev) { + ptype_list = &dev->ptype_all; + list_for_each_entry_rcu(pt, ptype_list, list) { + if (i == pos) + return pt; + ++i; + } + } + list_for_each_entry_rcu(pt, &ptype_all, list) { if (i == pos) return pt; @@ -216,22 +227,40 @@ static void *ptype_seq_start(struct seq_ __acquires(RCU) { rcu_read_lock(); - return *pos ? ptype_get_idx(*pos - 1) : SEQ_START_TOKEN; + return *pos ? ptype_get_idx(seq, *pos - 1) : SEQ_START_TOKEN; } static void *ptype_seq_next(struct seq_file *seq, void *v, loff_t *pos) { + struct net_device *dev; struct packet_type *pt; struct list_head *nxt; int hash; ++*pos; if (v == SEQ_START_TOKEN) - return ptype_get_idx(0); + return ptype_get_idx(seq, 0); pt = v; nxt = pt->list.next; + if (pt->dev) { + if (nxt != &pt->dev->ptype_all) + goto found; + + dev = pt->dev; + for_each_netdev_continue_rcu(seq_file_net(seq), dev) { + if (!list_empty(&dev->ptype_all)) { + nxt = dev->ptype_all.next; + goto found; + } + } + + nxt = ptype_all.next; + goto ptype_all; + } + if (pt->type == htons(ETH_P_ALL)) { +ptype_all: if (nxt != &ptype_all) goto found; hash = 0;