From patchwork Tue Feb 4 13:23:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959184 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qv1-f73.google.com (mail-qv1-f73.google.com [209.85.219.73]) (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 F1F22211A32 for ; Tue, 4 Feb 2025 13:24:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675448; cv=none; b=OAugoFOkIAc815iyg6r/sap+rPxDGbFbXDFazBJsG5q15OT+zh32mtHahDEyLNraYIJdIoWu3xVTIQLgdoKGYna3XAgb8kwx7rxHFmZgoM4WvCzaiBUOH1rE5+NT/aoX1iqT2702WjCqczaa08sKbpa6YKvbZz9s1ZVU7HuxRAI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675448; c=relaxed/simple; bh=7jVWSrjoPsJTlYuJUx7Ve86JID2VuVx3RWFZAEwPwns=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=SoTA+yw5uv0MyOSqelJITIpWaxQkTYBIMlEVTrVB9QYY02PXI1K8OeGnLVc3Ch7bEdbjRYryrnbFqFPStea3a6+bgUc4I8yOlLdbayuz94IH6R3KDV5cWvZR+GEKNhJUf+Ea5puvlDzgxzR4EUBBjbnER3gEl4UuI3sObyPEPyM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=FFAYmfCj; arc=none smtp.client-ip=209.85.219.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="FFAYmfCj" Received: by mail-qv1-f73.google.com with SMTP id 6a1803df08f44-6e429a54eb4so10862326d6.1 for ; Tue, 04 Feb 2025 05:24:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675446; x=1739280246; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=YltdPh2DTLHaaVWal9d771nvesQr3cOmFN62LjAnwTE=; b=FFAYmfCj+OLQyr2cWcL3Cl69eANTW8OE8lvVlWT96nq880/RY+kNYVYYC4Zaf+/f8h eSpKQG3EliIFkrPGx3ax3gMmswbw76E5XNW0kUgVacWWoLQU43jVb5bMLlO9TG0fj8aY L7iAFqQO+rdeZBTlcqve92nbzVrBm26xLHn883BuC78DHazK+vGWmoikZ7BgwW1oBOXI E/XiTqT8XXBIkzD1S3iBOg4AeKjhv/MPUz/6eV4T7XwGHFpvZByg58iehizxpKDXJhc8 tY8Dq9qCkuVzWRhNx4+LGwuj3S1tLEnIF0fM3nQhur+xvD5GrEJf7Sew5UDU1zkPyh3L VsDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675446; x=1739280246; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=YltdPh2DTLHaaVWal9d771nvesQr3cOmFN62LjAnwTE=; b=AmI5xbBIi56LsrOUpXyBbixKo3/Tv+dVLwYeE4kBN8X2f64K6od8QV6AfDwOqjOERW 3BB4BcW/IlF72WcXvTITVTModQsuNsdkjgHSKJtWG+dXYaaXq/ynLHs5wR0VL8Jnv5cr bzDDsmlKItBtukIjZmChJD1/Ei+cjydz44MEhcFffOzwqnqnhNLgTUsWnQWHV4V4MHrP hTfTaltM15WRf+xrhE3uysTgXeLLqbbGWuGgRKr6zyG/oW/SYDFhd1O0JqPJvV+Y63w4 bdoV3u5mLigGpzUJGdORaNUIxZ1lCnbxIzUmx1OqUo4QuHU2S/XHUjJE6W7+ZlcQl9eQ T9BQ== X-Gm-Message-State: AOJu0YzHqxYjFhYoITUxLFvxw6NqyZ5RZtD+0r837fAYsZR13PGCLO1r yLfjTWL373PU89CAZAcmV+g2pzY6W/XXG4XgGYQglqKLQgLAO/bG2wRhZRqfbAxB5yfF4SkZeC5 YLk/OhyHvkQ== X-Google-Smtp-Source: AGHT+IGLTFI7lDJpMbmYLQgBsbKDXujQpWgfNYMlO1xLetVSi90cBsUcmI4G6tUgvq8CSlAXQ38puls7777/1w== X-Received: from qvbmv2.prod.google.com ([2002:a05:6214:3382:b0:6dd:3c5b:62ca]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6214:487:b0:6d4:25c4:e772 with SMTP id 6a1803df08f44-6e243ca765amr475668886d6.36.1738675445663; Tue, 04 Feb 2025 05:24:05 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:42 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-2-edumazet@google.com> Subject: [PATCH v3 net 01/16] net: add dev_net_rcu() helper From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org dev->nd_net can change, readers should either use rcu_read_lock() or RTNL. We currently use a generic helper, dev_net() with no debugging support. We probably have many hidden bugs. Add dev_net_rcu() helper for callers using rcu_read_lock() protection. Signed-off-by: Eric Dumazet Reviewed-by: Kuniyuki Iwashima --- include/linux/netdevice.h | 6 ++++++ include/net/net_namespace.h | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h index 03bb584c62cf8a920b12c673dcc438eb1cc41499..c0a86afb85daa2b50e26a1ca238707a24a1842ad 100644 --- a/include/linux/netdevice.h +++ b/include/linux/netdevice.h @@ -2663,6 +2663,12 @@ struct net *dev_net(const struct net_device *dev) return read_pnet(&dev->nd_net); } +static inline +struct net *dev_net_rcu(const struct net_device *dev) +{ + return read_pnet_rcu(&dev->nd_net); +} + static inline void dev_net_set(struct net_device *dev, struct net *net) { diff --git a/include/net/net_namespace.h b/include/net/net_namespace.h index 0f5eb9db0c6264efc1ac83ab577511fd6823f4fe..7ba1402ca7796663bed3373b1a0c6a0249cd1599 100644 --- a/include/net/net_namespace.h +++ b/include/net/net_namespace.h @@ -398,7 +398,7 @@ static inline struct net *read_pnet(const possible_net_t *pnet) #endif } -static inline struct net *read_pnet_rcu(possible_net_t *pnet) +static inline struct net *read_pnet_rcu(const possible_net_t *pnet) { #ifdef CONFIG_NET_NS return rcu_dereference(pnet->net); From patchwork Tue Feb 4 13:23:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959185 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qv1-f74.google.com (mail-qv1-f74.google.com [209.85.219.74]) (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 49E6721517C for ; Tue, 4 Feb 2025 13:24:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675449; cv=none; b=f9/Nzwj4HAGaGKJLgOofZ4JGJXjfcu+j+8i9j5bUFnTI8LWuHXzG9MUA3ndPCaHnydV2LCqG0pQNzHECZ8JxHHHrSKR1f7xBMz0RnbwHxJGoOaM7+3Lw/47AX6GF4NYnQKUooHZSUL4x2FnLTbWTDdSAE4bBVm3ZFmsKrmxv78g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675449; c=relaxed/simple; bh=BjDBT6Ld/KkPV9e18e0rFMjRoUhNxwx0+3f23tk62VA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=HOf/Kkvljm+kJvB2Ekgmzj8Qu1+jxpQlABVoH4o+Mq7ZKfKfMKyxBc7tQvsIXfRuL+AxcmyykEhiEQzKbQqKpmQL3/IOCwvNpdL4kMejNeOGkXclxlFYK8iznXw3rZkqriigZoaSLuLqtoyyk/W3KRBIN7EYdQyLPs4AyKSeL6A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=q6MsF963; arc=none smtp.client-ip=209.85.219.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="q6MsF963" Received: by mail-qv1-f74.google.com with SMTP id 6a1803df08f44-6d8860ab00dso93220936d6.0 for ; Tue, 04 Feb 2025 05:24:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675447; x=1739280247; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=wFUTWn43E87kH4WvQpJOMQwE5y357mjWskRk2Y0FDpo=; b=q6MsF963jASmlizTK94q4CX1aYMubCT3imm4oKUpqkwDsSVU7i3TKfbGtxyflQFfCt 3EpnOg58a2zuI4M854WJHil/bNSY8O94piRCHdVoVGxTQdNZOIJcRfWLG3N66ElxlrTz AbCls4vxagMh1PbItK5sgIPc8IaLyNkwFye0fZZIw/lueosD6kK5EZTm7kzfhKqr9GyT 4n8tKcUkD1LfZldqpfPPXmwjRADVzoBaK82Dj8yW99W1wfDyAnnJ98kvg9sys7IYnilh LWrk5asEX2CYzO1uVDnt8XSxEcioStoE2RRU7u6xiQWycyTYoOfhJ42HKfkDupFjaSMQ RAXw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675447; x=1739280247; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=wFUTWn43E87kH4WvQpJOMQwE5y357mjWskRk2Y0FDpo=; b=b8ruGij6O4tIVpdDMJ5NEklLD5//T9fRudMtOhGxQZvTzHSEUY8E3IQdagh+Voxzjv oW1zpfUQupcmgYC5xRsTdmVrPU2wmkTDc9H4LmwAlz7oMBOe31eUo2mp02YvqjzW+CFw TDgugWCaa83PvWTCHrpyxmvRz5/AnzMmGofoR62GMhRhQ/+FRVVnFc4R2X0uyjC+qhV6 dQMb+b5vKqfuu8/o3ioGFnXUNFGZWX+wctXDafUX2rX8kNLytmtnGgufPb4HdF8C+1b0 eZKYYkU4GMgnrrkZ4slxQuWu+Sz0D2pyjeOiwaoSmUkvEyHh9VDeB9uCuLmzNKo3G2T4 gwVA== X-Gm-Message-State: AOJu0Yx2lwkZ8zb+hGdcqh06Bz1nJmsdd6f9LXyyKRmRXF5X/dXNtH8x 7y5uBYAN+6og4MNtt4uU/QyeSdXzxyJ0e0PZYLsb4dfjjvCfHV71PvH7nTNBt2sKDJuUtXDuKiU HzqL8BBBkCg== X-Google-Smtp-Source: AGHT+IG0iXuTPBHcfUn85DMxtkb2Lt22iUpYV6F2F2g8xJVTlspVOOlw7xIkFFGV2gr4nWqdLnt948o+t1Q6Fg== X-Received: from qvbmf4.prod.google.com ([2002:a05:6214:5d84:b0:6d9:89e:9cf]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6214:21ad:b0:6d8:848e:76c8 with SMTP id 6a1803df08f44-6e243c7e244mr394041746d6.42.1738675447131; Tue, 04 Feb 2025 05:24:07 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:43 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-3-edumazet@google.com> Subject: [PATCH v3 net 02/16] ipv4: add RCU protection to ip4_dst_hoplimit() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org ip4_dst_hoplimit() must use RCU protection to make sure the net structure it reads does not disappear. Fixes: fa50d974d104 ("ipv4: Namespaceify ip_default_ttl sysctl knob") Signed-off-by: Eric Dumazet Reviewed-by: Kuniyuki Iwashima --- include/net/route.h | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/include/net/route.h b/include/net/route.h index f86775be3e2934697533a61f566aca1ef196d74e..c605fd5ec0c08cc7658c3cf6aa6223790d463ede 100644 --- a/include/net/route.h +++ b/include/net/route.h @@ -382,10 +382,15 @@ static inline int inet_iif(const struct sk_buff *skb) static inline int ip4_dst_hoplimit(const struct dst_entry *dst) { int hoplimit = dst_metric_raw(dst, RTAX_HOPLIMIT); - struct net *net = dev_net(dst->dev); - if (hoplimit == 0) + if (hoplimit == 0) { + const struct net *net; + + rcu_read_lock(); + net = dev_net_rcu(dst->dev); hoplimit = READ_ONCE(net->ipv4.sysctl_ip_default_ttl); + rcu_read_unlock(); + } return hoplimit; } From patchwork Tue Feb 4 13:23:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959186 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qk1-f201.google.com (mail-qk1-f201.google.com [209.85.222.201]) (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 B8B3D2153F7 for ; Tue, 4 Feb 2025 13:24:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675451; cv=none; b=HgitqRTGIe0vkoXq1ewum/jYExbdsyH0SqdzT9Ph0tQ5MaZC5YAC5Bsh31/Lk48ohbAz5rvv3xSXu6IyGcKX9El7lCLvu/fshDrGBqKmRkDT9hfA1WugWjbOMh5RFZj7NyLvKS2Uy3niDp7kaSqWdcXO1BSscP21Kynvb1/HZ0w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675451; c=relaxed/simple; bh=Tv9lP/iKol3DOwtqFgPyYFOYlq/ggjrKRjQnoathmaA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=MMrz/tqyM0m+vSrFVVC8EvGXdrBcH0f7wW3APavPdLZ3UTqPImknTC6PRYBLP2FQIru3hIPNbS408jeRQtBu8dURcNnRBg7BexuHsKs1dQWYdu9HQSmer1JvlFPgsZ125R3JBOhx3+CdaJ8pVtL0L0Eyx2v2U9VUWnHyHfw+jTg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=qaPpKTsw; arc=none smtp.client-ip=209.85.222.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="qaPpKTsw" Received: by mail-qk1-f201.google.com with SMTP id af79cd13be357-7bcdb02f43cso603384185a.3 for ; Tue, 04 Feb 2025 05:24:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675448; x=1739280248; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=8gzgfgZQZl+mi1a/sA+Jd+RkxpB2VmO3rTOvLw+ezUA=; b=qaPpKTsw+xgFD4LmJcjZQFeL60M0ohdwDtJbA5sdVzF47vBJp/b4uwqt1tFkJ2YeU+ E9cGyccv6ToIMsmeWjZSWaFJcEHQL0A3L6/bRWTG8uDn+h9pTmi5aqJEbRyrDWZ5ca3t Vcj8EYyAmue1s9lQBqsNOfmoWhMqlhWSUdiMZ0/iRZcjUqwgIwNWlzDNo0tZHnH+q+DU mYdKBIAy7l6pCP4Bzqm/5l83+C+WLVbidz6iptCsKKGZHECfdmxuELMWHBNMMMAWG3Ez PPpRsfYdj1JQrccqqTfETXUf9R2NvmBolYAJI3aC/uy9Qli6r5Q1VX4+ms4bnmehL5sV yG5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675448; x=1739280248; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=8gzgfgZQZl+mi1a/sA+Jd+RkxpB2VmO3rTOvLw+ezUA=; b=kzZGi/oN8dnVUB56MT5OKROIVGKlGoBnizJFCU//x6mJ5WhKl/0dWS1ToWi2itblsf Mf2bQGZOTFX/OtZH0FjLtOgVzTrGKrB6fCaK64lbbff3FjuXMBhdnx0NUxQSMM5lselq XBEPUv3xAQpaPlf35o4YqSa/ltMYXhCtQx1yUcChAymFTRjVzZXpSy9wyHWyko6ZoarR H6w2mPs8wPU5zCaLR0ryw+Kc8cOX32ABRdhipZU5W4cJft5JypG5Ar9AruMBONLBExvy v6SYX0Q8Xbmr426nDbJhX6MSj4uxrucaEqBZlSsiAnnWy9ADnhnrL5Sd/voVRBhN0UI4 AG5Q== X-Gm-Message-State: AOJu0YyjhtjQOf8fCM2gNE8qkI9Tpa7l36uEuJ0blwkPY+Q4LSOqXri+ czt7LoSdAqPVJul4gV4RuggdbookQyxbcNSgjJ4uRJ1HMZbmd6V7X74LBgCIShoU099mIq6qCwO YnKpKSCl4Qw== X-Google-Smtp-Source: AGHT+IEkT9t6vpX6GZEi0d28oYCl6RO8GINPMTR3BZrIPlzMSBq6bhARnF1wwsIq/0IRtyG5gy8GivBU93UXUQ== X-Received: from qknqb10.prod.google.com ([2002:a05:620a:650a:b0:7b6:c513:cf45]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:620a:2686:b0:7b8:61df:f5de with SMTP id af79cd13be357-7bffcd90727mr4007528685a.45.1738675448607; Tue, 04 Feb 2025 05:24:08 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:44 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-4-edumazet@google.com> Subject: [PATCH v3 net 03/16] ipv4: use RCU protection in ip_dst_mtu_maybe_forward() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org ip_dst_mtu_maybe_forward() must use RCU protection to make sure the net structure it reads does not disappear. Fixes: f87c10a8aa1e8 ("ipv4: introduce ip_dst_mtu_maybe_forward and protect forwarding path against pmtu spoofing") Signed-off-by: Eric Dumazet Reviewed-by: Kuniyuki Iwashima --- include/net/ip.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/include/net/ip.h b/include/net/ip.h index 9f5e33e371fcdd8ea88c54584b8d4b6c50e7d0c9..ba7b43447775e51b3b9a8cbf5c3345d6308bb525 100644 --- a/include/net/ip.h +++ b/include/net/ip.h @@ -471,9 +471,12 @@ static inline unsigned int ip_dst_mtu_maybe_forward(const struct dst_entry *dst, bool forwarding) { const struct rtable *rt = dst_rtable(dst); - struct net *net = dev_net(dst->dev); - unsigned int mtu; + unsigned int mtu, res; + struct net *net; + + rcu_read_lock(); + net = dev_net_rcu(dst->dev); if (READ_ONCE(net->ipv4.sysctl_ip_fwd_use_pmtu) || ip_mtu_locked(dst) || !forwarding) { @@ -497,7 +500,11 @@ static inline unsigned int ip_dst_mtu_maybe_forward(const struct dst_entry *dst, out: mtu = min_t(unsigned int, mtu, IP_MAX_MTU); - return mtu - lwtunnel_headroom(dst->lwtstate, mtu); + res = mtu - lwtunnel_headroom(dst->lwtstate, mtu); + + rcu_read_unlock(); + + return res; } static inline unsigned int ip_skb_dst_mtu(struct sock *sk, From patchwork Tue Feb 4 13:23:45 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959187 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qk1-f202.google.com (mail-qk1-f202.google.com [209.85.222.202]) (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 06B4A2153E9 for ; Tue, 4 Feb 2025 13:24:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675452; cv=none; b=Bao5M65o03HL5abPVefA2xzVLmpiE9OgrVYaX2Ubj5R3Eq03GyUaPWZ9fcoGgfRmo/Wr9MnNbMWVsTkmJv3SOqTq3njjzTFVIQwLKoJV8jhkqcA+aKflT6qneOYygiFwc2+143kBzyRYk8XKMrwm86R+wjtwgljNjRixbxrkrEs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675452; c=relaxed/simple; bh=H8JH/QPjFfGxbrJtRbDkCum9cREuE5YKVIPC//b1qCs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=rLjic5rMLZPc52TIC1SLuA5XANlPrpOd5l1fCWmX8VjGbu4ikhUpNR3/h3jp7dv+R7yfcEQ9np8YAKYRp4YIRi53Z/KyyzEx0/CDo/PjLYR+R8TzOczci1MpuPV+QPpIVQCza/LTNdGkQulJNRwEhrRubNgHsyXMEFYlXzWeneE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=O5O04nQi; arc=none smtp.client-ip=209.85.222.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="O5O04nQi" Received: by mail-qk1-f202.google.com with SMTP id af79cd13be357-7b6fe99d179so1327691085a.2 for ; Tue, 04 Feb 2025 05:24:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675450; x=1739280250; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=oummPnO89bchIzAktiowh3Jl3EZAt201EnCE7gdN6jc=; b=O5O04nQic86XB5MdntECYmoXqyQEEMA6KdQONkmHDW26U87GSU6a/GGoxTyEpRKG0Y pK44EPJBJ6OaexSpm7kCp1iMk/xoZ6ISNpABHQo6kVut8WT9H/xmK+CqAR6KKP68qnqT 2eXDz7Mm9iOu9GtZusAfUrnmoBYk2ODTBfdnbgclUgC6vNUcj6DAeOdUbEKMp26HhT0l E3vgKAUOFYtjOmG82hPyHigMs8DAP9BQJuvRGiv6RZ7myYW1SVI7IJomp/58qpNfSlL1 fxmrXNXQyqH61P8Bc9ncUwijX3Z6d8W2S6gcSlrjZ280SIjlV7dBZd/07plK6YoXQOJz htQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675450; x=1739280250; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=oummPnO89bchIzAktiowh3Jl3EZAt201EnCE7gdN6jc=; b=mq5+ubauhGJztt9zm3Nd4CZXotD8vi6+RovSTua8chbtV2Q+TZ1XRxyMcs1bUKM8dW AclUKKG758la5816Z9sSGMXrQFfY7OhjyhG1WfgzDDhPuh+HRdKsdHtbPbVBJ+pjde8E GdfzBk10M60dKpn/6M/iXJEqw69g5Q5Y/704ELfKZ6xanun0O070UAsV0/F1EuGckiJd p984Bcl8v2ZBjd3hV+x/Iy/E2zdI8iFLtZDoknf3PQnyBj1itL/pV3CnymAhR7aWbRS3 fHki67CKBK7yqhPv6AH3ByryJEbAp+UlxNci58KBRw7CS2pcN+ovW2xCB/dUNkEPdbtA kpGQ== X-Gm-Message-State: AOJu0Yz0a6gCbR5qcEOKXUFqZFZxam/GCBIx6abBTImFMJbTSIM7sc78 k0NDGEpKT5HUbHrW1iXr2s8jzzqjgqDCbRc6AEO+aRHQJ8C9jG7J0XOSy6fBLIW+DrDOpHooeXQ IZtjM1uqEPw== X-Google-Smtp-Source: AGHT+IEfbIWr1pEfZI0s7mw2vNXkXeeRNTzJelaBAaaAiuyQLqSv0o9SQVIDFBmIIEH/CSeCIhr+gFz4s20M/w== X-Received: from qkbdp7.prod.google.com ([2002:a05:620a:2b47:b0:7bf:f8dc:e8a5]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:620a:bd4:b0:7b7:e5b:3b24 with SMTP id af79cd13be357-7bffcda8723mr3706674085a.50.1738675449916; Tue, 04 Feb 2025 05:24:09 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:45 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-5-edumazet@google.com> Subject: [PATCH v3 net 04/16] ipv4: use RCU protection in ipv4_default_advmss() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org ipv4_default_advmss() must use RCU protection to make sure the net structure it reads does not disappear. Fixes: 2e9589ff809e ("ipv4: Namespaceify min_adv_mss sysctl knob") Signed-off-by: Eric Dumazet Reviewed-by: Kuniyuki Iwashima --- net/ipv4/route.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 577b88a43293aa801c3ee736d7e5cc4d97917717..74c074f45758be5ae78a87edb31837481cc40278 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -1307,10 +1307,15 @@ static void set_class_tag(struct rtable *rt, u32 tag) static unsigned int ipv4_default_advmss(const struct dst_entry *dst) { - struct net *net = dev_net(dst->dev); unsigned int header_size = sizeof(struct tcphdr) + sizeof(struct iphdr); - unsigned int advmss = max_t(unsigned int, ipv4_mtu(dst) - header_size, - net->ipv4.ip_rt_min_advmss); + unsigned int advmss; + struct net *net; + + rcu_read_lock(); + net = dev_net_rcu(dst->dev); + advmss = max_t(unsigned int, ipv4_mtu(dst) - header_size, + net->ipv4.ip_rt_min_advmss); + rcu_read_unlock(); return min(advmss, IPV4_MAX_PMTU - header_size); } From patchwork Tue Feb 4 13:23:46 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959188 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qt1-f202.google.com (mail-qt1-f202.google.com [209.85.160.202]) (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 3329D21576C for ; Tue, 4 Feb 2025 13:24:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675453; cv=none; b=QG4l8naiS5OaRt/wRf8BAJQP9CsxtA/v+T0WvRpC/+k2nxIFVGMbZlvKvEUUfKTNqR7hZw+sHlNaVo3aZGyE2jxOa0Dqq0L87NCrxqjJaxFuZ5kUCKTZSx+tb8Ob92nWT2FM0AijakHBMVfvD3HNMiV01a3MqjYWkU1rZzFwN48= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675453; c=relaxed/simple; bh=wBUlXxqCOHC5mb4l82j/huFvC/81SsSroryG3eWs92Y=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Wrvy+V1c7zbOnN6hHcJjwqGr4PUtNmSOWLjtwg1pd3AShv9uGnINaw9avtWGNuT6WkccKbbfxlF3AjetRR8Bdd8fBnDDA0oihbb+0eUdzNNJ8gRWQXTqirMzNMSiSVEvgf9qbQf3MSnfNRw/2Nntf5FeStLHmKgmA1MT0Yx78sQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=lHj44hB9; arc=none smtp.client-ip=209.85.160.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="lHj44hB9" Received: by mail-qt1-f202.google.com with SMTP id d75a77b69052e-4679fc5c542so102636761cf.0 for ; Tue, 04 Feb 2025 05:24:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675451; x=1739280251; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=H0DPhFcYIwCjlPd5Kix9DbDaw6MNxiwJUB+YXQT63GU=; b=lHj44hB9NhlSS7+rO7Be/eF9q6ftEmvnbFOypO4yreE4GdMhwOUhjqDMPlf4fD32Sx Z/CW5vHkzuF2+l2XLAfylxIbP8l9IzKI6p2a2778yj8tl28f65wCxczirwvrWg7HKPis toAo/OoQ9S10cTW25Y7gpbAzOINQ38mGye/Z+gh1ZwF8/8BUeCqg68eDyp54a0V23qhK jkYlA6PGV1FpjYrVrK3ZBLwzspxkw2Kqg8JQsHLY19bC2OQ2if9wPQbwJYUvGhUGt3UX iZ43kyuZqLd6jh5ZFeRuUNxNIWeRJli0flmddIEOm5aL1Y6/hkuxQ7iLItpaJj3muxL9 mlcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675451; x=1739280251; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=H0DPhFcYIwCjlPd5Kix9DbDaw6MNxiwJUB+YXQT63GU=; b=YRCEIWV1kzFoSUsa/7v5LprdY9HT2QywiyCE1l0HyvqmibGzDvccC12oc8tRS98XLY BCfyvvCyfL6VodXS9Sf1vF1JsEI6OA+rCjM8OjbJZZI1UDC11Ui3McCarY8vQsuxXbBI mf65UhB3kM7kyr3/Z7ec3W7QckOj4IjifvZEDOrCv6K3w8s0bzyYxuO0QLoUajn9jLfo 78iTvee8Ukr9r0QOZxRzX1Uxa9bFBt1kccdKx3lIg/Y+R+5T3LhAPHggMm+iI27RDGgd EKeXu4poUx6uWOg3V2QIeqRmH+oM75WsQJew3UMSL9dm6ApLTDpUhnodJ1Hz0R87k9M3 HJZQ== X-Gm-Message-State: AOJu0Yw1nlfuDnrOtvWuZ2/5FPlq/1rJxABZDy2JF6lqHjau/sFxJZqX l5G4oiBPh3zT3uRLZTFTMn3CdMOyj10OJVtxZVlcD64By6ClXhmwJBKQVBvcfPZQ4CstH4ZIK9X cXlAwwXCiYg== X-Google-Smtp-Source: AGHT+IFhjagraMPvGg9635UClSsggwkDiCrEKNAlaQDERzz/ZUR85ExBWoLc47iDr8tlva3oNgiRYdniLdiRhA== X-Received: from qtbcc27.prod.google.com ([2002:a05:622a:411b:b0:466:928b:3b7c]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:622a:5e05:b0:46f:d6c3:2dc7 with SMTP id d75a77b69052e-46fd6c32f17mr266662971cf.23.1738675451234; Tue, 04 Feb 2025 05:24:11 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:46 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-6-edumazet@google.com> Subject: [PATCH v3 net 05/16] ipv4: use RCU protection in rt_is_expired() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org rt_is_expired() must use RCU protection to make sure the net structure it reads does not disappear. Fixes: e84f84f27647 ("netns: place rt_genid into struct net") Signed-off-by: Eric Dumazet Reviewed-by: Kuniyuki Iwashima --- net/ipv4/route.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/net/ipv4/route.c b/net/ipv4/route.c index 74c074f45758be5ae78a87edb31837481cc40278..e959327c0ba8979ce5c7ca8c46ae41068824edc6 100644 --- a/net/ipv4/route.c +++ b/net/ipv4/route.c @@ -390,7 +390,13 @@ static inline int ip_rt_proc_init(void) static inline bool rt_is_expired(const struct rtable *rth) { - return rth->rt_genid != rt_genid_ipv4(dev_net(rth->dst.dev)); + bool res; + + rcu_read_lock(); + res = rth->rt_genid != rt_genid_ipv4(dev_net_rcu(rth->dst.dev)); + rcu_read_unlock(); + + return res; } void rt_cache_flush(struct net *net) From patchwork Tue Feb 4 13:23:47 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959189 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qv1-f74.google.com (mail-qv1-f74.google.com [209.85.219.74]) (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 D4E0121A44C for ; Tue, 4 Feb 2025 13:24:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675455; cv=none; b=uJqODohDHbefyzp1KJbR48TTDSq09aurcPYlkpbTEWuffDZchiMXL+BVvILjqVQHS8/kXSE0gN2yUWSStZlkZVcpfECeKQ3gUxsjwqGKwYB5yL/PECTeakBv5kAavc9ehuXN9CZ6tReVPIUrJYc4Kj0wU8gvmySy+ibJP/JOURE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675455; c=relaxed/simple; bh=KUBWLaE7l8G087vZxjYgfbMjhgm6OCSi8YPfBZGcIuA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=qzfFn+mxLQvv+61CzwipLmFsOLkAdUsF+hqYeZwQ983P6rlHee2Nvb7CF4EMDFfbx4LSVORdUcRfh5ZQqhzukzCd6wMuMjRRRo1Hf07FTzLk7VaL9wOAlfBMyKDnHkDAotawSesubIvYCyxsk/ACjfQbd+iaZTr+5IaD7WHK8r4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=EMGfEcbD; arc=none smtp.client-ip=209.85.219.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="EMGfEcbD" Received: by mail-qv1-f74.google.com with SMTP id 6a1803df08f44-6e425770413so12109156d6.3 for ; Tue, 04 Feb 2025 05:24:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675452; x=1739280252; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=exj+/WiMcA/4x3JNYZjiPmtoq+Xf15JgMsZphYh6BoQ=; b=EMGfEcbDIyafzJQiODEdar+h3MW+k5hkv4WfxLfUQjJoD13mJ2qtvwV2aIl0Tc5gja V1fGxzUulo9iPyTq9wsgmOgceZpswis+Tbd8sMy3BSCer1U2+M7DxquaEh1TpOy6/xAs EnhkbJhcz51vktqaAm77w4rr/8SJLnqAaJBuy7uLs9GQ+EGx0G4q6kfw404o5wul9vou 0h/eCFkx2ZQDCxgxqNAZ1KbIQ4gNYHnTXwMaZwvymPfXBEA9BKTqZuQ+P2YFAMwCjx8q Mu1kJ2Kp/yRhQWPl0BpOio30PEyuCC6pdKhNdgjUNnqzzO0jpcu3CGtt9lyNCqYskfRq F2LA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675452; x=1739280252; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=exj+/WiMcA/4x3JNYZjiPmtoq+Xf15JgMsZphYh6BoQ=; b=P/WaNnkeShrtV02K+wVsWGlZjtm6M9icyfg2gPsgYN4n7Mum5N9/nR1Iepr2q4Exip jHqGFnf6su39rIs+Q9O7hmEHzFThU0sHfcd+re/CCK+QwdawjmM+v1qyDYBYbiVFaRB/ EihY09qdoidGhFIKb+CMKJ+gnzKBr4aiblt7u8hG7rpIWyR1eR8K+sJn/UYFbb0W1iC5 SRxRDm6IegwXeq3jC0yOny8Hu/VMwGYHiA8iYDuE1BOb4FYndPJITj1+vUnu6KgcS3nQ IJA1Zkk07oH/tUweoHqeRbK9+B3Gqz6sa6PmwHam5kOQq+y9wk2FrlBLQQgxFmYBR3bc Kgtg== X-Gm-Message-State: AOJu0YwNc+/xennAskYyEcRalmJrBqSN/HxUkjTa4+AtFtf6kBguaL2Y JgHjkdW6+sNK8isPKFbYfzDZzOsTeLKDt2gThM73511F84RpQGkAwu2HU37yDOnJ3ujgzGJiShy 1z6BuH8A9Tg== X-Google-Smtp-Source: AGHT+IG8r4Z50CnGIrRDrloIsE83MdoQGH5C19taBct/CIDzenzZyeYDhpHstizxHt7AhYxmPmhsLIzFK0lp2g== X-Received: from qvbqm13.prod.google.com ([2002:a05:6214:568d:b0:6d8:91fe:f3e8]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:ad4:5bc8:0:b0:6e1:69ba:34a with SMTP id 6a1803df08f44-6e243befc0amr284748176d6.1.1738675452652; Tue, 04 Feb 2025 05:24:12 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:47 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-7-edumazet@google.com> Subject: [PATCH v3 net 06/16] tcp: convert to dev_net_rcu() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org TCP uses of dev_net() are safe, change them to dev_net_rcu() to get LOCKDEP support. Signed-off-by: Eric Dumazet Reviewed-by: Kuniyuki Iwashima --- include/net/inet6_hashtables.h | 2 +- include/net/inet_hashtables.h | 2 +- net/ipv4/tcp_ipv4.c | 8 ++++---- net/ipv4/tcp_metrics.c | 6 +++--- net/ipv6/tcp_ipv6.c | 10 +++++----- 5 files changed, 14 insertions(+), 14 deletions(-) diff --git a/include/net/inet6_hashtables.h b/include/net/inet6_hashtables.h index 74dd90ff5f129fe4c8adad67a642ae5070410518..c32878c69179dac5a7fcfa098a297420d9adfab2 100644 --- a/include/net/inet6_hashtables.h +++ b/include/net/inet6_hashtables.h @@ -150,7 +150,7 @@ static inline struct sock *__inet6_lookup_skb(struct inet_hashinfo *hashinfo, int iif, int sdif, bool *refcounted) { - struct net *net = dev_net(skb_dst(skb)->dev); + struct net *net = dev_net_rcu(skb_dst(skb)->dev); const struct ipv6hdr *ip6h = ipv6_hdr(skb); struct sock *sk; diff --git a/include/net/inet_hashtables.h b/include/net/inet_hashtables.h index 5eea47f135a421ce8275d4cd83c5771b3f448e5c..da818fb0205fed6b4120946bc032e67e046b716f 100644 --- a/include/net/inet_hashtables.h +++ b/include/net/inet_hashtables.h @@ -492,7 +492,7 @@ static inline struct sock *__inet_lookup_skb(struct inet_hashinfo *hashinfo, const int sdif, bool *refcounted) { - struct net *net = dev_net(skb_dst(skb)->dev); + struct net *net = dev_net_rcu(skb_dst(skb)->dev); const struct iphdr *iph = ip_hdr(skb); struct sock *sk; diff --git a/net/ipv4/tcp_ipv4.c b/net/ipv4/tcp_ipv4.c index cc2b5194a18d2e64595f474f62c6f2fd3eff319f..3bd835220d43d6d6491fd5c8d5e9954c37303f83 100644 --- a/net/ipv4/tcp_ipv4.c +++ b/net/ipv4/tcp_ipv4.c @@ -503,7 +503,7 @@ int tcp_v4_err(struct sk_buff *skb, u32 info) struct request_sock *fastopen; u32 seq, snd_una; int err; - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); sk = __inet_lookup_established(net, net->ipv4.tcp_death_row.hashinfo, iph->daddr, th->dest, iph->saddr, @@ -788,7 +788,7 @@ static void tcp_v4_send_reset(const struct sock *sk, struct sk_buff *skb, arg.iov[0].iov_base = (unsigned char *)&rep; arg.iov[0].iov_len = sizeof(rep.th); - net = sk ? sock_net(sk) : dev_net(skb_dst(skb)->dev); + net = sk ? sock_net(sk) : dev_net_rcu(skb_dst(skb)->dev); /* Invalid TCP option size or twice included auth */ if (tcp_parse_auth_options(tcp_hdr(skb), &md5_hash_location, &aoh)) @@ -1967,7 +1967,7 @@ EXPORT_SYMBOL(tcp_v4_do_rcv); int tcp_v4_early_demux(struct sk_buff *skb) { - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); const struct iphdr *iph; const struct tcphdr *th; struct sock *sk; @@ -2178,7 +2178,7 @@ static void tcp_v4_fill_cb(struct sk_buff *skb, const struct iphdr *iph, int tcp_v4_rcv(struct sk_buff *skb) { - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); enum skb_drop_reason drop_reason; int sdif = inet_sdif(skb); int dif = inet_iif(skb); diff --git a/net/ipv4/tcp_metrics.c b/net/ipv4/tcp_metrics.c index 95669935494ef8003a1877e2b86c76bd27307afd..4251670e328c83b55eff7bbda3cc3d97d78563a8 100644 --- a/net/ipv4/tcp_metrics.c +++ b/net/ipv4/tcp_metrics.c @@ -170,7 +170,7 @@ static struct tcp_metrics_block *tcpm_new(struct dst_entry *dst, bool reclaim = false; spin_lock_bh(&tcp_metrics_lock); - net = dev_net(dst->dev); + net = dev_net_rcu(dst->dev); /* While waiting for the spin-lock the cache might have been populated * with this entry and so we have to check again. @@ -273,7 +273,7 @@ static struct tcp_metrics_block *__tcp_get_metrics_req(struct request_sock *req, return NULL; } - net = dev_net(dst->dev); + net = dev_net_rcu(dst->dev); hash ^= net_hash_mix(net); hash = hash_32(hash, tcp_metrics_hash_log); @@ -318,7 +318,7 @@ static struct tcp_metrics_block *tcp_get_metrics(struct sock *sk, else return NULL; - net = dev_net(dst->dev); + net = dev_net_rcu(dst->dev); hash ^= net_hash_mix(net); hash = hash_32(hash, tcp_metrics_hash_log); diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 2debdf085a3b4d2452b2b316cb5368507b17efc8..429f8a5ab511b671aa405ae20f7c1b3163839779 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -376,7 +376,7 @@ static int tcp_v6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, { const struct ipv6hdr *hdr = (const struct ipv6hdr *)skb->data; const struct tcphdr *th = (struct tcphdr *)(skb->data+offset); - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); struct request_sock *fastopen; struct ipv6_pinfo *np; struct tcp_sock *tp; @@ -868,7 +868,7 @@ static void tcp_v6_send_response(const struct sock *sk, struct sk_buff *skb, u32 struct tcphdr *t1; struct sk_buff *buff; struct flowi6 fl6; - struct net *net = sk ? sock_net(sk) : dev_net(skb_dst(skb)->dev); + struct net *net = sk ? sock_net(sk) : dev_net_rcu(skb_dst(skb)->dev); struct sock *ctl_sk = net->ipv6.tcp_sk; unsigned int tot_len = sizeof(struct tcphdr); __be32 mrst = 0, *topt; @@ -1039,7 +1039,7 @@ static void tcp_v6_send_reset(const struct sock *sk, struct sk_buff *skb, if (!sk && !ipv6_unicast_destination(skb)) return; - net = sk ? sock_net(sk) : dev_net(skb_dst(skb)->dev); + net = sk ? sock_net(sk) : dev_net_rcu(skb_dst(skb)->dev); /* Invalid TCP option size or twice included auth */ if (tcp_parse_auth_options(th, &md5_hash_location, &aoh)) return; @@ -1744,6 +1744,7 @@ static void tcp_v6_fill_cb(struct sk_buff *skb, const struct ipv6hdr *hdr, INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_buff *skb) { + struct net *net = dev_net_rcu(skb->dev); enum skb_drop_reason drop_reason; int sdif = inet6_sdif(skb); int dif = inet6_iif(skb); @@ -1753,7 +1754,6 @@ INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_buff *skb) bool refcounted; int ret; u32 isn; - struct net *net = dev_net(skb->dev); drop_reason = SKB_DROP_REASON_NOT_SPECIFIED; if (skb->pkt_type != PACKET_HOST) @@ -2004,7 +2004,7 @@ INDIRECT_CALLABLE_SCOPE int tcp_v6_rcv(struct sk_buff *skb) void tcp_v6_early_demux(struct sk_buff *skb) { - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); const struct ipv6hdr *hdr; const struct tcphdr *th; struct sock *sk; From patchwork Tue Feb 4 13:23:48 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959190 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qv1-f73.google.com (mail-qv1-f73.google.com [209.85.219.73]) (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 E9F8021A456 for ; Tue, 4 Feb 2025 13:24:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675456; cv=none; b=YNe8t76TGNA19joWTApA4qZnmooeTnmzz91eJfR9KJBU2Zmj4Zr3yUgWJ1sUitJL8iGqjvU72YYW47Fu36ifJ6Bkp9EK+joZ1cRcQL9X9a7PD1b5dDRd70IxHtHbo7kj7tSpe37GBws5DxfyBFjwvOUTUx9ytDTndOOCzv/9Aho= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675456; c=relaxed/simple; bh=6G9sTXBUqjV7uayq5LLEmA1X8vMgYBif8jKVAafOP5s=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=L7Dc9Ccz1wEdUyQk9GoN72crkTxKtG15n6olK2E5OlGIAjhl48L5CkHZB3UA381UV+KG61GY07IKLnqlDsh7kk9VTkQ81/X7nhfMDTtCMue9pMWTBNlu3ChiaL02Mj5YoqnACcngJ/NNZW/laXxlln8Z0IcyjpIbND2cnK0EdHo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=wPyAInzF; arc=none smtp.client-ip=209.85.219.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="wPyAInzF" Received: by mail-qv1-f73.google.com with SMTP id 6a1803df08f44-6d8f6903d2eso99645196d6.2 for ; Tue, 04 Feb 2025 05:24:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675454; x=1739280254; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=7epxpWBxPCncrKulKuyPm2yvwQ/qpoNphkrVwet06Pw=; b=wPyAInzFy5z7WoQhxaFIquz8x+IaeW9QDUYT2F+byeEdVNSGpsahrtRJXi2wqkAnY+ jzcMOudW/NN1Wft6JNTia41floLXwXPwn4qCiik65sTnxXuGc8oED+egQ0M23m9mI4di /2U6m/TQqYcb1WMY2dXemo08ffFNus06TIo/ddQ5CLaORsDZGI1iK5zjEW0YjBQTwzBK WsWr6/zgqZ9KXTlqk9IZvgQQPm9qNQb4rerdfACdDleC9FGMZDMGoh01kNmZGwc3hmLj OoarH8Y5rYE7W3avs3P6pF7oRG1sYKtEVrOjzJOCBBiv1+OLFOcYCeLwYyPFIaw7NPMO gTYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675454; x=1739280254; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=7epxpWBxPCncrKulKuyPm2yvwQ/qpoNphkrVwet06Pw=; b=dJYefefBV4kgyLF3QTwtN6rcBCHvwEHPY+t+bh8QVpS1F+cb8tFgIUSX3TrffGvkbe UYjRc6Ln6lymc8H5tCN552Q0NJkSUngyQoG2EpPJAw+4rC9TbhfjJx0RTbRwJ+D5Qbio remZ1LgphsYRjYqC9yO7ecab+/+3hANMwgmq4EcvrNs1DpRyGXFAwS2mqRKRj3Dzsjp/ hf0i048cOBkbc59vfSewxyk108nwdB6Q8ZxSqGvtrbvbbBTbMACSuKDmezXMiBKSlvCl eeoQWVmWrYJhfknUiGD9HKDy2G5n9pdy73StTWgT3/mYjcCHyLqAVccWVxflU5AFxZe5 /tNQ== X-Gm-Message-State: AOJu0YwXzb6toD1DK4UlgtYxyLW3joXuoVK0Ho2caUgLmzPCd86s7Jgf KwUxMgv7sd6MdzTT/9osJQgme+OsPZm2DZWz0hMd7u6nuj5n1KdIIjdgGtNwjTfR0eoYkiR7Oua AT+IRteB9zA== X-Google-Smtp-Source: AGHT+IFa8C1qDj2xhuG/FhZszn5/uaY4iP+nFoBuua7adgpHRamRpTFEfafRpKd15AzZseCIKaeXRTKGpZTB4A== X-Received: from qvbkr3.prod.google.com ([2002:a05:6214:2b83:b0:6e1:e24c:9bf3]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6214:21ad:b0:6d8:848e:76c8 with SMTP id 6a1803df08f44-6e243c7e244mr394050346d6.42.1738675454015; Tue, 04 Feb 2025 05:24:14 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:48 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-8-edumazet@google.com> Subject: [PATCH v3 net 07/16] net: gro: convert four dev_net() calls From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org tcp4_check_fraglist_gro(), tcp6_check_fraglist_gro(), udp4_gro_lookup_skb() and udp6_gro_lookup_skb() assume RCU is held so that the net structure does not disappear. Use dev_net_rcu() instead of dev_net() to get LOCKDEP support. Signed-off-by: Eric Dumazet Reviewed-by: Kuniyuki Iwashima --- net/ipv4/tcp_offload.c | 2 +- net/ipv4/udp_offload.c | 2 +- net/ipv6/tcpv6_offload.c | 2 +- net/ipv6/udp_offload.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/net/ipv4/tcp_offload.c b/net/ipv4/tcp_offload.c index 2308665b51c5388814e5b61a262a1636d897c4a9..ecef16c58c07146cbeebade0620a5ec7251ddbc5 100644 --- a/net/ipv4/tcp_offload.c +++ b/net/ipv4/tcp_offload.c @@ -425,7 +425,7 @@ static void tcp4_check_fraglist_gro(struct list_head *head, struct sk_buff *skb, inet_get_iif_sdif(skb, &iif, &sdif); iph = skb_gro_network_header(skb); - net = dev_net(skb->dev); + net = dev_net_rcu(skb->dev); sk = __inet_lookup_established(net, net->ipv4.tcp_death_row.hashinfo, iph->saddr, th->source, iph->daddr, ntohs(th->dest), diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c index a5be6e4ed326fbdc6a9b3889db4da903f7f25d37..c1a85b300ee87758ee683a834248a600a3e7f18d 100644 --- a/net/ipv4/udp_offload.c +++ b/net/ipv4/udp_offload.c @@ -630,7 +630,7 @@ static struct sock *udp4_gro_lookup_skb(struct sk_buff *skb, __be16 sport, __be16 dport) { const struct iphdr *iph = skb_gro_network_header(skb); - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); int iif, sdif; inet_get_iif_sdif(skb, &iif, &sdif); diff --git a/net/ipv6/tcpv6_offload.c b/net/ipv6/tcpv6_offload.c index a45bf17cb2a172d4612cb42f51481b97bbf364cd..91b88daa5b555cb1af591db7680b7d829ce7b1b7 100644 --- a/net/ipv6/tcpv6_offload.c +++ b/net/ipv6/tcpv6_offload.c @@ -35,7 +35,7 @@ static void tcp6_check_fraglist_gro(struct list_head *head, struct sk_buff *skb, inet6_get_iif_sdif(skb, &iif, &sdif); hdr = skb_gro_network_header(skb); - net = dev_net(skb->dev); + net = dev_net_rcu(skb->dev); sk = __inet6_lookup_established(net, net->ipv4.tcp_death_row.hashinfo, &hdr->saddr, th->source, &hdr->daddr, ntohs(th->dest), diff --git a/net/ipv6/udp_offload.c b/net/ipv6/udp_offload.c index b41152dd424697a9fc3cef13fbb430de49dcb913..404212dfc99abba4d48fc27a574b48ab53731d39 100644 --- a/net/ipv6/udp_offload.c +++ b/net/ipv6/udp_offload.c @@ -117,7 +117,7 @@ static struct sock *udp6_gro_lookup_skb(struct sk_buff *skb, __be16 sport, __be16 dport) { const struct ipv6hdr *iph = skb_gro_network_header(skb); - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); int iif, sdif; inet6_get_iif_sdif(skb, &iif, &sdif); From patchwork Tue Feb 4 13:23:49 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959191 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qv1-f73.google.com (mail-qv1-f73.google.com [209.85.219.73]) (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 4DE6D21A45D for ; Tue, 4 Feb 2025 13:24:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675458; cv=none; b=ToE3Ra0b39EF76C/la3voxIEgloLr51NdQFI5H+G1211bmk6QzNsXy+j03+ardfNgVQZe6aUYdkIcxkDey27v4jgEAnvtJMv1pULumlxLXTgENihGfeWwy2qLEcfoMD8f3Ge4RJlcQfEx5GhuwKe3E7qy3QjS+IpQuQTXtDdv5M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675458; c=relaxed/simple; bh=rteRAK8u2cYuSPdsdFOuXbtGScv+u9pINXmSOxOYqEw=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=AJRa77NYxEiF7JJLAXFxmoksPYtDzLSYzY23+p2MM5E//eYcq+5e23f0ziCCrUqlgc01apeS0SPJ6YP4anOsLlrNVjqsXd9dNXbRY/BuRGzM2u/j5lMJmTCy3GAIVNiTnHweEpy4FppDeGYbmUpcjgbhlqPVB1bzpihxHee0exc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=VVrrh71S; arc=none smtp.client-ip=209.85.219.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="VVrrh71S" Received: by mail-qv1-f73.google.com with SMTP id 6a1803df08f44-6e42d3a0638so632456d6.1 for ; Tue, 04 Feb 2025 05:24:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675455; x=1739280255; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=K75MRH5r6VIew1gMzCEXzzdkS9dRmi/YhLuN/XRo0eE=; b=VVrrh71SAZbSxCZfoM0rq0U6uwyj4rFtE4CZKPCQ5AjvpIQ1XQZndVPASXbflw5GqP giI9ZAGhD9IJ4+lDONuLfD8uH6elDI+3ZYwVygBuYmqNhaIsEx6ZLGvM8wPt/nkuO/Bd 7RZLtmCm9bYa6FoI5LeFn/TIX3/N6kTeMQexLc03pUOVZBUjhOX9oDNWzgT4tkUA7pxe 3SsU/7FoLUVzOyk0/oBrtCrC1GAfpfcTV9N7b+RieG7dsXOePOl3FTX23kTPvpPDlcDp Y5AaTXIqC8pYuLz8eb5vXoKAL2Al7saTPKq0fZxV7UYJGMM5qp615Rkbj171ImgRK1LN 2q1A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675455; x=1739280255; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=K75MRH5r6VIew1gMzCEXzzdkS9dRmi/YhLuN/XRo0eE=; b=ZKYtfczZuwTeue2nMe7F6s0AAbk9EzsdT0T1ro+XaZYhZ8kFh5pajfpUmD6UrHQrpo ZsmtMQny04vK43gRyz2kb7h1iN/7uF70T4hYeYjuWIvM78q/xBnpl4uptdh5RRPA0fTb WWZErtn/XOhW8Tw2vhHo46R76RDo2W3qP8v4lw6olh3giTBWB6bShcdOhYYbVmMXZk4C PV858V1awVGvENQ27/jREysB2BkXIHdcmJIJke6bwlFTKy5ebx8eR+JRDpkTka9rhCh8 VImIXMQBsdpl98oDXmP4UgXhOijIcAa4zPm3nhtEm2ZWmBUQwIyXU9sS5zHIZiqNeStY h8kA== X-Gm-Message-State: AOJu0Ywe6uLj3lg6ngriyoP0vCBEqzZHAUwQdvnL/XdJ2o+S0Yx1WvM3 N6BePVR4Jy+rMcd2bx9Ds0JrmKJZovuLO8b03PsnGLMq6ID8H7176C7kM0rfWQtXDz5l3BHNe3F buecP6BEO5g== X-Google-Smtp-Source: AGHT+IGi2UYqppCsHmgFuLCnuQ/4R4KWXlO5AS4tUFrWu89V/KlCBpAepVHFeIo5G0oeDvqpf0RuIo2OG+LcGQ== X-Received: from qvbme13.prod.google.com ([2002:a05:6214:5d0d:b0:6e2:49f5:b16c]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6214:2a84:b0:6e1:700e:488a with SMTP id 6a1803df08f44-6e243bf41c8mr392738546d6.22.1738675455285; Tue, 04 Feb 2025 05:24:15 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:49 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-9-edumazet@google.com> Subject: [PATCH v3 net 08/16] udp: convert to dev_net_rcu() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org UDP uses of dev_net() are safe, change them to dev_net_rcu() to get LOCKDEP support. Signed-off-by: Eric Dumazet Reviewed-by: Kuniyuki Iwashima --- net/ipv4/udp.c | 19 ++++++++++--------- net/ipv6/udp.c | 18 +++++++++--------- 2 files changed, 19 insertions(+), 18 deletions(-) diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c index a9bb9ce5438eaa9f9ceede1e4ac080dc6ab74588..fc1e37eb49190cb7e2671ebd54ac4fca54b77ac2 100644 --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -750,7 +750,7 @@ static inline struct sock *__udp4_lib_lookup_skb(struct sk_buff *skb, { const struct iphdr *iph = ip_hdr(skb); - return __udp4_lib_lookup(dev_net(skb->dev), iph->saddr, sport, + return __udp4_lib_lookup(dev_net_rcu(skb->dev), iph->saddr, sport, iph->daddr, dport, inet_iif(skb), inet_sdif(skb), udptable, skb); } @@ -760,7 +760,7 @@ struct sock *udp4_lib_lookup_skb(const struct sk_buff *skb, { const u16 offset = NAPI_GRO_CB(skb)->network_offsets[skb->encapsulation]; const struct iphdr *iph = (struct iphdr *)(skb->data + offset); - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); int iif, sdif; inet_get_iif_sdif(skb, &iif, &sdif); @@ -934,13 +934,13 @@ int __udp4_lib_err(struct sk_buff *skb, u32 info, struct udp_table *udptable) struct inet_sock *inet; const struct iphdr *iph = (const struct iphdr *)skb->data; struct udphdr *uh = (struct udphdr *)(skb->data+(iph->ihl<<2)); + struct net *net = dev_net_rcu(skb->dev); const int type = icmp_hdr(skb)->type; const int code = icmp_hdr(skb)->code; bool tunnel = false; struct sock *sk; int harderr; int err; - struct net *net = dev_net(skb->dev); sk = __udp4_lib_lookup(net, iph->daddr, uh->dest, iph->saddr, uh->source, skb->dev->ifindex, @@ -1025,7 +1025,7 @@ int __udp4_lib_err(struct sk_buff *skb, u32 info, struct udp_table *udptable) int udp_err(struct sk_buff *skb, u32 info) { - return __udp4_lib_err(skb, info, dev_net(skb->dev)->ipv4.udp_table); + return __udp4_lib_err(skb, info, dev_net_rcu(skb->dev)->ipv4.udp_table); } /* @@ -2466,7 +2466,7 @@ static int udp_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) udp_post_segment_fix_csum(skb); ret = udp_queue_rcv_one_skb(sk, skb); if (ret > 0) - ip_protocol_deliver_rcu(dev_net(skb->dev), skb, ret); + ip_protocol_deliver_rcu(dev_net_rcu(skb->dev), skb, ret); } return 0; } @@ -2632,12 +2632,12 @@ static int udp_unicast_rcv_skb(struct sock *sk, struct sk_buff *skb, int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, int proto) { + struct net *net = dev_net_rcu(skb->dev); + struct rtable *rt = skb_rtable(skb); struct sock *sk = NULL; struct udphdr *uh; unsigned short ulen; - struct rtable *rt = skb_rtable(skb); __be32 saddr, daddr; - struct net *net = dev_net(skb->dev); bool refcounted; int drop_reason; @@ -2804,7 +2804,7 @@ static struct sock *__udp4_lib_demux_lookup(struct net *net, int udp_v4_early_demux(struct sk_buff *skb) { - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); struct in_device *in_dev = NULL; const struct iphdr *iph; const struct udphdr *uh; @@ -2873,7 +2873,8 @@ int udp_v4_early_demux(struct sk_buff *skb) int udp_rcv(struct sk_buff *skb) { - return __udp4_lib_rcv(skb, dev_net(skb->dev)->ipv4.udp_table, IPPROTO_UDP); + return __udp4_lib_rcv(skb, dev_net_rcu(skb->dev)->ipv4.udp_table, + IPPROTO_UDP); } void udp_destroy_sock(struct sock *sk) diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c index c6ea438b5c7588edd2971997f21382c26446a45c..d0b8f724e4362ec35352dae547e916c912716cab 100644 --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -410,7 +410,7 @@ static struct sock *__udp6_lib_lookup_skb(struct sk_buff *skb, { const struct ipv6hdr *iph = ipv6_hdr(skb); - return __udp6_lib_lookup(dev_net(skb->dev), &iph->saddr, sport, + return __udp6_lib_lookup(dev_net_rcu(skb->dev), &iph->saddr, sport, &iph->daddr, dport, inet6_iif(skb), inet6_sdif(skb), udptable, skb); } @@ -420,7 +420,7 @@ struct sock *udp6_lib_lookup_skb(const struct sk_buff *skb, { const u16 offset = NAPI_GRO_CB(skb)->network_offsets[skb->encapsulation]; const struct ipv6hdr *iph = (struct ipv6hdr *)(skb->data + offset); - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); int iif, sdif; inet6_get_iif_sdif(skb, &iif, &sdif); @@ -702,16 +702,16 @@ int __udp6_lib_err(struct sk_buff *skb, struct inet6_skb_parm *opt, u8 type, u8 code, int offset, __be32 info, struct udp_table *udptable) { - struct ipv6_pinfo *np; const struct ipv6hdr *hdr = (const struct ipv6hdr *)skb->data; const struct in6_addr *saddr = &hdr->saddr; const struct in6_addr *daddr = seg6_get_daddr(skb, opt) ? : &hdr->daddr; struct udphdr *uh = (struct udphdr *)(skb->data+offset); + struct net *net = dev_net_rcu(skb->dev); + struct ipv6_pinfo *np; bool tunnel = false; struct sock *sk; int harderr; int err; - struct net *net = dev_net(skb->dev); sk = __udp6_lib_lookup(net, daddr, uh->dest, saddr, uh->source, inet6_iif(skb), inet6_sdif(skb), udptable, NULL); @@ -818,7 +818,7 @@ static __inline__ int udpv6_err(struct sk_buff *skb, u8 code, int offset, __be32 info) { return __udp6_lib_err(skb, opt, type, code, offset, info, - dev_net(skb->dev)->ipv4.udp_table); + dev_net_rcu(skb->dev)->ipv4.udp_table); } static int udpv6_queue_rcv_one_skb(struct sock *sk, struct sk_buff *skb) @@ -929,7 +929,7 @@ static int udpv6_queue_rcv_skb(struct sock *sk, struct sk_buff *skb) udp_post_segment_fix_csum(skb); ret = udpv6_queue_rcv_one_skb(sk, skb); if (ret > 0) - ip6_protocol_deliver_rcu(dev_net(skb->dev), skb, ret, + ip6_protocol_deliver_rcu(dev_net_rcu(skb->dev), skb, ret, true); } return 0; @@ -1071,8 +1071,8 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, int proto) { enum skb_drop_reason reason = SKB_DROP_REASON_NOT_SPECIFIED; + struct net *net = dev_net_rcu(skb->dev); const struct in6_addr *saddr, *daddr; - struct net *net = dev_net(skb->dev); struct sock *sk = NULL; struct udphdr *uh; bool refcounted; @@ -1220,7 +1220,7 @@ static struct sock *__udp6_lib_demux_lookup(struct net *net, void udp_v6_early_demux(struct sk_buff *skb) { - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); const struct udphdr *uh; struct sock *sk; struct dst_entry *dst; @@ -1262,7 +1262,7 @@ void udp_v6_early_demux(struct sk_buff *skb) INDIRECT_CALLABLE_SCOPE int udpv6_rcv(struct sk_buff *skb) { - return __udp6_lib_rcv(skb, dev_net(skb->dev)->ipv4.udp_table, IPPROTO_UDP); + return __udp6_lib_rcv(skb, dev_net_rcu(skb->dev)->ipv4.udp_table, IPPROTO_UDP); } /* From patchwork Tue Feb 4 13:23:50 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959192 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qv1-f74.google.com (mail-qv1-f74.google.com [209.85.219.74]) (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 A492721A953 for ; Tue, 4 Feb 2025 13:24:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675459; cv=none; b=WTq1B0XyB3zOtgBDgY658/moFBybRuWcirdqlpIF63NZ7zuuaVvS1+peUdnBs33wCTSrW6n394K+HRaF8ClAOXnb8r8X8X/Q3JNGV3wV5WJXJoQLaCYxLAfiiRL+K2WwN9DaC4ZIYN/oF5ElzOE7oXdKrZFQeuEyhoQns5Z/3CM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675459; c=relaxed/simple; bh=vDaWHHNgn1bWEPl0PRv7zsig9RoElCDHRaoQj0cC/Q4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=XMLY100w7dtTtHC3LDgwSR+sgULtRaQ8efIYshq8r99JdhVKxunfNpqzAuoyQERiXX5oG4Kt9Htfek4VOX4QOACyf0QAewX0O8bZ2rkskT0fqiintaCcnD2oQSOOB0fjeVj0P77WPS/7cnMtHqUqG2Yl5/Vy4oxtfFZvwctZUJc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=T1hlE/fg; arc=none smtp.client-ip=209.85.219.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="T1hlE/fg" Received: by mail-qv1-f74.google.com with SMTP id 6a1803df08f44-6e429a54eb4so10866616d6.1 for ; Tue, 04 Feb 2025 05:24:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675456; x=1739280256; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=e3VvVkXoQOBpW0WsqT7kuoRLQqr+20O8tQ41NFxntCc=; b=T1hlE/fgwL4Uo/Wv2DxRLKjdT2U75awIkAbZ62zBAz7JSI0UMHOmEUOIIIUY64dN6i mBrVQOjaMtatK0ehWTbHA1oQRldllO2n+JxTMIK59QjVwlGf+b/PtFZ7mVKSIF+62g+E RIUqq1s8sGQ0ev5GIey3N9LzQy+WzQ9Z/nduRRP1iptXjGpSXkOSX/VtXR6p7WPmhPTe lBd5Q5b9juG0xVPXk/bskkul3MZiFUqSAlremm3bjFkY7L0M9xh8cFALhi4b/57xAkBP bG9vPrELx0Sx9up65y30Gaj/NbJeoGW939v51zch0/6Qm7F/APeyz5wNm4FBmt8NBQGd g4tQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675456; x=1739280256; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=e3VvVkXoQOBpW0WsqT7kuoRLQqr+20O8tQ41NFxntCc=; b=lY+sc9GQENih32RXarDZ2V9cUSW41jtj86bC3x+yymrU2zmtIR77BQWFj3B8q072om M+ebQ0w0/zFCFORhFskf0mNlegx95h54XwzFwvj70NpuindcqmYylhsbluwa80DNFL3e c458kf8scWR+3hza7yrGqCiEk/F7AhCn/j/boTjcFvIrfw4W23NCr2rmr4NCJtRBGZS6 ltrwujft4spiyGlXtYs7t3+OVBd82v+f4KmtC/8ZckgEtH0nFFxXFvIVXPx1d2ryky5V qYJBnbNXEVv/2W2RAYUtnR3lyE5nOMp2wY3FcIFYcOyb0hD3wjp9mu+JyBu72r2os2wB oB2w== X-Gm-Message-State: AOJu0YyTsRoV26ty6uZIdxg87/7ZGRdv1O9rlS21gPPcQ866xZYYvlcD GAth8dKu+ZpM2/fsEzBV78hpghQP5naZLRLeDx4tmPX455Apv6fXZkbf2MWcHlnr+Ta0TW+m/TY Exi2989rUng== X-Google-Smtp-Source: AGHT+IHCzQVobjIXcaP7X1ut3axs79RKGXSED0PCQzkmaz2qhfAJjQZahb6jw8FSti9ZcRm0/G1eVxfBRfoUfA== X-Received: from qvbmy3.prod.google.com ([2002:a05:6214:2e43:b0:6d8:eaf4:9e3c]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6214:240c:b0:6d8:6a74:ae68 with SMTP id 6a1803df08f44-6e243ca87c6mr310960186d6.29.1738675456632; Tue, 04 Feb 2025 05:24:16 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:50 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-10-edumazet@google.com> Subject: [PATCH v3 net 09/16] ipv4: icmp: convert to dev_net_rcu() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org __icmp_send() must ensure rcu_read_lock() is held, as spotted by Jakub. Other ICMP uses of dev_net() seem safe, change them to dev_net_rcu() to get LOCKDEP support. Fixes: dde1bc0e6f86 ("[NETNS]: Add namespace for ICMP replying code.") Closes: https://lore.kernel.org/netdev/20250203153633.46ce0337@kernel.org/ Reported-by: Jakub Kicinski Signed-off-by: Eric Dumazet --- net/ipv4/icmp.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index 094084b61bff8a17c4e85c99019b84e9cba21599..5482edb5aade2bc25a39d75ab16feba476bb08ac 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c @@ -399,10 +399,10 @@ static void icmp_push_reply(struct sock *sk, static void icmp_reply(struct icmp_bxm *icmp_param, struct sk_buff *skb) { - struct ipcm_cookie ipc; struct rtable *rt = skb_rtable(skb); - struct net *net = dev_net(rt->dst.dev); + struct net *net = dev_net_rcu(rt->dst.dev); bool apply_ratelimit = false; + struct ipcm_cookie ipc; struct flowi4 fl4; struct sock *sk; struct inet_sock *inet; @@ -608,12 +608,14 @@ void __icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info, struct sock *sk; if (!rt) - goto out; + return; + + rcu_read_lock(); if (rt->dst.dev) - net = dev_net(rt->dst.dev); + net = dev_net_rcu(rt->dst.dev); else if (skb_in->dev) - net = dev_net(skb_in->dev); + net = dev_net_rcu(skb_in->dev); else goto out; @@ -785,7 +787,8 @@ void __icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info, icmp_xmit_unlock(sk); out_bh_enable: local_bh_enable(); -out:; +out: + rcu_read_unlock(); } EXPORT_SYMBOL(__icmp_send); @@ -834,7 +837,7 @@ static void icmp_socket_deliver(struct sk_buff *skb, u32 info) * avoid additional coding at protocol handlers. */ if (!pskb_may_pull(skb, iph->ihl * 4 + 8)) { - __ICMP_INC_STATS(dev_net(skb->dev), ICMP_MIB_INERRORS); + __ICMP_INC_STATS(dev_net_rcu(skb->dev), ICMP_MIB_INERRORS); return; } @@ -868,7 +871,7 @@ static enum skb_drop_reason icmp_unreach(struct sk_buff *skb) struct net *net; u32 info = 0; - net = dev_net(skb_dst(skb)->dev); + net = dev_net_rcu(skb_dst(skb)->dev); /* * Incomplete header ? @@ -979,7 +982,7 @@ static enum skb_drop_reason icmp_unreach(struct sk_buff *skb) static enum skb_drop_reason icmp_redirect(struct sk_buff *skb) { if (skb->len < sizeof(struct iphdr)) { - __ICMP_INC_STATS(dev_net(skb->dev), ICMP_MIB_INERRORS); + __ICMP_INC_STATS(dev_net_rcu(skb->dev), ICMP_MIB_INERRORS); return SKB_DROP_REASON_PKT_TOO_SMALL; } @@ -1011,7 +1014,7 @@ static enum skb_drop_reason icmp_echo(struct sk_buff *skb) struct icmp_bxm icmp_param; struct net *net; - net = dev_net(skb_dst(skb)->dev); + net = dev_net_rcu(skb_dst(skb)->dev); /* should there be an ICMP stat for ignored echos? */ if (READ_ONCE(net->ipv4.sysctl_icmp_echo_ignore_all)) return SKB_NOT_DROPPED_YET; @@ -1040,9 +1043,9 @@ static enum skb_drop_reason icmp_echo(struct sk_buff *skb) bool icmp_build_probe(struct sk_buff *skb, struct icmphdr *icmphdr) { + struct net *net = dev_net_rcu(skb->dev); struct icmp_ext_hdr *ext_hdr, _ext_hdr; struct icmp_ext_echo_iio *iio, _iio; - struct net *net = dev_net(skb->dev); struct inet6_dev *in6_dev; struct in_device *in_dev; struct net_device *dev; @@ -1181,7 +1184,7 @@ static enum skb_drop_reason icmp_timestamp(struct sk_buff *skb) return SKB_NOT_DROPPED_YET; out_err: - __ICMP_INC_STATS(dev_net(skb_dst(skb)->dev), ICMP_MIB_INERRORS); + __ICMP_INC_STATS(dev_net_rcu(skb_dst(skb)->dev), ICMP_MIB_INERRORS); return SKB_DROP_REASON_PKT_TOO_SMALL; } @@ -1198,7 +1201,7 @@ int icmp_rcv(struct sk_buff *skb) { enum skb_drop_reason reason = SKB_DROP_REASON_NOT_SPECIFIED; struct rtable *rt = skb_rtable(skb); - struct net *net = dev_net(rt->dst.dev); + struct net *net = dev_net_rcu(rt->dst.dev); struct icmphdr *icmph; if (!xfrm4_policy_check(NULL, XFRM_POLICY_IN, skb)) { @@ -1371,9 +1374,9 @@ int icmp_err(struct sk_buff *skb, u32 info) struct iphdr *iph = (struct iphdr *)skb->data; int offset = iph->ihl<<2; struct icmphdr *icmph = (struct icmphdr *)(skb->data + offset); + struct net *net = dev_net_rcu(skb->dev); int type = icmp_hdr(skb)->type; int code = icmp_hdr(skb)->code; - struct net *net = dev_net(skb->dev); /* * Use ping_err to handle all icmp errors except those From patchwork Tue Feb 4 13:23:51 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959213 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qt1-f201.google.com (mail-qt1-f201.google.com [209.85.160.201]) (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 ED73121ADAE for ; Tue, 4 Feb 2025 13:24:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675460; cv=none; b=R6P8dzMHxrTg9tQRwN4F8tgVdpkv6RxeKnoEwEOLIfquYIgiS4mr1Cccv0/PiX/aUgRtRjm355ug6hauvp4ILSDkaANn1ooqdYNmC0Xg35qebzHBCnYPzdXJgyegNHHeKVvvCKAJBxqKOkCii5Md01iwh5Vbrdg1/PITp6YoYsI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675460; c=relaxed/simple; bh=U2kX53Sg+dT2QzomNtvGlbWRO8/OdC8wBUIn0TCpjBM=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=dIujO+gL2y5t0uataApECPxRzlTRppfpZ3gM+9v33hZ1tXmMat8wOj/p6GYexx5RqnKDKmnm3uXueoUcUG1sifszRqAFBrJ2uNGDnOjM+UcE5wakTq+w8Zk5lVjf0St5AgArEPDUtN9BLWKL2PYDIm8SsDFQi9Z/fOng5AXHnso= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=kKZcT+w3; arc=none smtp.client-ip=209.85.160.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="kKZcT+w3" Received: by mail-qt1-f201.google.com with SMTP id d75a77b69052e-467a4f0b53bso193816041cf.3 for ; Tue, 04 Feb 2025 05:24:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675458; x=1739280258; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=zszYcJFJYdWef4gkJGhQ49R4MBi7sue+kr7ORa+aE30=; b=kKZcT+w3/rCfgHdN7v4kBBS/p24eP5PtBOms9U/3u8p3ews6jRcoET/OS810uT/qkW KT+Oj5ocWItshGqXIMpofGCRjaom+Xx6SYO9agjh+I7hp6JfCwsguwfeIzWlRQTWzaZW r763M0QDlpZkLnLtOiGthuwXe2Ur1HSByL9ol/42+hEyCLGv3iXnGiMnAQ31kR/9p/63 1hAnHkypMG7F9/eboUSSwkQNGiOYR64fPG+KBcJ10+Pe6dmNjaiQR21kkRXeVjwP+BkG oWe/CwSlnQYbLgT9iu8EY1O+ryKaEYTzvLl75gAMBUcizSTW3x1+x9MGSkcKt9pOGdCf zYyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675458; x=1739280258; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=zszYcJFJYdWef4gkJGhQ49R4MBi7sue+kr7ORa+aE30=; b=xIENuPm+wFG7SY3yLx5gh6h8SXIELtikj6I1zhwsYa5FNCainYpB6ceVO+W6hQOzmu dAlb7vZvG8LaH0iMtZI3RyLhIKlHW+y+ABVs/J8nHDxZx5OlXq/V61u9wUBtZt4/oPXL ++efBiIO4iXGkw8cagxBNpJPQ//TdNVUOCsKJHgdNT7N0mab5X28r6aI7sCnxU5ycK6s pFCWKegFWtYR0PMHOID6P7VUXOC7VD/IY1WLfAEG9WGeAhoJeEP+eTBpIz7PUIOMXHAB zw/Ne6Ricdm+Y5kcybQGeeZG6gre2K9M0tUiaLykFE6Bb9f7eDYzdHF0lhrpx+RU0ZfK RlVw== X-Gm-Message-State: AOJu0YxrU4jmLRL02aN46YVsfCjZ6bOJO9RODbXlYcPtlocA6EMAjE9V JtCTIm9OOGSDm7r2/llyRE/ZV672BzjNIrRqcIUeITNf4sOqRFz9QnSmwJY+5mzyDEVC9vuilav 44hkPeTPRzg== X-Google-Smtp-Source: AGHT+IGc0brTd9OtU/ApZWduYdhIppkzehxQs9pstbdqDrSeAPGOFVHhRukbcE1mnkFe0Sn9oCPmDXjEnfz+zA== X-Received: from qtbfy14.prod.google.com ([2002:a05:622a:5a0e:b0:467:975e:1ead]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:622a:181e:b0:467:6486:beea with SMTP id d75a77b69052e-46fd0b6dfb7mr411721781cf.38.1738675457921; Tue, 04 Feb 2025 05:24:17 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:51 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-11-edumazet@google.com> Subject: [PATCH v3 net 10/16] ipv6: icmp: convert to dev_net_rcu() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org icmp6_send() must acquire rcu_read_lock() sooner to ensure the dev_net() call done from a safe context. Other ICMPv6 uses of dev_net() seem safe, change them to dev_net_rcu() to get LOCKDEP support to catch bugs. Fixes: 9a43b709a230 ("[NETNS][IPV6] icmp6 - make icmpv6_socket per namespace") Signed-off-by: Eric Dumazet --- net/ipv6/icmp.c | 42 +++++++++++++++++++++++------------------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index a6984a29fdb9dd972a11ca9f8d5e794c443bac6f..4d14ab7f7e99f152cd5f5adaa023f0280957f275 100644 --- a/net/ipv6/icmp.c +++ b/net/ipv6/icmp.c @@ -76,7 +76,7 @@ static int icmpv6_err(struct sk_buff *skb, struct inet6_skb_parm *opt, { /* icmpv6_notify checks 8 bytes can be pulled, icmp6hdr is 8 bytes */ struct icmp6hdr *icmp6 = (struct icmp6hdr *) (skb->data + offset); - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); if (type == ICMPV6_PKT_TOOBIG) ip6_update_pmtu(skb, net, info, skb->dev->ifindex, 0, sock_net_uid(net, NULL)); @@ -473,7 +473,10 @@ void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info, if (!skb->dev) return; - net = dev_net(skb->dev); + + rcu_read_lock(); + + net = dev_net_rcu(skb->dev); mark = IP6_REPLY_MARK(net, skb->mark); /* * Make sure we respect the rules @@ -496,7 +499,7 @@ void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info, !(type == ICMPV6_PARAMPROB && code == ICMPV6_UNK_OPTION && (opt_unrec(skb, info)))) - return; + goto out; saddr = NULL; } @@ -526,7 +529,7 @@ void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info, if ((addr_type == IPV6_ADDR_ANY) || (addr_type & IPV6_ADDR_MULTICAST)) { net_dbg_ratelimited("icmp6_send: addr_any/mcast source [%pI6c > %pI6c]\n", &hdr->saddr, &hdr->daddr); - return; + goto out; } /* @@ -535,7 +538,7 @@ void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info, if (is_ineligible(skb)) { net_dbg_ratelimited("icmp6_send: no reply to icmp error [%pI6c > %pI6c]\n", &hdr->saddr, &hdr->daddr); - return; + goto out; } /* Needed by both icmpv6_global_allow and icmpv6_xmit_lock */ @@ -582,7 +585,7 @@ void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info, np = inet6_sk(sk); if (!icmpv6_xrlim_allow(sk, type, &fl6, apply_ratelimit)) - goto out; + goto out_unlock; tmp_hdr.icmp6_type = type; tmp_hdr.icmp6_code = code; @@ -600,7 +603,7 @@ void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info, dst = icmpv6_route_lookup(net, skb, sk, &fl6); if (IS_ERR(dst)) - goto out; + goto out_unlock; ipc6.hlimit = ip6_sk_dst_hoplimit(np, &fl6, dst); @@ -616,7 +619,6 @@ void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info, goto out_dst_release; } - rcu_read_lock(); idev = __in6_dev_get(skb->dev); if (ip6_append_data(sk, icmpv6_getfrag, &msg, @@ -630,13 +632,15 @@ void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info, icmpv6_push_pending_frames(sk, &fl6, &tmp_hdr, len + sizeof(struct icmp6hdr)); } - rcu_read_unlock(); + out_dst_release: dst_release(dst); -out: +out_unlock: icmpv6_xmit_unlock(sk); out_bh_enable: local_bh_enable(); +out: + rcu_read_unlock(); } EXPORT_SYMBOL(icmp6_send); @@ -679,8 +683,8 @@ int ip6_err_gen_icmpv6_unreach(struct sk_buff *skb, int nhs, int type, skb_pull(skb2, nhs); skb_reset_network_header(skb2); - rt = rt6_lookup(dev_net(skb->dev), &ipv6_hdr(skb2)->saddr, NULL, 0, - skb, 0); + rt = rt6_lookup(dev_net_rcu(skb->dev), &ipv6_hdr(skb2)->saddr, + NULL, 0, skb, 0); if (rt && rt->dst.dev) skb2->dev = rt->dst.dev; @@ -717,7 +721,7 @@ EXPORT_SYMBOL(ip6_err_gen_icmpv6_unreach); static enum skb_drop_reason icmpv6_echo_reply(struct sk_buff *skb) { - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); struct sock *sk; struct inet6_dev *idev; struct ipv6_pinfo *np; @@ -832,7 +836,7 @@ enum skb_drop_reason icmpv6_notify(struct sk_buff *skb, u8 type, u8 code, __be32 info) { struct inet6_skb_parm *opt = IP6CB(skb); - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); const struct inet6_protocol *ipprot; enum skb_drop_reason reason; int inner_offset; @@ -889,7 +893,7 @@ enum skb_drop_reason icmpv6_notify(struct sk_buff *skb, u8 type, static int icmpv6_rcv(struct sk_buff *skb) { enum skb_drop_reason reason = SKB_DROP_REASON_NOT_SPECIFIED; - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); struct net_device *dev = icmp6_dev(skb); struct inet6_dev *idev = __in6_dev_get(dev); const struct in6_addr *saddr, *daddr; @@ -921,7 +925,7 @@ static int icmpv6_rcv(struct sk_buff *skb) skb_set_network_header(skb, nh); } - __ICMP6_INC_STATS(dev_net(dev), idev, ICMP6_MIB_INMSGS); + __ICMP6_INC_STATS(dev_net_rcu(dev), idev, ICMP6_MIB_INMSGS); saddr = &ipv6_hdr(skb)->saddr; daddr = &ipv6_hdr(skb)->daddr; @@ -939,7 +943,7 @@ static int icmpv6_rcv(struct sk_buff *skb) type = hdr->icmp6_type; - ICMP6MSGIN_INC_STATS(dev_net(dev), idev, type); + ICMP6MSGIN_INC_STATS(dev_net_rcu(dev), idev, type); switch (type) { case ICMPV6_ECHO_REQUEST: @@ -1034,9 +1038,9 @@ static int icmpv6_rcv(struct sk_buff *skb) csum_error: reason = SKB_DROP_REASON_ICMP_CSUM; - __ICMP6_INC_STATS(dev_net(dev), idev, ICMP6_MIB_CSUMERRORS); + __ICMP6_INC_STATS(dev_net_rcu(dev), idev, ICMP6_MIB_CSUMERRORS); discard_it: - __ICMP6_INC_STATS(dev_net(dev), idev, ICMP6_MIB_INERRORS); + __ICMP6_INC_STATS(dev_net_rcu(dev), idev, ICMP6_MIB_INERRORS); drop_no_count: kfree_skb_reason(skb, reason); return 0; From patchwork Tue Feb 4 13:23:52 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959214 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qv1-f74.google.com (mail-qv1-f74.google.com [209.85.219.74]) (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 5435F21ADBA for ; Tue, 4 Feb 2025 13:24:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675461; cv=none; b=mCvuPR23TyT/3g0nbsfq85wk7JjqmKLG+umjbvcy6Yef7fl1waxX/t8bf4zT0zCR3sQHtblruLaD+RpcMI9MEr4lBNp/v/4sT7QFgkFoIawioJHfR9pwey//RLTjNACZqc72bKFq/eVNfaolf8szgpzaV4C5YJ/pWJJT9QCHSVA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675461; c=relaxed/simple; bh=aVvJrJ1SNcCktf1pQeSHpv9lzkWbBlZMrIEN1xAcgKE=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Wp2smIqx4GSccef9GrHald0P4nKIeQ/GlwHycnaLuaorDhYIgoDVyxCHVe9EtDbNina8QLpN4mT534u1DlpLBbNsJ7RYG3WC1Z5wURB5UoVKQR2aqC9HrNY/MkRcQZ1CNN37EdFcBEIXeOh+E02ZsvFOpQoQ9BOJPxlUY9Qlzl0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=zfgP/dPb; arc=none smtp.client-ip=209.85.219.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="zfgP/dPb" Received: by mail-qv1-f74.google.com with SMTP id 6a1803df08f44-6e4244f9de8so14730476d6.1 for ; Tue, 04 Feb 2025 05:24:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675459; x=1739280259; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=iOhcfL8xgGzqzFZgJPYOqzYxywHOMdwlzghIyI1cDsc=; b=zfgP/dPbXq0jSSNb5TfNoWI6lPeiyrq3wXC6acfTMZSo/aRei1dPsc/PgNHQI6jToq F3EvUqND2pJ+m0rw7Hwp4AZn7kmdIeK+mvd4yRUgMmaqnQQTZHXBQ1NdOJSEtyegMkWI NLdGQI/HD/pXL1leCRp/EDYLrkFX5dkOiXV3494gs4L/8OQrCjQ50H8BCM2WU9CDSF2o fAv4Md7rjqMOg19eP6iAyZYk5wMyo2ygCF/jYF73AoPagGyplo/mcVsOiWXH6eYnkpep 0rPRd6KfbyoibvfCvGHgRfJ+C/OYbietPSdJ98/yQGx51el2ZQ1nZ0pgzvOV785rnA7K gpMQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675459; x=1739280259; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=iOhcfL8xgGzqzFZgJPYOqzYxywHOMdwlzghIyI1cDsc=; b=UJ2MicahnG1acecnvZ6/NDrEgaKEjrTt1gXHKO2MktAxSNjxIO1Ft3/SGg0RUwnBVw ODaTXrH2/UrCIST9VyNsYywWW4KQAEfv1XwVqUHZxq3f+U89ISdBW32JYmc6KT+G1E6y 9yZtxvak5Q1piNFbNm9s0caWiQl5+jtgBFmOmYLJbLakytKRGdjJcjNvbTDILmlpr0UN lErpQy2iXexxMf409T2ArflA9E8KOzLlj1tA71ArGh4SVnQ26du/cIsDENBwlkInkovA XSaPmxkDxgV91MlpzkWHiUv6Va+s09nRdCNrfeILVG/yat2bNKHinPELTkAnKfcH3h0o Bqeg== X-Gm-Message-State: AOJu0Yx6y7PV3eBRX0QN5MHe8L8KEYNm3dtvOu2lC1IVAbhHoT1XG+DK JqZ50tAdT3WzZCGGWTKuO/6rXxWth65Vfcozgu8C1CAjYCxrcx8wviXdoCUi0aZyKCIm6D4SIg4 k+BoNxIxhCw== X-Google-Smtp-Source: AGHT+IHy/97T+JlND31mp3xg61p05zqSTumVjErDktYYIBA8BoR+mHOBmklTTcV4AupKCltx4ms9QKytbfR5rQ== X-Received: from qvbqp16.prod.google.com ([2002:a05:6214:5990:b0:6e2:4bc3:eba4]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6214:3115:b0:6e1:afcf:8748 with SMTP id 6a1803df08f44-6e243c35440mr450597916d6.19.1738675459137; Tue, 04 Feb 2025 05:24:19 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:52 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-12-edumazet@google.com> Subject: [PATCH v3 net 11/16] ipv6: input: convert to dev_net_rcu() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org dev_net() calls from net/ipv6/ip6_input.c seem to happen under RCU protection. Convert them to dev_net_rcu() to ensure LOCKDEP support. Signed-off-by: Eric Dumazet Reviewed-by: Kuniyuki Iwashima --- net/ipv6/ip6_input.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/net/ipv6/ip6_input.c b/net/ipv6/ip6_input.c index 70c0e16c0ae6837d1c64d0036829c8b61799578b..4030527ebe098e86764f37c9068d2f2f9af2d183 100644 --- a/net/ipv6/ip6_input.c +++ b/net/ipv6/ip6_input.c @@ -301,7 +301,7 @@ static struct sk_buff *ip6_rcv_core(struct sk_buff *skb, struct net_device *dev, int ipv6_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev) { - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); skb = ip6_rcv_core(skb, dev, net); if (skb == NULL) @@ -330,7 +330,7 @@ void ipv6_list_rcv(struct list_head *head, struct packet_type *pt, list_for_each_entry_safe(skb, next, head, list) { struct net_device *dev = skb->dev; - struct net *net = dev_net(dev); + struct net *net = dev_net_rcu(dev); skb_list_del_init(skb); skb = ip6_rcv_core(skb, dev, net); @@ -488,7 +488,7 @@ static int ip6_input_finish(struct net *net, struct sock *sk, struct sk_buff *sk int ip6_input(struct sk_buff *skb) { return NF_HOOK(NFPROTO_IPV6, NF_INET_LOCAL_IN, - dev_net(skb->dev), NULL, skb, skb->dev, NULL, + dev_net_rcu(skb->dev), NULL, skb, skb->dev, NULL, ip6_input_finish); } EXPORT_SYMBOL_GPL(ip6_input); @@ -500,14 +500,14 @@ int ip6_mc_input(struct sk_buff *skb) struct net_device *dev; bool deliver; - __IP6_UPD_PO_STATS(dev_net(skb_dst(skb)->dev), + __IP6_UPD_PO_STATS(dev_net_rcu(skb_dst(skb)->dev), __in6_dev_get_safely(skb->dev), IPSTATS_MIB_INMCAST, skb->len); /* skb->dev passed may be master dev for vrfs. */ if (sdif) { rcu_read_lock(); - dev = dev_get_by_index_rcu(dev_net(skb->dev), sdif); + dev = dev_get_by_index_rcu(dev_net_rcu(skb->dev), sdif); if (!dev) { rcu_read_unlock(); kfree_skb(skb); @@ -526,7 +526,7 @@ int ip6_mc_input(struct sk_buff *skb) /* * IPv6 multicast router mode is now supported ;) */ - if (atomic_read(&dev_net(skb->dev)->ipv6.devconf_all->mc_forwarding) && + if (atomic_read(&dev_net_rcu(skb->dev)->ipv6.devconf_all->mc_forwarding) && !(ipv6_addr_type(&hdr->daddr) & (IPV6_ADDR_LOOPBACK|IPV6_ADDR_LINKLOCAL)) && likely(!(IP6CB(skb)->flags & IP6SKB_FORWARDED))) { From patchwork Tue Feb 4 13:23:53 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959215 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.201]) (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 AFE6E21ADD2 for ; Tue, 4 Feb 2025 13:24:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675463; cv=none; b=nTu+FwFH5TE4QK8vU6HwVhzaPMa+S0a7RjJixNGBAtWXZcwdHOX9KDOozFG04oF2Q3J9zIDZSABLFnATdJiRTW1q89s/eHp3OASooePiT3bfbh8EJOOvhmkKUDuUdkeqALqYICs8iRNWtvv8MbrLFNpnpYU9fmU5SenthRmxrZw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675463; c=relaxed/simple; bh=EBbPvxOWDuVZT9dCKcZQ7dF5vOxnJ2dsyERiuGzIvv8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=OX2+rLheQtSvhmsl7suCYUhaY1rRBNM0IFWsxv7VwpLGDKkthyNLNoVbF4TIxmyPGXDchjXUjW1Lo0zF9427J8ZbrIhoxGUCiwNtCWxXVu8opobOlN74lj/m5XFsQogpEm6MyaYDCVaptwtQiMPREfYUjh65ZsnnFkP34R9K+U8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=spwGIoOe; arc=none smtp.client-ip=209.85.128.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="spwGIoOe" Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-6f28c51fde0so55804567b3.2 for ; Tue, 04 Feb 2025 05:24:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675460; x=1739280260; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=W/SVdRvkLIsGq6su81v12UHC6PsBXnXjKLGYhsQefYE=; b=spwGIoOeLJnXhlRDSqD2YaVnqsWiZhRKeVphhQSRHoO2/cyRiXYRjXig/YXWVTcZaa gZgz1Pv3JHGdO/97LMpeiFQSW9pbjXOuBojlphkkaFFvAjWx+WVDeyy9J4Yu1KIZLfdc TrnlUPBWBNFIngJ93M6CfjJA14SAsaHfF21w/DPwR/pDSHBjTu0bjxy6v+TSbvWrBDXX qPdSrc/6DyP4wKpOPjtZalIJtsdkkV1B3u8Xkhqhw4oRQ4eCCUPqj8IESLpK/mfJqtMl K3Jcyh9BKaAxjQfQlnpDA5ns3AahGH+5+dFpimYjcmsNnsqVNcbpC5+H+Kuf09yRmQLJ v9Yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675461; x=1739280261; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=W/SVdRvkLIsGq6su81v12UHC6PsBXnXjKLGYhsQefYE=; b=BMrPv6vFAXI9WY5QJ5OsIPgTFBJKTuklmq6RBPGA5mvFBZvK0ncM6O1EeOWsP0lsCr C7HiOKSXRO0mJG+BH47HaLLYJrcRqVRHMCd3LlC8jAU8Pk203AoImrtwAHEEwCn4+k2r hvDoANjRFkxH+w35FL9rO03kxVEhn784z3VKpZ+gYGUvqMAVWC8wq6yRaN4Pwt4PIPL5 jsxrxgEQoRXk5Phoc0aV/N/M0gIgD0S/c9iG/vVlDysrbnvDrC/MRL7WTvJRgxlfwM0M i+27WH2lsPTZc99R3P2nggZZCbAv87xm1DPlqtJe3j4kihnhqxflApRcC1EGuUbSph11 28ZQ== X-Gm-Message-State: AOJu0Yzb8pmmD9xjffGNWz793Z0vB8VUalstESUbk08pRYdvDXiQv1EP 17IsiFMK0Lclb2h6af7WsFWf8b0kmTcDa+Vg40BdLThRAtqSGx3r9WFgV2r+C5WbKtbP/WOgxf5 zcTCEXlBQug== X-Google-Smtp-Source: AGHT+IFl+JeLCvHuU0m5jmChaeVLI+F2GS1eIunCcGmP85pXPVCkox8+PAFk0GvonwhiuU1eQw2EZCrsMggYXA== X-Received: from ybbeb10.prod.google.com ([2002:a05:6902:278a:b0:e44:6c5e:fe3b]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6902:2204:b0:e5a:e731:48be with SMTP id 3f1490d57ef6-e5ae7314b47mr10758854276.13.1738675460703; Tue, 04 Feb 2025 05:24:20 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:53 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-13-edumazet@google.com> Subject: [PATCH v3 net 12/16] ipv6: output: convert to dev_net_rcu() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org dev_net() calls from net/ipv6/ip6_output.c and net/ipv6/output_core.c are happening under RCU protection. Convert them to dev_net_rcu() to ensure LOCKDEP support. Signed-off-by: Eric Dumazet Reviewed-by: Kuniyuki Iwashima --- net/ipv6/ip6_output.c | 4 ++-- net/ipv6/output_core.c | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c index d577bf2f3053873d27b241029592cdbb0a124ad7..4c73a4cdcb23f76d81e572d5b1bd0f6902447c0e 100644 --- a/net/ipv6/ip6_output.c +++ b/net/ipv6/ip6_output.c @@ -393,7 +393,7 @@ static int ip6_call_ra_chain(struct sk_buff *skb, int sel) sk->sk_bound_dev_if == skb->dev->ifindex)) { if (inet6_test_bit(RTALERT_ISOLATE, sk) && - !net_eq(sock_net(sk), dev_net(skb->dev))) { + !net_eq(sock_net(sk), dev_net_rcu(skb->dev))) { continue; } if (last) { @@ -503,7 +503,7 @@ int ip6_forward(struct sk_buff *skb) struct dst_entry *dst = skb_dst(skb); struct ipv6hdr *hdr = ipv6_hdr(skb); struct inet6_skb_parm *opt = IP6CB(skb); - struct net *net = dev_net(dst->dev); + struct net *net = dev_net_rcu(dst->dev); struct inet6_dev *idev; SKB_DR(reason); u32 mtu; diff --git a/net/ipv6/output_core.c b/net/ipv6/output_core.c index 806d4b5dd1e60b27726facbb59bbef97d6fee7f5..94438fd4f0e833bb8f5ea4822c7312376ea79304 100644 --- a/net/ipv6/output_core.c +++ b/net/ipv6/output_core.c @@ -113,7 +113,7 @@ int ip6_dst_hoplimit(struct dst_entry *dst) if (idev) hoplimit = READ_ONCE(idev->cnf.hop_limit); else - hoplimit = READ_ONCE(dev_net(dev)->ipv6.devconf_all->hop_limit); + hoplimit = READ_ONCE(dev_net_rcu(dev)->ipv6.devconf_all->hop_limit); rcu_read_unlock(); } return hoplimit; From patchwork Tue Feb 4 13:23:54 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959216 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qk1-f201.google.com (mail-qk1-f201.google.com [209.85.222.201]) (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 7E91821B18B for ; Tue, 4 Feb 2025 13:24:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675465; cv=none; b=DcgAAVPFIOlr65qVPhiwmJ+Lvd2B/0iqoHCoVLsjhV4TX3ScfkZzxIwtezB13Kn4AMEHyUWRQhRlONKcHUmki//4HdqNTt9HquWNEtCzZzYOxsCFPapUJsl/k9NJRTDB9PGNaE1RAU5unS7Mk3pCsjvo+TOivS3IafoOE3adHOA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675465; c=relaxed/simple; bh=u+DZYCZ71qEmcoaM8BqYeimI8o1k+MxdZFJa9VQVe5c=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Qhj1AgPAMN4DZaRHvE57P8s+2Em5MlKN5EHXfrBuXyktt8gEWp4wCUqb9yJhdI4H2zUNT40EorMQuFytEjze8t7s7K5g3az3l+TcJi5+v+6bvINQd2KErwWV1/eEamoHV/xEGiSKKsQnsN9fo1v3E7nHmC3Y50P/0dn6QoO7+HA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=SwZg+0hd; arc=none smtp.client-ip=209.85.222.201 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="SwZg+0hd" Received: by mail-qk1-f201.google.com with SMTP id af79cd13be357-7b6eeef7c38so1270868585a.1 for ; Tue, 04 Feb 2025 05:24:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675462; x=1739280262; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=xkUZ2e8rWS1eur8t+u5qtaW84WZ8tA0iHVb0xvGzMSA=; b=SwZg+0hdXHXbeXt382ZxFj9IDwQwIp8KCcSVbW5NkfZx5p58kd8eYDnc+bfhNTbtRn jAMMPh7wMLrmpCPIruhvEatkWYci4mCkoI4WmxtrQY/W1LNJxncCeyXOVZJuMsDZRf/R BwidEEwhBk+Aysq6k+Y+3NBCgbAysIzg0bpC8J6X8Gu/l0m99bfFoPV1gwbmrisCowRM rJr1u6meybw98AD5iKxUPKJTnr8bLq/5YrdCykRAYF9dHh4Yi4fjBeq0Tf0s3jCnx7N6 Wg0EzEd+1x9m1CCMyprQpwl5hOeLVcwC5ze1QKsrTpxRk0BYTkdGOT5OB5qp8RH6WuTr xa1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675462; x=1739280262; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xkUZ2e8rWS1eur8t+u5qtaW84WZ8tA0iHVb0xvGzMSA=; b=gELbnTIU6TL7J9RN+BvCiS8WlJUDrOZmkMeSBGik+osR0bKIoBd1bf2+aAcjzjijzT axAOF14y1gGG4VFCs3ht5uy79iR6F7bBXrRj6ueV/f2/zyYRnBnQF+oJvDCsMUoQcgPs WV2TnItASUJaWlcwMaJnO0mnaisFQm4UohjddXs++eDIB7E+83K7SZL2QmoozY/02u1h bnAB9VqcQWusLQwceqzvJiXka+4ygR1nqNfZnomao5sXKO6oWgjRXPIK3jukij8A51j3 0mBV8YbK0tqWsJv7119o5tDCzo+JUHpjtX/P2tz2AzNgoZ+hY1wOjewboNYlgNEUOR1m 5cHQ== X-Gm-Message-State: AOJu0YyVI8eCODkNOsXJg8i/qhQ3O37DcdVuurms2F6I7NwxNFSVdP/u izGm1qmH7wxe+hdJrbbxns4RXteh5xs1rw5cluuW1pfddhvEnLOL6/oymzp3ps0eUlJqzwrZuVj hGxSsFWWdrA== X-Google-Smtp-Source: AGHT+IH00bT162gEv4FBB1T6dKL/GoBih1Z9jPJia9c1W2YdnU4CxbV2JumRpSXvtUqfdKypRpTxIiPA7XzLeQ== X-Received: from qknpz9.prod.google.com ([2002:a05:620a:6409:b0:7be:5c25:6cf4]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:620a:f01:b0:7b6:c714:f65c with SMTP id af79cd13be357-7bffcd0e89cmr3491224885a.28.1738675462281; Tue, 04 Feb 2025 05:24:22 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:54 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-14-edumazet@google.com> Subject: [PATCH v3 net 13/16] ipv6: use RCU protection in ip6_default_advmss() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org ip6_default_advmss() needs rcu protection to make sure the net structure it reads does not disappear. Fixes: 5578689a4e3c ("[NETNS][IPV6] route6 - make route6 per namespace") Signed-off-by: Eric Dumazet Reviewed-by: Kuniyuki Iwashima --- net/ipv6/route.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/net/ipv6/route.c b/net/ipv6/route.c index 78362822b9070df138a0724dc76003b63026f9e2..ef2d23a1e3d532f5db37ca94ca482c5522dddffc 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -3196,13 +3196,18 @@ static unsigned int ip6_default_advmss(const struct dst_entry *dst) { struct net_device *dev = dst->dev; unsigned int mtu = dst_mtu(dst); - struct net *net = dev_net(dev); + struct net *net; mtu -= sizeof(struct ipv6hdr) + sizeof(struct tcphdr); + rcu_read_lock(); + + net = dev_net_rcu(dev); if (mtu < net->ipv6.sysctl.ip6_rt_min_advmss) mtu = net->ipv6.sysctl.ip6_rt_min_advmss; + rcu_read_unlock(); + /* * Maximal non-jumbo IPv6 payload is IPV6_MAXPLEN and * corresponding MSS is IPV6_MAXPLEN - tcp_header_size. From patchwork Tue Feb 4 13:23:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959217 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qk1-f202.google.com (mail-qk1-f202.google.com [209.85.222.202]) (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 AC2D721B1A0 for ; Tue, 4 Feb 2025 13:24:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675466; cv=none; b=e40S5DghbzjI8EgKP8VgFD2m+2MnkkrN2Pk7RDf3XT6LtzUTEG8oR7rY4QVM2uT9pRkZL7GvILkSnPQN/oGANTaq14SQCjH+uLFP72WgWTnWhDrXSXvy7HYZxtEDvRUIi5YUtflp3IxMuxYn/pXpElo5sV3Utx7CQxBY7MBGz0E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675466; c=relaxed/simple; bh=bCrUEuXphnjaajetK5d7E+Vl/pwtSltcGVcBJpV2W7s=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Mex7nE2HgFBhsfpBSzPWbAp+oE5JNAfSTMVQf8qP1lpmqFWeBsS1bqWruG6NVymcMDK8ryH68EJhiHFIOlQa3rUCg7u38Uk+Mk4vpjaOp/gAUr02ubRDfODlWP+jnAqLYVm+dKQr1WrAETMJ2bJV/BYef3a4rOXljJbicGBTePE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=YRV8EIcW; arc=none smtp.client-ip=209.85.222.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="YRV8EIcW" Received: by mail-qk1-f202.google.com with SMTP id af79cd13be357-7b6e7f0735aso919294185a.1 for ; Tue, 04 Feb 2025 05:24:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675463; x=1739280263; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=FdwFRR960fzI8SNxNneTg6AR0rewjjfndjH2F50AsxA=; b=YRV8EIcW5xn9ELDofTzKbvNLXcARKt0CP11CT0HK5XfeyH2R/1QdNgybEPIoHhVC2Z 6KshLLfWVkGq2gqnumoVOCqH/r2dr8LUxXPQsj7CIu4u4Mh/knGajRsXv3PUZHmdWh6b olypvHSVsfqjh5nrtqqhgSITSGJcmLVCk0DuANBnS+ioyMt9QxX4VrWg3AFZuqjzwUwY mRnribN/VJJxA7REtfBrvRW2yxSuqYCZEjFOTlp3OrNaaJJ3x5S1aA/nRrmDt2pmIJMn RpHq2YfAPzA051WSGfiuO+zLGFzFacJCSZRbpqdV31RCweeLCMJuWKVe7wnCXzxJGcoH IqZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675463; x=1739280263; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=FdwFRR960fzI8SNxNneTg6AR0rewjjfndjH2F50AsxA=; b=iN/rNEjlaX+pVp0T8eXRV/ZI8BlV9lsjzSMoK4dpzjA0sqAXWLk9Qpe0IlNlfhSfVA UOMuOh2qXFhhphvEDZQ8pG6BpxM7S/fPS1j9gF12+zuSGPZOPEcPe2RlPj40o9DaaS3j z0LbU4rgO7lARj8P5W6wHGXTNLjENf8GmP5zaExm7NLQ36zFjmtv+53djP03k6eoJjx/ IFbqQ037UYTh2ffe+Z0cSsy8l3q4FKagpxu1Td8jOxh5wrSyBKiU0UzXpodb9ChR1XZw XTqRcKus3RU143psPF7HatbfcYVDQRu9XfUTZ0wzXaeMY/7+Ncvso11VhqO+qpxMJY6g kUtg== X-Gm-Message-State: AOJu0YyW7QH7yIIbegbYDjKM+sxWjvlkAlvN8AK2C5LBDDS/nHEjD+nz 85Plkz+99GiMhr5LLKfXplcEplguKR6FM6+cpxihcOr+KywABJ/zs7a0pO7kYVP2y68n/u0Az06 LLgcvx9NxKg== X-Google-Smtp-Source: AGHT+IExLUrnxfgueumcyCTYhIo5bxYig5bbEBWGW9zQzxR4RC+62Pg/cLbOcfx9j/sNrawe7W1onmoDELRepQ== X-Received: from qknpr12.prod.google.com ([2002:a05:620a:86cc:b0:7bc:dee1:94a3]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:620a:488f:b0:7b1:7f5b:72c7 with SMTP id af79cd13be357-7bffccc4cc2mr3881290485a.1.1738675463661; Tue, 04 Feb 2025 05:24:23 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:55 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-15-edumazet@google.com> Subject: [PATCH v3 net 14/16] net: filter: convert to dev_net_rcu() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org All calls to dev_net() from net/core/filter.c are currently done under rcu_read_lock(). Convert them to dev_net_rcu() to ensure LOCKDEP support. Signed-off-by: Eric Dumazet Reviewed-by: Kuniyuki Iwashima --- net/core/filter.c | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/net/core/filter.c b/net/core/filter.c index 2ec162dd83c463640dcf3c151327206f519b217a..4db537a982d55fa9b42aaa70820cb337d5283299 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -2244,7 +2244,7 @@ static int __bpf_redirect_neigh_v6(struct sk_buff *skb, struct net_device *dev, struct bpf_nh_params *nh) { const struct ipv6hdr *ip6h = ipv6_hdr(skb); - struct net *net = dev_net(dev); + struct net *net = dev_net_rcu(dev); int err, ret = NET_XMIT_DROP; if (!nh) { @@ -2348,7 +2348,7 @@ static int __bpf_redirect_neigh_v4(struct sk_buff *skb, struct net_device *dev, struct bpf_nh_params *nh) { const struct iphdr *ip4h = ip_hdr(skb); - struct net *net = dev_net(dev); + struct net *net = dev_net_rcu(dev); int err, ret = NET_XMIT_DROP; if (!nh) { @@ -2438,7 +2438,7 @@ BPF_CALL_3(bpf_clone_redirect, struct sk_buff *, skb, u32, ifindex, u64, flags) if (unlikely(flags & (~(BPF_F_INGRESS) | BPF_F_REDIRECT_INTERNAL))) return -EINVAL; - dev = dev_get_by_index_rcu(dev_net(skb->dev), ifindex); + dev = dev_get_by_index_rcu(dev_net_rcu(skb->dev), ifindex); if (unlikely(!dev)) return -EINVAL; @@ -2482,7 +2482,7 @@ static struct net_device *skb_get_peer_dev(struct net_device *dev) int skb_do_redirect(struct sk_buff *skb) { struct bpf_redirect_info *ri = bpf_net_ctx_get_ri(); - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); struct net_device *dev; u32 flags = ri->flags; @@ -2497,7 +2497,7 @@ int skb_do_redirect(struct sk_buff *skb) dev = skb_get_peer_dev(dev); if (unlikely(!dev || !(dev->flags & IFF_UP) || - net_eq(net, dev_net(dev)))) + net_eq(net, dev_net_rcu(dev)))) goto out_drop; skb->dev = dev; dev_sw_netstats_rx_add(dev, skb->len); @@ -4425,7 +4425,7 @@ __xdp_do_redirect_frame(struct bpf_redirect_info *ri, struct net_device *dev, break; case BPF_MAP_TYPE_UNSPEC: if (map_id == INT_MAX) { - fwd = dev_get_by_index_rcu(dev_net(dev), ri->tgt_index); + fwd = dev_get_by_index_rcu(dev_net_rcu(dev), ri->tgt_index); if (unlikely(!fwd)) { err = -EINVAL; break; @@ -4550,7 +4550,7 @@ int xdp_do_generic_redirect(struct net_device *dev, struct sk_buff *skb, ri->map_type = BPF_MAP_TYPE_UNSPEC; if (map_type == BPF_MAP_TYPE_UNSPEC && map_id == INT_MAX) { - fwd = dev_get_by_index_rcu(dev_net(dev), ri->tgt_index); + fwd = dev_get_by_index_rcu(dev_net_rcu(dev), ri->tgt_index); if (unlikely(!fwd)) { err = -EINVAL; goto err; @@ -6203,12 +6203,12 @@ BPF_CALL_4(bpf_xdp_fib_lookup, struct xdp_buff *, ctx, switch (params->family) { #if IS_ENABLED(CONFIG_INET) case AF_INET: - return bpf_ipv4_fib_lookup(dev_net(ctx->rxq->dev), params, + return bpf_ipv4_fib_lookup(dev_net_rcu(ctx->rxq->dev), params, flags, true); #endif #if IS_ENABLED(CONFIG_IPV6) case AF_INET6: - return bpf_ipv6_fib_lookup(dev_net(ctx->rxq->dev), params, + return bpf_ipv6_fib_lookup(dev_net_rcu(ctx->rxq->dev), params, flags, true); #endif } @@ -6228,7 +6228,7 @@ static const struct bpf_func_proto bpf_xdp_fib_lookup_proto = { BPF_CALL_4(bpf_skb_fib_lookup, struct sk_buff *, skb, struct bpf_fib_lookup *, params, int, plen, u32, flags) { - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(skb->dev); int rc = -EAFNOSUPPORT; bool check_mtu = false; @@ -6283,7 +6283,7 @@ static const struct bpf_func_proto bpf_skb_fib_lookup_proto = { static struct net_device *__dev_via_ifindex(struct net_device *dev_curr, u32 ifindex) { - struct net *netns = dev_net(dev_curr); + struct net *netns = dev_net_rcu(dev_curr); /* Non-redirect use-cases can use ifindex=0 and save ifindex lookup */ if (ifindex == 0) @@ -6806,7 +6806,7 @@ bpf_skc_lookup(struct sk_buff *skb, struct bpf_sock_tuple *tuple, u32 len, int ifindex; if (skb->dev) { - caller_net = dev_net(skb->dev); + caller_net = dev_net_rcu(skb->dev); ifindex = skb->dev->ifindex; } else { caller_net = sock_net(skb->sk); @@ -6906,7 +6906,7 @@ BPF_CALL_5(bpf_tc_skc_lookup_tcp, struct sk_buff *, skb, { struct net_device *dev = skb->dev; int ifindex = dev->ifindex, sdif = dev_sdif(dev); - struct net *caller_net = dev_net(dev); + struct net *caller_net = dev_net_rcu(dev); return (unsigned long)__bpf_skc_lookup(skb, tuple, len, caller_net, ifindex, IPPROTO_TCP, netns_id, @@ -6930,7 +6930,7 @@ BPF_CALL_5(bpf_tc_sk_lookup_tcp, struct sk_buff *, skb, { struct net_device *dev = skb->dev; int ifindex = dev->ifindex, sdif = dev_sdif(dev); - struct net *caller_net = dev_net(dev); + struct net *caller_net = dev_net_rcu(dev); return (unsigned long)__bpf_sk_lookup(skb, tuple, len, caller_net, ifindex, IPPROTO_TCP, netns_id, @@ -6954,7 +6954,7 @@ BPF_CALL_5(bpf_tc_sk_lookup_udp, struct sk_buff *, skb, { struct net_device *dev = skb->dev; int ifindex = dev->ifindex, sdif = dev_sdif(dev); - struct net *caller_net = dev_net(dev); + struct net *caller_net = dev_net_rcu(dev); return (unsigned long)__bpf_sk_lookup(skb, tuple, len, caller_net, ifindex, IPPROTO_UDP, netns_id, @@ -6992,7 +6992,7 @@ BPF_CALL_5(bpf_xdp_sk_lookup_udp, struct xdp_buff *, ctx, { struct net_device *dev = ctx->rxq->dev; int ifindex = dev->ifindex, sdif = dev_sdif(dev); - struct net *caller_net = dev_net(dev); + struct net *caller_net = dev_net_rcu(dev); return (unsigned long)__bpf_sk_lookup(NULL, tuple, len, caller_net, ifindex, IPPROTO_UDP, netns_id, @@ -7016,7 +7016,7 @@ BPF_CALL_5(bpf_xdp_skc_lookup_tcp, struct xdp_buff *, ctx, { struct net_device *dev = ctx->rxq->dev; int ifindex = dev->ifindex, sdif = dev_sdif(dev); - struct net *caller_net = dev_net(dev); + struct net *caller_net = dev_net_rcu(dev); return (unsigned long)__bpf_skc_lookup(NULL, tuple, len, caller_net, ifindex, IPPROTO_TCP, netns_id, @@ -7040,7 +7040,7 @@ BPF_CALL_5(bpf_xdp_sk_lookup_tcp, struct xdp_buff *, ctx, { struct net_device *dev = ctx->rxq->dev; int ifindex = dev->ifindex, sdif = dev_sdif(dev); - struct net *caller_net = dev_net(dev); + struct net *caller_net = dev_net_rcu(dev); return (unsigned long)__bpf_sk_lookup(NULL, tuple, len, caller_net, ifindex, IPPROTO_TCP, netns_id, @@ -7510,7 +7510,7 @@ BPF_CALL_3(bpf_sk_assign, struct sk_buff *, skb, struct sock *, sk, u64, flags) return -EINVAL; if (!skb_at_tc_ingress(skb)) return -EOPNOTSUPP; - if (unlikely(dev_net(skb->dev) != sock_net(sk))) + if (unlikely(dev_net_rcu(skb->dev) != sock_net(sk))) return -ENETUNREACH; if (sk_unhashed(sk)) return -EOPNOTSUPP; @@ -11985,7 +11985,7 @@ __bpf_kfunc int bpf_sk_assign_tcp_reqsk(struct __sk_buff *s, struct sock *sk, if (!skb_at_tc_ingress(skb)) return -EINVAL; - net = dev_net(skb->dev); + net = dev_net_rcu(skb->dev); if (net != sock_net(sk)) return -ENETUNREACH; From patchwork Tue Feb 4 13:23:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959218 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qv1-f73.google.com (mail-qv1-f73.google.com [209.85.219.73]) (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 2D93A21B1BE for ; Tue, 4 Feb 2025 13:24:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675467; cv=none; b=f+q5XIG0Trydjup8fTvIllC/TdANowebRzCcHzrfFM20nKxrcjsFVdpHwkiscCuPgPDtf0Xyyo1xO9fLqVENAmrFKI4gfzX+/VLWSeAUWmbRs12fp/OKZRfkDi9jhnBVpRSwOlKcKxY9BTe3P9RWG6dvDvuzCamPJcB7OOb2IHw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675467; c=relaxed/simple; bh=jfXrtiekqSdBzc9WrJkYrmWZSnEXJCmjaPG8o816zt0=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=MLWKCd+Nf0YBk7eAa08kv24BgWHL1Td2HhIGq0pjfN+7ljcE3KL80wW+oCHzfQCzAXPoaJhIW8slRQa6vLb976HzdWE67GllZvwuhgNzGHbHHqoedjg/q0cuaBblMU1HcHBZvAyjmToUDicNHIAfwfizyO3U8Tkcnj01CAFfUo0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=xWHbvPW+; arc=none smtp.client-ip=209.85.219.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="xWHbvPW+" Received: by mail-qv1-f73.google.com with SMTP id 6a1803df08f44-6e42cf312a3so3304686d6.3 for ; Tue, 04 Feb 2025 05:24:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675465; x=1739280265; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=I9656pNZqulCpkfv4AnFRSPaAwvAjb8S6ozBL9altlw=; b=xWHbvPW+Mf5K/23shb47v+kwL9gbK0d8nC91yzJVJ4VXSKx1EU4wHSFWvCLUTJuTCn STSaNmtswdPgK2jifJ4xA8LEEcMbkj2ZUxR0ytiqPCBw+uWKoAV/1plYMyMVEJIfz8Le w47SWygNuWI9qOwJxdiCP6nFtIBSffATxmfi54QAIffapLVAmDPrrFDE5BRc/2VaqVha bDoU+CxJjpvIBsWxITrO9HVWWHNPRCnW9JFW6qVzW0SzsdY9vofTTAtX0uVqTNn3Zhbl /i2FEdcqxuJFn3rIh+pRyO+yYib624VDOw5ptUHDBU3ZusBCH02brmYbUqy8rC7jqX1S gNow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675465; x=1739280265; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=I9656pNZqulCpkfv4AnFRSPaAwvAjb8S6ozBL9altlw=; b=S/UPvg9dxXME48CBZMKhj2Jn/9tMU76rpLzjLRnjAwQ4Zu3qTZ/lxunrdXB4gx3X71 9Do6xHRUZ4syQUCp0wzdiKwqSN8RM1+LKGjPDQACiO5wWUG0KCLfsoDtPgrbbvYmXEGf nAAOYXHxV23ltu4vH4GlDDmmDvcA7A6FOPeSYqhreUBjH8Dpr2LOHwcfQ/vDkHAvcMMn Re5Th3d+n9gOzXTZ8VL63c1ntdcm4BPDyFbmXMRLxse4LWGTPVzwwx1kGCtdT/KL5+Bz v/lK9R/1jdtnJsuWUfW6730gmt5TpoCeE8QeHTOGTDozbpdr1vBJo1k4fddn5lCMc2Oe qE0Q== X-Gm-Message-State: AOJu0Yy6Tfwzh7WZ9H3xgJ6z7FzXLro0brnDVvTZuqkVrzVWJfDmrRh4 5Fq4ZlA+IpSJsrnPRw4LlzLgeQhTAEXWytv6Zv2s2dUV8R1HfVpZRSWQShxKExSWnMfkdGwRwd8 JZtsZUbmzFw== X-Google-Smtp-Source: AGHT+IE9DxoYINUB5LxWDhoyYSiSjLKTM/4XABG6y+ibwIZnr8am5AvXEfVF9wgs7RKafEaLzGxEwxJi64prhQ== X-Received: from qvbmy3.prod.google.com ([2002:a05:6214:2e43:b0:6d8:eaf4:9e3c]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:ad4:5b8b:0:b0:6d8:e679:547c with SMTP id 6a1803df08f44-6e243c63ec6mr335533416d6.29.1738675465132; Tue, 04 Feb 2025 05:24:25 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:56 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-16-edumazet@google.com> Subject: [PATCH v3 net 15/16] flow_dissector: use rcu protection to fetch dev_net() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org __skb_flow_dissect() can be called from arbitrary contexts. It must extend its rcu protection section to include the call to dev_net(), which can become dev_net_rcu(). This makes sure the net structure can not disappear under us. Fixes: 9b52e3f267a6 ("flow_dissector: handle no-skb use case") Signed-off-by: Eric Dumazet Reviewed-by: Kuniyuki Iwashima --- net/core/flow_dissector.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/net/core/flow_dissector.c b/net/core/flow_dissector.c index 0e638a37aa0961de6281deeed227b3e7ef70e546..5db41bf2ed93e0df721c216ca4557dad16aa5f83 100644 --- a/net/core/flow_dissector.c +++ b/net/core/flow_dissector.c @@ -1108,10 +1108,12 @@ bool __skb_flow_dissect(const struct net *net, FLOW_DISSECTOR_KEY_BASIC, target_container); + rcu_read_lock(); + if (skb) { if (!net) { if (skb->dev) - net = dev_net(skb->dev); + net = dev_net_rcu(skb->dev); else if (skb->sk) net = sock_net(skb->sk); } @@ -1122,7 +1124,6 @@ bool __skb_flow_dissect(const struct net *net, enum netns_bpf_attach_type type = NETNS_BPF_FLOW_DISSECTOR; struct bpf_prog_array *run_array; - rcu_read_lock(); run_array = rcu_dereference(init_net.bpf.run_array[type]); if (!run_array) run_array = rcu_dereference(net->bpf.run_array[type]); @@ -1150,17 +1151,17 @@ bool __skb_flow_dissect(const struct net *net, prog = READ_ONCE(run_array->items[0].prog); result = bpf_flow_dissect(prog, &ctx, n_proto, nhoff, hlen, flags); - if (result == BPF_FLOW_DISSECTOR_CONTINUE) - goto dissect_continue; - __skb_flow_bpf_to_target(&flow_keys, flow_dissector, - target_container); - rcu_read_unlock(); - return result == BPF_OK; + if (result != BPF_FLOW_DISSECTOR_CONTINUE) { + __skb_flow_bpf_to_target(&flow_keys, flow_dissector, + target_container); + rcu_read_unlock(); + return result == BPF_OK; + } } -dissect_continue: - rcu_read_unlock(); } + rcu_read_unlock(); + if (dissector_uses_key(flow_dissector, FLOW_DISSECTOR_KEY_ETH_ADDRS)) { struct ethhdr *eth = eth_hdr(skb); From patchwork Tue Feb 4 13:23:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13959219 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-qv1-f73.google.com (mail-qv1-f73.google.com [209.85.219.73]) (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 0DF1F21C162 for ; Tue, 4 Feb 2025 13:24:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.219.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675469; cv=none; b=lGSDwXtM0qr6ZHcysxc+AZA1mMbLAa2Ood/xvQgnIfmIdVm7TwGQi5JH351A3TofXr/tXAKEsDJa6LuwBMsBdwJqE7wUo20DvScJXnKjQkSqOdR0qKai9Aix8NU6vWhAkT3P+8xzwN8aHUH7CbpR1EvQyi2RGDlBLbP0fAXf1yY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738675469; c=relaxed/simple; bh=IjoS0wZAHK91Jak8vmBaki/M3ogZdNysqnPdn+F/nUU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=tSQyFl/x6TU+vEfDz3A0nFy2LlBaAT8s6+zCS0S/se+ylbtc6bLf+elvB/kLTpAU49C9a6V5Q1kh1tl2OYOkRpRDIAos7pDzawdM7MWvA0yezvEnITWpRv66AzurOCMZt7zy9B6fINdPkrEPhZpeM1VKkTIYXg693S3wPK9TiXk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=zKxXAXoo; arc=none smtp.client-ip=209.85.219.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--edumazet.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="zKxXAXoo" Received: by mail-qv1-f73.google.com with SMTP id 6a1803df08f44-6e4221ac976so21962316d6.3 for ; Tue, 04 Feb 2025 05:24:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738675467; x=1739280267; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=W7cOpAiJ3jNVE76pwOVOdST2btjk2f5QzQeM6NMvd44=; b=zKxXAXooKO6+UY+1DjaKzHw3TvTDhBZJW5zZDRcV4eG/iGbhFD/234vFjtDyI0hS67 wNMwihAXsGKaWK+DtkR8eCFCh2SBS3e3oc6JRDbOLzcp1pRtSwpPpMOkUX/5UF5INI4X K8AOzxQeT6+v19s0+1RMZglvpM5jn4sOc+c2D7iGShhCxF8R2a67I/A3glbEmtXraHZi KD6AK9e1UnA3Fm/SlrfU1o5S0OYcUuH1nEj6eCcwXuuXyZaws8fV20LOYWU/gctq9bjV IvLA14/G44VtJplzLHSOYkxEAPRpQpRQAMzFBOMcReTZ17sgQcXKhhvu3JW/x5jMSLp0 GaFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738675467; x=1739280267; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=W7cOpAiJ3jNVE76pwOVOdST2btjk2f5QzQeM6NMvd44=; b=AxF8+E69F0f0rtwfFPqWeDc0uGUv1YXbHXXjnvrvNehFw2xEumZHAi3E1UkdHLwOdW hOBqGWMh4MDgm1goOdfmhLZBYQjvUeogZaeWQB9qjsrw9+fc1TPCbW0vGmuuiNYME1Eq +UjZHZfk4iyS79j4EVN4wh1k0yUlOj1Wsts5IvWreCwk/0AfkIgzYyXgTmDflo6MPQjn +U7quOljjcZ5KVcZe9rTrmsSGUv75FISnb7ZOg/x1DQp1NoM5AgrFyFAes9rpv11XViW GwWxlg971ByBpbfInHcSde3UYgjqvilB0lXHfiI0HzhZYU3TmNiiLVnMoU9NH7JRU8Qu rkiQ== X-Gm-Message-State: AOJu0YytiEPewDDiG0LcQoeRqvo8c/tmT2ujdIx5c2BPbCvin93FlI/G M3MEsPZndWrFn28L7SICJ06t1gbACfbHPuZNIwhtG2aYvYtDCvQlQE0OipMR1phStehkcmqR48K 2T22Gny+J+w== X-Google-Smtp-Source: AGHT+IHz7DBvrLRxMBB2LZCLhGByE/FyhDGT4IFQ3LQ8MRrFYvPbFo8QXbTa1z/d+zmiy6nIeuokB7GPjW5c7w== X-Received: from qvblh4.prod.google.com ([2002:a05:6214:54c4:b0:6d8:a765:adbe]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6214:4b82:b0:6e2:43d1:5feb with SMTP id 6a1803df08f44-6e243d161e4mr334224056d6.31.1738675466859; Tue, 04 Feb 2025 05:24:26 -0800 (PST) Date: Tue, 4 Feb 2025 13:23:57 +0000 In-Reply-To: <20250204132357.102354-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250204132357.102354-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250204132357.102354-17-edumazet@google.com> Subject: [PATCH v3 net 16/16] ipv4: use RCU protection in inet_select_addr() From: Eric Dumazet To: "David S . Miller" , Jakub Kicinski , Paolo Abeni Cc: netdev@vger.kernel.org, Kuniyuki Iwashima , Simon Horman , eric.dumazet@gmail.com, Eric Dumazet X-Patchwork-Delegate: kuba@kernel.org inet_select_addr() must use RCU protection to make sure the net structure it reads does not disappear. Fixes: c4544c724322 ("[NETNS]: Process inet_select_addr inside a namespace.") Signed-off-by: Eric Dumazet --- net/ipv4/devinet.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c index c8b3cf5fba4c02941b919687a6a657cf68f5f99a..55b8151759bc9f76ebdbfae27544d6ee666a4809 100644 --- a/net/ipv4/devinet.c +++ b/net/ipv4/devinet.c @@ -1371,10 +1371,11 @@ __be32 inet_select_addr(const struct net_device *dev, __be32 dst, int scope) __be32 addr = 0; unsigned char localnet_scope = RT_SCOPE_HOST; struct in_device *in_dev; - struct net *net = dev_net(dev); + struct net *net; int master_idx; rcu_read_lock(); + net = dev_net_rcu(dev); in_dev = __in_dev_get_rcu(dev); if (!in_dev) goto no_in_dev;