Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp511452yba; Mon, 1 Apr 2019 10:46:07 -0700 (PDT) X-Google-Smtp-Source: APXvYqx5Jq3rdZJpiB81f0m399JmfDVBnOLgNN5yhYpM/Q74Dl8YrOq1kGXsU23KbS75bRCfKPIQ X-Received: by 2002:a63:7444:: with SMTP id e4mr43848728pgn.261.1554140767203; Mon, 01 Apr 2019 10:46:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554140767; cv=none; d=google.com; s=arc-20160816; b=H+7YhgBz6NyqoLg9z6W+tx0BEvoVjAzi6gU0md6nrk8LMcqGgxePcpl7qhm50hXvbg i1grK7W/edZ5L1zPHwMWsF55wAucJypRLNfX8knikhtgH+u6R4ukBfFlKzlOgmpz8F3h AJNaLjSf2o3ghzdPqL4bcPE1ZhI1uPMcRSIdrS81V3ROwYP7DtjCbd9zsXVy54xPXvzD 2KRTg50DVFEdjad8Wl6ZvSxO5XwxoqTVd0I/9d1cqW5Yvpt360aWMQeJv7Ue9Vs8YHNr cxAuebg7JHnvNMkTmkQZP2QD3Mosk1PLbM/5Q0pCIARnKURT8YOwkLQgPfssmJlBOZ4S UPUQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=FNesu65OHQB/c2kn6ohY2LvSPCVgBkgFQ6wunyy/wbw=; b=lvGNYv11LrCt/7XCm8uiL0Af0ArY3TnnGME6zpZOAZUPU4w517eX9ocOVkNIb05TuC ZGxFUeZ8pYSt0wy/455Ygc1H0T/O9udtCSyWCbhlxlszs80E4Q8MPM2IIsfbiV9zYQhN A1LoMxTw11aOxUGtElq2zlFo+dPFu/XXhgz5jz0zSaPps9wmkzBDseiUgQNcv4xVnITG W87tgL72coefqiMjHrlXvc9hAnrd3GY2A6PBJMUpzDzOyJQ2nhKqHa8EL/uyUO8OAlKO a6wQcRv2R7VpPfGBOBjdzkWzOXboMudqn4/hd5fbsnwOLyM1m0yHljWQ4c19N/+7iQb5 uMmw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=18kXDnhY; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z5si9035162pgb.415.2019.04.01.10.45.51; Mon, 01 Apr 2019 10:46:07 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=18kXDnhY; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387764AbfDARpJ (ORCPT + 99 others); Mon, 1 Apr 2019 13:45:09 -0400 Received: from mail.kernel.org ([198.145.29.99]:44138 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2387755AbfDAReW (ORCPT ); Mon, 1 Apr 2019 13:34:22 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E999D2070B; Mon, 1 Apr 2019 17:34:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1554140061; bh=833GKc/UzjpbHOrlTc8XfMlcRCYo+2aDcnpeglTvs3M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=18kXDnhY6OcqifSOAn93DhPIfVj/1u2XcBfk6iSf5hIWJMvWcg5To40sJ+NV7osKR mgO/1EWUjxwst0fjhwfZHqhiCgL2uMbklu3qBbK5VM5HesU+ErqL30FxTN6QnA4egN /H7ynS2JA+/xQozV/f48t9WkRSLkkI6bROysP0gA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Maxime Chevallier , Willem de Bruijn , "David S. Miller" Subject: [PATCH 4.4 095/131] packets: Always register packet sk in the same order Date: Mon, 1 Apr 2019 19:02:45 +0200 Message-Id: <20190401170059.894092036@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190401170051.645954551@linuxfoundation.org> References: <20190401170051.645954551@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.4-stable review patch. If anyone has any objections, please let me know. ------------------ From: Maxime Chevallier [ Upstream commit a4dc6a49156b1f8d6e17251ffda17c9e6a5db78a ] When using fanouts with AF_PACKET, the demux functions such as fanout_demux_cpu will return an index in the fanout socket array, which corresponds to the selected socket. The ordering of this array depends on the order the sockets were added to a given fanout group, so for FANOUT_CPU this means sockets are bound to cpus in the order they are configured, which is OK. However, when stopping then restarting the interface these sockets are bound to, the sockets are reassigned to the fanout group in the reverse order, due to the fact that they were inserted at the head of the interface's AF_PACKET socket list. This means that traffic that was directed to the first socket in the fanout group is now directed to the last one after an interface restart. In the case of FANOUT_CPU, traffic from CPU0 will be directed to the socket that used to receive traffic from the last CPU after an interface restart. This commit introduces a helper to add a socket at the tail of a list, then uses it to register AF_PACKET sockets. Note that this changes the order in which sockets are listed in /proc and with sock_diag. Fixes: dc99f600698d ("packet: Add fanout support") Signed-off-by: Maxime Chevallier Acked-by: Willem de Bruijn Signed-off-by: David S. Miller Signed-off-by: Greg Kroah-Hartman --- include/net/sock.h | 6 ++++++ net/packet/af_packet.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) --- a/include/net/sock.h +++ b/include/net/sock.h @@ -651,6 +651,12 @@ static inline void sk_add_node_rcu(struc hlist_add_head_rcu(&sk->sk_node, list); } +static inline void sk_add_node_tail_rcu(struct sock *sk, struct hlist_head *list) +{ + sock_hold(sk); + hlist_add_tail_rcu(&sk->sk_node, list); +} + static inline void __sk_nulls_add_node_rcu(struct sock *sk, struct hlist_nulls_head *list) { hlist_nulls_add_head_rcu(&sk->sk_nulls_node, list); --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -3155,7 +3155,7 @@ static int packet_create(struct net *net } mutex_lock(&net->packet.sklist_lock); - sk_add_node_rcu(sk, &net->packet.sklist); + sk_add_node_tail_rcu(sk, &net->packet.sklist); mutex_unlock(&net->packet.sklist_lock); preempt_disable();