From patchwork Fri Jan 31 17:13:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13955580 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 A40B61CBA18 for ; Fri, 31 Jan 2025 17:13:41 +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=1738343623; cv=none; b=EhK+eEY6Hd2gce7Vrq68jIC4AsQu2YILmPGUniLXMUVSfgGjjyng/D094/TKujSd8Jly7c7UA2/wDdvedhyNGLu67x+ESsbe2ksz1hoQOQKYQi0ZN2PJb4r5vaK2Xa9iYS0fFxkQ74UVMQaz73nNLJXuGs2T8Gzk6IXnWKG4Pjs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738343623; c=relaxed/simple; bh=xXgc4Sduo1CFevQ7c/LaDTOMMqPiBo/n8KBpuOLAges=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=TdX94lefoFHkUlNLIJCQ1NyYnbLhhJ3d3GupdRB80MUXXyIr0l+MO3U+Wde5Fqa4t7ZmnbrYO5L8LEcEscA2LYoz4Ef2nvuDnpu0y+sS/P4MO6Owui7iNTBToxe+erT1ERFi/PEas8J7ercJszspAoDj9n6ZfZ/3PLtVNxmTAJE= 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=czy10cD+; 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="czy10cD+" Received: by mail-qv1-f74.google.com with SMTP id 6a1803df08f44-6dd43b16631so25761196d6.2 for ; Fri, 31 Jan 2025 09:13:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738343620; x=1738948420; 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=1sV2PSp5eBVlqTics1iOeb/nbhMMTCnjhD5M/2eNwCQ=; b=czy10cD+EPfaqam/MyKW8ubWmyRZRAERhy2e8ucSWV/SvOB+Mu7ftQZWVGOrDSwIzL epKho9OfTTwXD8IDKiR3RuU9xqAHnIDVbi/cuIL/aYSvI5rLKghOn1pftggVeW9sKnfK ztNMjE2ppcZKXCno/MfEMfQSoDxgpV2fPM2NzieyzYpFZkCXwovTvKuqz/32PKWx+Hhe /g63vj54uD5VARalchAnd3trb9EsmKvdqytb4HN+pJwRMXzx89l+od21SD3GvYSDDfRc GYSWYXNYU3wZiN8qfIn2MT+bB3La13dCYpg0kvSg9a0S9FdbfwbOE+3ODAurkjS/6DEW Bpew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738343620; x=1738948420; 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=1sV2PSp5eBVlqTics1iOeb/nbhMMTCnjhD5M/2eNwCQ=; b=COAdpmiV3b2lsuU1J1qp0EUdGvM2j2p3NaQSxrv/bnsgJ0MfJBsHHtFhZLpS6fwIjp 1JJuLV0u8Nx2c735gmtfnrDtCZrnxfVLm3Ew/cn5NFG0C2RQBV4QDA77MR/wAa96+D5L wUfvCgdF1tXHNXb8d5EvhrX5zkqpvOAjT1B3jiTVXau8JowMJZ92m/g0xboJQsqowqMt HsrChl2rlSDsS3VbTJGxUWJuOC4CnX1TnBDZ7dv88BxjYlGpmJFEBiuOn6Hkn+Co21AX yPXxuqjNgU3gkp+sbSx0IRtE/zifK9tyxxG/xuflKdCMRJjnLsH4755u6VM7R69yFiWN wgaA== X-Gm-Message-State: AOJu0Ywa1UNbpj54K7lzHTO/WBUZ/ceoSiyUiHEonNjaD36zwWpuaQjx w+7DZPjTCXQfuziKyVZzj/hTqOXZNDrhaHHr1t85+zlnezN8lT1QtDHnhBs4geVjXxbqaDBzoOj 5VO6yn9o7xQ== X-Google-Smtp-Source: AGHT+IEd9tSBbZuj4TZBdK/0zPv27KY0BRarl9lCUjHtf6Qlq2sOp7zGmKjUWjaKdu8F/zOL27gVqxnfESogrQ== X-Received: from qvbmf15.prod.google.com ([2002:a05:6214:5d8f:b0:6dc:c098:fa40]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:ad4:5dc8:0:b0:6d8:8f14:2f5f with SMTP id 6a1803df08f44-6e243bf8ce0mr193896876d6.23.1738343620436; Fri, 31 Jan 2025 09:13:40 -0800 (PST) Date: Fri, 31 Jan 2025 17:13:19 +0000 In-Reply-To: <20250131171334.1172661-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250131171334.1172661-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250131171334.1172661-2-edumazet@google.com> Subject: [PATCH 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 2a59034a5fa2fb53300657968c2053ab354bb746..046015adf2856f859b9a671e2be4ef674125ef96 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 Fri Jan 31 17:13:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13955581 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 C58AA1F03D0 for ; Fri, 31 Jan 2025 17:13:42 +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=1738343624; cv=none; b=Y8f2OLGtV+RQBbjuv+6ShaRH+S5prrgXoNtz1wv93hWFlGb3SmHTGbwmrwbFo002Ld9htUhu2hkq/H7LGiqi0TGK6t89GCmGRUV2mBKsxkV1BLMfC9tD0FTYjzLsBU1qHG53SFXuW2Pf9ot7uNU+WXBdEr8B17Zx+SU/uclLcsI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738343624; c=relaxed/simple; bh=yK1qPK7YIzAljxGSHnEbpglppqaNZSTaU9FwgiIREj8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=c4e6Xi9R6YGivxk0nAUA8L2/F3kAi8dyOqR3+ew2NLzwSgnrR5oH54wFxqRHiT457OpClYxxXKCyvj2T/e+/pF1QoZkx+Bh7Z5wo+nlBvqtUQZDiiAw0gvg/80bLkfq2Dw3RLlZEtBG6r6dASopHC5E8KJeCLX/t6P6sjhtPNRU= 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=OkiiXPbM; 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="OkiiXPbM" Received: by mail-qt1-f202.google.com with SMTP id d75a77b69052e-4679becb47eso53121671cf.3 for ; Fri, 31 Jan 2025 09:13:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738343622; x=1738948422; 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=JSpYIA9faa8FVS0Q0XzrlEe/dG4l3XDdB9pyi1OhEOw=; b=OkiiXPbMIk5rWKcsnJKG5RWtAtCI2ELpH+cYZqR7C8hVsAc0/kRzMwnJvMmkQjhaPN 8CgvWqIsFtCcGEl45cGPzT8Ul6zxbpAN0aMlflod07yddJ5zjLlUjq0oHM2zpD0yBHVa mBhc0VlE4pLU3MzTC0FS4O+TgFP1ZBYg++SAv2LPKaWL8aS/WnaC8fTAjvnokGnoaUhT vGPTRuVqKZ0KVr20w4fHH0ee+BGKkMTUlifLhFEZIbcyAyF7NVFdZ+k0c/qm5P7rqbpa Hr1jyS/d4eEbxRHAv2XZxswban0w7kXDu180h1WEOoM5RS9bvThDKocnBqsb8plyA5A2 ZeYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738343622; x=1738948422; 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=JSpYIA9faa8FVS0Q0XzrlEe/dG4l3XDdB9pyi1OhEOw=; b=N0MfwOAmqiCKgQCL+NgdohpbQm92Uek5pU4vw31oKZDqwsmw8Pr6srlxVmOpJ5vd0h UADp8ZVLEvCEr6BuHyHsGRL2XbqIH04JfWBEyoVtbh7DibIFRebxxtwaijT/rAQJC8FG Jb7yqGu4GwX4aEYQ72Q6qBvaGdDLbxufRE4IUclm4cSed6JTmt8Osg09sqce9GleQmsQ 5DdHs/njbcprQC64vkxvSjOIJ9P+QTsFkc/gHTLVG63wON7kHSDz+SztUordzIqiJASn XXaHx2Agdt0dOp3HNDo4gaUhLf3h1vlPayAckBs1xbnVs25a0Apbj1lDTuR7pwn3RU4n zjdw== X-Gm-Message-State: AOJu0Yzoa0VNlqfhYt7DCQedxbChH6vClOUSBhH8TDRY8OrY4Iygf7Mp pfej4hAwzjGTn3I7pay2KgYAN8daZ+3Lc4nYrAtkR7ZjV5PLY8njjnXjxULzu9mHTAiww8hT0R1 9yGLnXJ/oHg== X-Google-Smtp-Source: AGHT+IEe+rIlE66ox8/LKjtCs4/YNHfVdjjkgDUaP87lLuM4ouFSdkzobuhYso0GAJDUNM1LFfXlfUOD5k+L1A== X-Received: from qtbhj5.prod.google.com ([2002:a05:622a:6205:b0:46c:7332:f1bd]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:622a:6185:b0:46c:7647:2ace with SMTP id d75a77b69052e-46fd09395c9mr164403981cf.0.1738343621795; Fri, 31 Jan 2025 09:13:41 -0800 (PST) Date: Fri, 31 Jan 2025 17:13:20 +0000 In-Reply-To: <20250131171334.1172661-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250131171334.1172661-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250131171334.1172661-3-edumazet@google.com> Subject: [PATCH 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 Fri Jan 31 17:13:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13955582 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 37AF21F03EA for ; Fri, 31 Jan 2025 17:13:43 +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=1738343625; cv=none; b=JLNuQ6PWdXYCosyElAR9PzK3oTPpsWe7a1MjIps/SVmxJkt2fweLmnCrv6pTmZW/UBMhKhA0XwR5PmieFJy3ROgomkkaT9Fti9hE35EnN8AoiMulWkZp72VrPipdPiXqELBfsLwOsIcw+lbLMY0ekBnP9mg0ci5FL3mxEb7v/J4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738343625; c=relaxed/simple; bh=BodILEqoM6R13yJno10qoCeODTvI8TaHTkPMRluv028=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=WKU+gob9+J387P/zstM35bmfhWaI4V8S7Z0R5e+/K7OpVMSYOej8Z2xkI526zTQu/cyEpFRCsfV6lxgwIg9HV6qy0ZJERLqG0VEn6gFY2LDbfPYKJdJ0kHq3l99ErnrlrMVO9lsrzrKFmnWipnjh4kRHUAiem0sIxyfXCfIQFtQ= 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=XiLjb8y1; 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="XiLjb8y1" Received: by mail-qt1-f201.google.com with SMTP id d75a77b69052e-46798d74f0cso39281911cf.0 for ; Fri, 31 Jan 2025 09:13:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738343623; x=1738948423; 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=f0xiPGCTpYZx77YCAKyVU7G46XthSwJFii7DkQ0pGtk=; b=XiLjb8y1EYNo4147Go2Y7nmKp1lmoM+jSjPmGtGVE6zMKZAJyWM/WXu/5NxwSbR+BA L0OLRltIi4gqFPTf/x2Q8E940P2VcmWYgdzEpzLbOZQ/rDsRh+BCFQ9Is22BIFWmjCyQ mZgWDx2VOkkSP9a2anpaEq8amBkYeWurtMLCj3IkEFw2Vx4A8zW8lGu0eEaVjFOO4ef0 WLKvo/OZNB0FosEahDXwUDqH3l0EBsGrFt0Kyn45N7K31+vl2z+SL2CQxj6AW6qxdbDZ oE8CiFuZDw2KbWF6T7A/k3uVoMrOoyt65qJiyutQpRnfk/e+vcNJoIXO0fEd/BXwA9jJ /Fcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738343623; x=1738948423; 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=f0xiPGCTpYZx77YCAKyVU7G46XthSwJFii7DkQ0pGtk=; b=OrYqZ6stry2Zou7yB+4tVMSbkvxqm1s8EFY42IuLNWGw+fgnsaPt12oMOBaTFubSoy 7ssF/vUrPzfRZrhQYOqVOx+/kYYOlnwz6NMUiYFoBAJF/c5a9KerMncAh+vrblXslhLx my6kF0NwCMUNew+/6M2WQeFtqnzPlIRNqh7WPkAk9YI2aT8Ewtjbx9DFF+OQSFN389Re uA8iJwAa/NmFwb3q5Z+Y9dun10/UF2NIBgW3aD7jZ3rKqq0Ve3LpLWeMT87B4EoG6/m9 DphTCUN+ltnhf20pxNPhLnMgFQXRKgIHOv9Q9yzYuNC7CV3FXBI2Gi6nCQ+vgDIxednc KDHQ== X-Gm-Message-State: AOJu0YwgfjwAuGJt4NW0O5M1WbSWrAEkmdm8SNF/c8C6eeKtGICA5Qkr geu5G+RihUBV51PNitXcotoHEPAKsChR3Rp+DAQKQEvLMY28uaIP52uX5Acc4ZSWhiSPyf5iK2D 6EW0qy+UZyQ== X-Google-Smtp-Source: AGHT+IEtBkKu4jl0hLEvHF3ox7t2a5WCkB9bouLQ/RBt1N02xYWpfLjTX8Hj1puxaWSH3xD5bPKE/5SMqXMALg== X-Received: from qtbfe12.prod.google.com ([2002:a05:622a:4d4c:b0:467:8783:e486]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:622a:1314:b0:467:5910:255f with SMTP id d75a77b69052e-46fd0ace290mr183152261cf.30.1738343623019; Fri, 31 Jan 2025 09:13:43 -0800 (PST) Date: Fri, 31 Jan 2025 17:13:21 +0000 In-Reply-To: <20250131171334.1172661-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250131171334.1172661-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250131171334.1172661-4-edumazet@google.com> Subject: [PATCH 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 Fri Jan 31 17:13:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13955583 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 7AA151F0E26 for ; Fri, 31 Jan 2025 17:13:45 +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=1738343626; cv=none; b=ZDFr7ZGS4ZakgqTXd7R9xrpvp9eyzCjTXJNur3Dqu1uNouklGPHiehNAB2ZmaAgkgZcZDpT+XtWEvzgFTL48wdWEhDEgZDg/S1QYluqf1TEJ1MQpheMjXQeEdI/MQlt4vj2Mz7p4ombA+Luxa5IQJOohH/tngEHji3Fsdrt/kn8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738343626; c=relaxed/simple; bh=Lt6e7okkgYTvVg+F/jtzDQh/HqGow3PVDgLhKpRdrro=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=YR/qv6q2mJfYU/umsg7dWdAjXpxJkg5a8Ps7bVv2oZ4QiWONfgTdX8jKP4JA7QniZsGEvUixgjn/X7vUu4yriISMrvdWUl7kqmTEEZ0KwIoKxZpCsfO3RMDwL7ZvJN6d2DQSufSLlNAT3/V453fBL7aKLxvFUQAtLUaPvQjFtag= 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=zymnghfQ; 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="zymnghfQ" Received: by mail-qv1-f74.google.com with SMTP id 6a1803df08f44-6d884999693so34687226d6.0 for ; Fri, 31 Jan 2025 09:13:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738343624; x=1738948424; 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=2Uf3ShYMVjX4es+z+n0+Jeioa1AmjFn9dDjTiZ55aJE=; b=zymnghfQrk2JvhVbWeoaNu6MGfrsNlMwO/piLJFRSLXd1out/g5x2sKUqoHL68wryh meByMSSAAp+XtfLykJkmEQGpEVPdB4G+Fq98ZayGOtlZmKWnUmE9+508Tqv4H+B2QldE WWfVLwuJd977Yjq420o+fjThyH38j7QMaBc0zjHjNMY7rN8OWu+niU32hnpaK+/UKbWe s05u5iufMbuxlcqLuwQqgXw4zg8hZSGs7LJR9a63lJj/kQfnhQOx7e30mm/E5VIgPEjj 70T0kf1N+2UEYah+gCG84Q7Emy8IZaANrkROtLGbhg63lMg44EZS152bTJiMESUnEIBd gK7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738343624; x=1738948424; 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=2Uf3ShYMVjX4es+z+n0+Jeioa1AmjFn9dDjTiZ55aJE=; b=u+c6iPMpj3ZaVW4Aq67/0fbxGLj2NpH4+xKs5d0FwaDxvVA+Y+E8MT17X4n+88d2pK 5T9QPGCjlysLhkaLalp8VIApc8LFu22oGfPXy24MkggLRnLQQp77NseNRGDACfDj/Z50 rlRCm8ZG1ePgZCErincB6FqrvJ/WHZNQ4d8qfTKvZnxUC5AHfbL+W7ft2bRXhISN3CdK 12oU1F/RAZoXMv51ZBnsrpZkXBoEA3/oHPktWUaRPuTk0Th0c1tERecp2weTI5V+oCtv r8IQ2zCOJvqT/Hka76eY40rjn0Aid+4zIf6Z7lt4D0NyUjEoz7Lo9AKj+bj3dN4WeSuS O74A== X-Gm-Message-State: AOJu0YxWdvFio8cYmuDMt0s6vbEdBU5OFpZ3dHBJ1zTN7FkA+OZOodhO RoeTkyP2C9zc6+o0BOAbKxY/6hFjT+RQETQRtUrDmjlp2sjk7nKi88YIM629MdYGpP8LU8sVOkl 6KOoCm7a4XQ== X-Google-Smtp-Source: AGHT+IG08dNPx/fOWJtlz3MGyxmfFbJjmn7LR6allykZc0PqGaEpp3KB8RSuDeX3Rb56t+z1zivgwYuECXXfhw== X-Received: from qvbpd4.prod.google.com ([2002:a05:6214:4904:b0:6dd:b1b1:caa7]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:ad4:5fcc:0:b0:6d8:b371:6a0f with SMTP id 6a1803df08f44-6e243c9b6bdmr221595936d6.31.1738343624285; Fri, 31 Jan 2025 09:13:44 -0800 (PST) Date: Fri, 31 Jan 2025 17:13:22 +0000 In-Reply-To: <20250131171334.1172661-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250131171334.1172661-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250131171334.1172661-5-edumazet@google.com> Subject: [PATCH 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 Fri Jan 31 17:13:23 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13955584 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 0432C1F0E53 for ; Fri, 31 Jan 2025 17:13:46 +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=1738343628; cv=none; b=L0GaiGQ+T64+MklKTwHeiFH6q2a6F9MZQ8li3kfcKTNggjTAPoAvCC9+E1RkwJfFP/lZ/n+U91pBpJueXEolyOe3T+es5yHeLm/EaHJ+wI5TsrHirzbAN3lqFMwozVSIckndrRx2bBs5M5h0fYOJsnraJMR5N7sJwFtKPmsglJs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738343628; c=relaxed/simple; bh=WrgSmefKZZtGaR9c7VaRDiNUgIQ8CEN8Su1E5uigtaI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=Kiq/qTnu7aDv/F4TpgbJqh2Ta9gOXn5TbUBDDlMq5LP39/gJRtNwFDUQ3en/xnBj89TPxZ5Zsk3NoZQBI6mR7i+pM01lODgB0vmEVCZ4qpmghLDbEdpkwN9xirsApnB9nBiLqsSv11n3rbJxtpiiCtr/g44eIrzeUkafquX54CI= 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=vDKMyycY; 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="vDKMyycY" Received: by mail-qk1-f202.google.com with SMTP id af79cd13be357-7bcdb02f43cso223501085a.3 for ; Fri, 31 Jan 2025 09:13:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738343626; x=1738948426; 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=2rNmoqFDkK9atKW31Y32Mv1I9ttJUk1eN8TNCRUjqMI=; b=vDKMyycYzZXCIYU/GMIGOZ9kwVXYcSt07Nv9MUHuZaWQKVwdJ8jql5vpmGWQcwfPqR 9FEB4ANLdx0qNmbkU6M8jwQWz0OjrVLPGjnAV0PnAmbvSA7/o64CVjSco3on7IhlAXxZ odyPg6vAaQz9nHmAj6HRuF/FjQxy09UXj1dVWmJgTp+OjR2WchCSkLeqUUmIHC9u//bI Jaf2m2IjuwENfh2cpAjcRjsu2APOcB/nkwkTmTN6khP+gBxD9OgyugpHXI+CWu1NhTJr //uAwhTVeL9XDCgx1J0lB+Q/mjm6FzdSb/oSP3oo2bBwbu8ivAxwfM/bQyjuDrZbX4TY TmAQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738343626; x=1738948426; 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=2rNmoqFDkK9atKW31Y32Mv1I9ttJUk1eN8TNCRUjqMI=; b=HKTdPrACuTaI55LAS+7uXDzb7SYKgwZ4UbsgI8H/H+n00fe7u/TFDtMofo41+ibv9S Uz5ytQuRSlh8PjJg1eGFDaSjQMYf/YO96DEYckhJajZeVw0m+C7wGHBjSivSkhkwif6h inhWCqmUf4dThCEeJh7Fu87HW3cs4G+DD5NOLr8QPSYvxdjKd/6KSybSSt/pDC/ABRbA bNDbGMrmVMprMt1QFLZUxCJgusP3GvCJUlUOdO+sdygGuMIGBjpeuETDsm73ElmNjLqo 1H1RxVQn6W4lebRaif1eMSTNy2tD+oEj3L2zND9EjOBtlwLKDWYbaQ7ZRNDq1T2nSjy4 WfGg== X-Gm-Message-State: AOJu0YxFi+7cjd7saRhpt9PoVaKYV7T5a9iL6x2GrbxFZORhUOitYBJS Etjovpgla4GLp7fFd0RVygG2PQ8v7wXxBg2vyqoxHQ4Jc8f6VQ6zYWbITYMGaaBf3Y01fWBrnLM StqB2Wy752g== X-Google-Smtp-Source: AGHT+IGp+Ze2fkOCq70QGW3Y/6olD2pu5D7F0xqENqj1F75+6YtZxoDbnbBpRU2T8di4wjQuQU/37iPEZ9lKMA== X-Received: from qkpi14.prod.google.com ([2002:a05:620a:27ce:b0:7b6:d089:f8d4]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:620a:2988:b0:7b6:d1f6:3df with SMTP id af79cd13be357-7bffcce5870mr1952551285a.21.1738343625804; Fri, 31 Jan 2025 09:13:45 -0800 (PST) Date: Fri, 31 Jan 2025 17:13:23 +0000 In-Reply-To: <20250131171334.1172661-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250131171334.1172661-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250131171334.1172661-6-edumazet@google.com> Subject: [PATCH 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. 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 Fri Jan 31 17:13:24 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13955585 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 1706B1F12F3 for ; Fri, 31 Jan 2025 17:13:47 +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=1738343629; cv=none; b=JSDYr2LiJqo4fq/ZWwvClfqNjBs3Fm4RDHbjLUQvBTz7FsK5Xqs2L0ZRiyp9q7tYoBEjX1Jm7iOh2OcLASnFEB32FfQeJeYx408VJ88rQkvzQypESX+FIxrzvlYHPW7XefT9AEk9VZ/iqcAiLQDtyQ1K7UlPiDF6OUID8rabsrk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738343629; c=relaxed/simple; bh=OZ/Ay6YoUvuc1KfSlbjY4MiZa9XwhAgf2i3m5SVB9Sk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=q5H2hYJElePFQn3QMRLqg1UT5yz3NH5fLyd7BjXmQHOP/2j4sQNoelzL+QUJrJPL3GOR7qszpqfPK9bnYXnai7yL0u3Bt6w5dMNnO3CzwBsQHvQEKrbpAmpEOdJ0lLs3SbAsIubQMZH5yif1zRq3zinaEoNsb2pISjg5oyP2mhY= 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=LN1PNxdl; 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="LN1PNxdl" Received: by mail-qv1-f74.google.com with SMTP id 6a1803df08f44-6dcd1e4a051so40753876d6.2 for ; Fri, 31 Jan 2025 09:13:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738343627; x=1738948427; 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=KsxIoFSg/A4nG3Er1JIhxRq9uB0GREU4nT5A4X0Dej0=; b=LN1PNxdlLcrNJAv/hNGyE/pFiAVd4Krsp9RJB4njzSgtUj48uzQAgW5mnq/RmoToSP OGp4BzcXexcSznHweTaDjos14KTp/gUBNr+YFVvHcScZ0TmM9Uuvn+raYnMUrGN9bZ8Y +eVz5byd6MhLdwyq4iaBD6BMsMCuvoBI4fUzXNsP01jb3hOVWfoMuW+6ludE8/KFhrJV L4eqADEs/SWpd40L/BSJUWRpoQFqCUZvFd45zVdvNdvBXtzOsJpv+IKipvd+Zcl7BQG1 yC6w/TT5/yshkaddHVa1dE1fLoPDFgsGpXcnKvHFryqIWkAjLRCFwlbBuN8BthSj8OI1 Ghww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738343627; x=1738948427; 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=KsxIoFSg/A4nG3Er1JIhxRq9uB0GREU4nT5A4X0Dej0=; b=FciLPD8k9o8+zQsBC0LAYtz3Wq4Nld25nTzq4pK1HYi61V4fUGm/0CGx0ZEGvghD8y 4m8jEMkpXDBpwd5nudd3qBBfVuJYgTDU0C1wLRf+FRWTub+wxFSCNCb5lGOXB4OGGwfS 5fozhh0gBdBRtO+ic7xNUIeX/xbIWrANsEEJyfj9vc+VIytWNG189URzIfugUsZHlGCd gVF3WuwGkQEUAS07WmraDn6Hra+NA5h6Qt2hI21cZk4c++gt/bhZet2g396qN1z68ahI m/VWJLd5V4Fs6iWicdy5fVe1WFSfLClE/9TfHFDAzjx0tYPpdaNzdZlyvMWnrSJQgvKB gYhw== X-Gm-Message-State: AOJu0YxD2T0zjnMsCPsZVLUBKmbb8iaYt7cqROsp9aEPRKLoTIA9RFYj UKNggn/NafmHvNMvhWWwzAcDZw/SgUyCnLefJgwIi2QzfGsDlQEiNrjRrhGzBexv+YGJd+bx6b4 w2K+B3fZRiA== X-Google-Smtp-Source: AGHT+IHEbooL7oeATBm/eFII83fIG4vel37CTJtJr57gD0erNcU3rYv2ThGpCGJObKSxjxyfCj72voV7Gyc+4A== X-Received: from qvblz3.prod.google.com ([2002:a05:6214:5c43:b0:6e2:4da9:4e34]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6214:62e:b0:6d4:1813:1f20 with SMTP id 6a1803df08f44-6e243befc4cmr193776026d6.8.1738343626974; Fri, 31 Jan 2025 09:13:46 -0800 (PST) Date: Fri, 31 Jan 2025 17:13:24 +0000 In-Reply-To: <20250131171334.1172661-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250131171334.1172661-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250131171334.1172661-7-edumazet@google.com> Subject: [PATCH 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 Fri Jan 31 17:13:25 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13955586 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 697FF1F1312 for ; Fri, 31 Jan 2025 17:13:49 +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=1738343631; cv=none; b=AAgKOIOzPPkzLJGBJo/4sjHgHKeqeJSi5udoKZlQlDAnnZLKiHgp+Fdi/26C1oEHPm3UJzK2LiS9eyqG+t38M2s/uUOdZDkzUUV4UOEawssbLwm2Z1koeNs2nDf6VZpfVgIVVkvt39t7HtXm6g2jFeGKKV+IKK6Np5Cd+mv3BdQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738343631; c=relaxed/simple; bh=NeD1nii3AouYSbwzR3sR6+2Xufdqm1ETrAEZh0HRYRo=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=PXeqWc3wPECLGAYZ8gkvjv2FgLcYrWvQe2SPrOytzI6c4cm0yDh3J3gJ8S2fNFa/Uc429BTeU9P+gW4G+fPfpmuDDeowbmGxosBC/i9R3ItOZxRrw3VCX/yX66jj4xTYzjYbCdhhwlywdC2+XGzETNFpcpHqZgDaIWJWgPwxPg4= 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=mlCUK1CV; 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="mlCUK1CV" Received: by mail-qv1-f73.google.com with SMTP id 6a1803df08f44-6d88d56beb7so19558416d6.3 for ; Fri, 31 Jan 2025 09:13:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738343628; x=1738948428; 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=JT4Ih6F0+FsC+8yFJbyvYs/VpWrxLuqOODLLt/c1GqE=; b=mlCUK1CVv+D7uEyJFpfwXpXpeaCamY8hAcgXhf0VLsopGXhDZ9a5n/BUuIFACTmWgG xJm142bI9rkjg80yTVbG6Q8PzCz7OPOxbvZ+od8Ff0LpRfslL+C6zgfAIPzLMw4pw/Az Y234Zv/ojGfA7wQKYaTYnNG+OmQZ3kVvHtyQx/ACciIfMWaw2bsNKZ1Bylbmk2p/K3tt K5VGxSxaptpbptFbaqHB7FqCKHzdpGdoLuwsfRhdCvqpXd9qyhWY3OOEwWVH/JtDMgqW CcSWmz/w3fyll7Pz9ePEJ1gsIcSiRDY/kTIBa213pS+TXM2Ux7+d9sPLlAg8rloCWpyP dMug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738343628; x=1738948428; 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=JT4Ih6F0+FsC+8yFJbyvYs/VpWrxLuqOODLLt/c1GqE=; b=NvYjm93rL9yzPqDUyAroXKF/e6O+yM+GWaupdQHZD5Yep3fvHyxatZ7LHUBkx1KRu9 XSoTLkt1xFvnmOE9ItGx6PPVTHrJZWBf563JmSdSlEWVpUSm6UkKlejBPCV0CkD2c8fG jD/LA4pRN4TofNO5QG5RS9aFhczmtQnjKyCH+vdHfcgqG2HrKsa8p3tjUg2nrEHWgEGj /uoz4HJ27CObkpLgh9jGM/NEhV0wL1gLuutqF1mXg7kKhSKZXjlr+fz5AYb2nJpmm9GF aglNIIvJMSmvacYnDQEiQt3xXLJepNXmFoEBc63VD8SkhcXqnJLUalodfwiWmSHhNr4K GdAw== X-Gm-Message-State: AOJu0Yz0g/ba7ZfFT3kep/7te4eGkuojnHt/uiBFi9N9KuyGv8TbRfOz rFxhChTUs+ikeZpJ92Qtzt+QzXf3tdjJaAVtbG0PWLfG3fOTXKXUxv1cbgc+rn04a2qUqy3gzTM ga9jyD8G15A== X-Google-Smtp-Source: AGHT+IFHNR+Ra4pN76WVIbOaRIkNu2mTY9dFTqs3HMrU96UuZ09XRtla9pI+CJCUKJ9TbvroBgjEa5qSFgRLdw== X-Received: from qvbqj17.prod.google.com ([2002:a05:6214:3211:b0:6dd:d513:6126]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6214:1311:b0:6d8:b2f2:bccf with SMTP id 6a1803df08f44-6e243b910aamr152437286d6.1.1738343628300; Fri, 31 Jan 2025 09:13:48 -0800 (PST) Date: Fri, 31 Jan 2025 17:13:25 +0000 In-Reply-To: <20250131171334.1172661-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250131171334.1172661-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250131171334.1172661-8-edumazet@google.com> Subject: [PATCH 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 Fri Jan 31 17:13:26 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13955587 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 84E071F03DB for ; Fri, 31 Jan 2025 17:13:50 +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=1738343632; cv=none; b=oq2+0CPzYbCV7nvf2stvQEIDhUEIG5r7Aiy1Z2J+03h5z+GXgZ9RApJQfb3xGZJNJH7rcfRDVP9Zsug0X6LDaCHsY1wnhZ1vpqTN0XfUDm5WNYw4YVJF29TXOTFz6DvcVdXrSWaF4VplpGaf9Tit1g6txr1S905uynegWN9PLv8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738343632; c=relaxed/simple; bh=Su71tS1t839pW0Qia6o4NdX50LNBz+q3aZFDeHWJyAk=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=WJsbLSabG54PFK4FWV7d83kVA6gHV4SlPwKRr38coFbzWjqHt3QrKoUe3qvRn8/Lx3NWdigwFq14hC++JZD0Y/2TSudSgUBPfxU6N0yDXSypdiqICEmUBu1PkuHP58cIGAWc8OJUSQmX62bgQSbLO8bhuJh/3iHN+Y2FvpcYRPQ= 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=fg/pTk7C; 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="fg/pTk7C" Received: by mail-qk1-f201.google.com with SMTP id af79cd13be357-7b6e6cf6742so579279885a.3 for ; Fri, 31 Jan 2025 09:13:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738343629; x=1738948429; 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=vZJPGFPK8A4N2BlEnxm50TTESOqK4C81A5N3OIT+bEs=; b=fg/pTk7C85uyYjIk+qnpjoIb2j/Cg4xJIdFBWDtNgns5ey/ad6uocDjpDubmpxDLx9 spu/rP8c3fHo/BW4MNZsU0bKBh9fZpyc9I7sUIuL3n7m1WGlVpTFvjD62TYEOA9MQCyY c6ybwbpYewVqmis2bhwb0PYLSqx1A6dlSVfXFgH8dcCTf58Hw2n/HxpDWJ5XryLSqOQX 0VuVaXg0gD7DbniJuPTTRhsn6JzIBvZ/kZy2/tNQ0rzgLyI4OdiCeuRjOtMANhcupOfs 7gVnOnz3jJZwgsPmw0JLbCwheGdwOZIP73jj49PGMuNQcfTGbQNQe8Bmz2O/ICBUvsW9 UfEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738343629; x=1738948429; 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=vZJPGFPK8A4N2BlEnxm50TTESOqK4C81A5N3OIT+bEs=; b=ma3iNeSQLvGdlkhMN8c2RurC3FJm7w6OBQZhDZiIIQU5op9OwDX32817Pl+ZDU2emC G50Nf7BxRxNIvnxhhqTS/AR7s7sofLNZQcvYdS5EXXi+8Q5bUbOWted/pEpdGNOcwu54 VE/IReorEzziQt94ds4fTGPpkqW9dpqfZ+5CsPGWxAOL4T/VPW9LTu0OG6UDJwwl/Cv3 edDNfWCx97zFl12Bj0fpx3SMYicuLc9fOtqUj9tbPz5504mrB11I8sGo56F3PmGKSu+L f/2XuIlw6cz4lCadNwzEuZYL+OXhsDam4xOZmUKuzVtVUFfHCSVDrneEGh1lb+WWvUKp Yo6Q== X-Gm-Message-State: AOJu0Yzp0FWOFjM15kX76DTTUmhoXRuN2nboEmqr3v49oAewLYoPqp6e kbe49O2FwxnwYu/1qCWnha9ZqkHYMAlFd6+maX1r6nwAC6LcdFe1vzK/tJcNItF7R62LXTiGjeI o3bXRYTVJ6g== X-Google-Smtp-Source: AGHT+IExuckDKdMUBWqVytUXNSvFnpKdz64zrs202tVn+3vn8+BO4WwzTr8y86XnzJbKiWqbWiL2kMpoXubtPQ== X-Received: from qkpc11.prod.google.com ([2002:a05:620a:268b:b0:7b6:ee83:e490]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:620a:1727:b0:7b6:c90e:e227 with SMTP id af79cd13be357-7bffccdfa77mr1645000185a.20.1738343629496; Fri, 31 Jan 2025 09:13:49 -0800 (PST) Date: Fri, 31 Jan 2025 17:13:26 +0000 In-Reply-To: <20250131171334.1172661-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250131171334.1172661-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250131171334.1172661-9-edumazet@google.com> Subject: [PATCH 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 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 --- 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 c472c9a57cf68880a277603b4a771152c6f79ff6..54912b31f57ce340dbaffc3e80719140f4e85ecd 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 6671daa67f4fab28f847bd4d8475ef752a63f05d..1972a0f9c9c39c8b311d536a60fa7d6e79f74c29 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; @@ -1072,7 +1072,7 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable, { enum skb_drop_reason reason = SKB_DROP_REASON_NOT_SPECIFIED; const struct in6_addr *saddr, *daddr; - struct net *net = dev_net(skb->dev); + struct net *net = dev_net_rcu(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 Fri Jan 31 17:13:27 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13955588 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 C3EC71F151E for ; Fri, 31 Jan 2025 17:13:51 +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=1738343633; cv=none; b=qfgX4L/efCEidb4K5RCfsrwoipOLWZpDzBHDHXgoSrlKsTAxa0f9qNS1cVR8+tjzG4O68ALqfz8BV5v1Sf7exzG/mV7ukKd1faCeAvjFmx7HIX+L0JB2zrJ5bPWcZRhCpC8RFal8uw1WyR20ShoG+aWaXArHy2hXz7KqnSLDUqI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738343633; c=relaxed/simple; bh=IbL4pV519P+5BtuvaDgCVnklrPjC6i4lvL22nMn+tC8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=QPo4MDawg/Cg0PAnfxP7kxhlHuSnjuby1/U+Xt5XGGM9hkcIx8DXsE4ZS6yNUFbBKVZBgZrLdc0MprV+fC/5yzS4UGLdJRBsji5atVQBgZy+xTbFBji2//QKxiYP4Pk24LKX7kbe45BXFSerVweYSdwJMgCxaKuA1uWgPbWaYbk= 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=hX1xVv4m; 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="hX1xVv4m" Received: by mail-qv1-f73.google.com with SMTP id 6a1803df08f44-6d8f4a0df93so56555396d6.1 for ; Fri, 31 Jan 2025 09:13:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738343630; x=1738948430; 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=xr0k9J8ircXguZd/XTDGs++ZqClk/BqaFLz/vlFnqfg=; b=hX1xVv4mSSdp1ER5ajVqj16InywsZxJyF/Da/9UrkUS9DJ5gFCg24+vfW5AzJrRQnq 2u+f9kCRvPYZJgwFL9uqzelRuOsVeXZhgX7Sr6FrzcjYA9xQngw98snwBkfPv999E4wQ kELkNcVHXXU9m0xHwve+iicQ8nCBmPvnfMBuxwEjQroJG2pnLuNMXUm90I4fvb6mhkbd k2FY65GM+nAn8HkTKRvdhE9y1Z0mizAmEOg8CabAYVmAFkK8N4vL6cSO+47slxn5SX0H MuBffHTezmuTvtI4ifAWgZBQaM+AXF63kdSNNH+usOfCF3sMs9WGZQ/ZXYsCBbj8F0Io OS2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738343630; x=1738948430; 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=xr0k9J8ircXguZd/XTDGs++ZqClk/BqaFLz/vlFnqfg=; b=TzcTXpZ/BEL8h77tfdx+ILmHwXoWzFEyD8k6Q1QlsX/7hKZHJT92JRz84QkXkUpZBl k2zJH4aMEsA80lpYTJ3u2AUXKA3LKYDFhO2HyGRxIvlkXaoHi1hiZX0GdJlqK0e2pLfH aPxD9MaunRuZ+31S3pHCHMRzm2tpTA5VU0sBGIplAsZSt9IvYT6wPnw33H+TgrY8e/au 1q8dOw7ewTXRWG0IZGfrUtFu9GfdODtXPz1F3ny4H0l6txw8YloV4nH2fjSQB31XE5Jw pw/6hH2tbIZHcDtqQvTx7gmwmTcPVc3QvQwyMadQ+OgVxXkr1JK+GA9DJhNCHOLDgC/D 9lNg== X-Gm-Message-State: AOJu0Yxl+uFCRiIbf+msXpA8p6V6EDYWUa7sqHZ2aeb4xHoh2C5DH/1Y Qzjnvm3moIvz0Yo2J+XESNQFEcc6742Afvn9RNByC69XnpY/GVfXPtnUSREZF0WGzlQmkfiR4al qiuTDjHdhMw== X-Google-Smtp-Source: AGHT+IFo4yaUW3CRbIvGujWFiYDSG7KvZyK/QIHEyAUuvFaykuss0Ka6B4gutbkEKHS0P+ra2hiqHy536ZrQ9g== X-Received: from qvbmc10.prod.google.com ([2002:a05:6214:554a:b0:6e1:a069:1177]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6214:238f:b0:6dd:c594:27a2 with SMTP id 6a1803df08f44-6e243c07fc9mr200676046d6.27.1738343630669; Fri, 31 Jan 2025 09:13:50 -0800 (PST) Date: Fri, 31 Jan 2025 17:13:27 +0000 In-Reply-To: <20250131171334.1172661-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250131171334.1172661-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250131171334.1172661-10-edumazet@google.com> Subject: [PATCH 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 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/icmp.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/net/ipv4/icmp.c b/net/ipv4/icmp.c index 094084b61bff8a17c4e85c99019b84e9cba21599..19bf8edd6759872fe667af82790b77b01212271b 100644 --- a/net/ipv4/icmp.c +++ b/net/ipv4/icmp.c @@ -401,7 +401,7 @@ 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 flowi4 fl4; struct sock *sk; @@ -611,9 +611,9 @@ void __icmp_send(struct sk_buff *skb_in, int type, int code, __be32 info, goto out; 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; @@ -834,7 +834,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 +868,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 +979,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 +1011,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 +1040,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 +1181,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 +1198,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 +1371,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 Fri Jan 31 17:13:28 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13955589 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 A668D1F0E25 for ; Fri, 31 Jan 2025 17:13:55 +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=1738343637; cv=none; b=PEPBq1vfqlDV89aOcKsVk0pVNSl+OH2H+zvjVekdazegJaMbkp4RvLeGnGSy8E9PtWLC6U4fxR6wGzY1Q01p/qh+4MZIYn1UMEpcFiZJ/T6V60chHYdPtwFcYjsCZuMXDMBnH+ax3yxtQK0hyaSgTTb9AKudztkI+iMVjhq4CUg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738343637; c=relaxed/simple; bh=Kqeh1WWz6RdYLQ2QKb5lMAu69FxPl48fIKvGB2KwaEU=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=lmCe9CxGPPclAk3Mgvuz9f51/tcfl9+j6Vm7WvCqCqf7fM2eiB+Y7sxcdyyW8t6SGJMkzBi5JR6R6NhHIK9pSGiswx+48n2iHnqwtwNPaGJN7PoE7QYYPq09pvvXQEnFZlDZqaNdCZH4IaeiYH1pf4KCkkn6Vobu1JmcKz/NQ9s= 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=rVcQ9kQX; 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="rVcQ9kQX" Received: by mail-qt1-f202.google.com with SMTP id d75a77b69052e-46909701869so45371601cf.0 for ; Fri, 31 Jan 2025 09:13:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738343634; x=1738948434; 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=8FIxHvgadOXd2yrzk27k/0y8rvtsIFTf9WLtWftMQlo=; b=rVcQ9kQX4wPvif0A2rBUkPMXdyFY3fT2YW3Rxyihw/zVzGfMeKA4wETx1ojLZmgauf 6wGUt4t47ltHSz1IDPPeVAafFFcLlpogZMuyOespyo3AdA7rrqxnVO3p/I+NNundDpd1 RmEAESozE1V8X2U9Eca9vIlHpInrVmEh95hJ1wv2TZ9xGMU/C8PO4KWJwwhRvO97oao/ 4YgjVlOteGVt8z1BE4ywCSql1aT0Zy29n+us92EAWpnNlQFkQ3gXH7IB0scyJpI4htXB Zynlo+9SM5cIrRQtFtsFV5t4PVABMy+xpFd6bpvTlY+xv6e7yO4H6lQkD4ZEymDTV22d Scfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738343634; x=1738948434; 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=8FIxHvgadOXd2yrzk27k/0y8rvtsIFTf9WLtWftMQlo=; b=KRujcQpoVaTzuMOT/Yc60gGWlSQSmDKWqeSQjKZaUB4zKbZReWce5h8YH3gYzEqJft cKoJ2jehIOuRTAw4vr25lIo7RzZJRBfzyswUjeCZfrfx4Posd7EKchad4PW8QnOHZjeU vqAAP7vZzvL6qitk1nx6EdMRCkzQQ+9Lg7mFhvwZYaidcN5O9+6MWioqqeNsgI5X7xEn qmoOP2FEf+f01CcEbhE8d5bwwkMN+NWIRjr4pJH6FcXgkSc47eVtF/tR9WOLdF+h7LT4 zGcaDfWvxB1ddR8/L+hzBHp/LWyC8tHJomckInzXVn+Pl759tAv5mZ+6vLbKERKpBmrR XHlQ== X-Gm-Message-State: AOJu0YxS4JMyfjl5e9VMCxBPyIOqqEYfiu+zrSuVaxDTYarshItzW06o AuZwZEbGwqZCJEYfhyEV3Skc2b5c7+yHo4YgECC8jVUNtStG5ttxWZuRsDxluO8RmRiKKEzfTk1 EKkIKLz0dfA== X-Google-Smtp-Source: AGHT+IFmFRSikuO9R/BZkYtW+N4LCzuii8eqiQRI3BT1XtGfl1z9jwCh6THkNNE5xgdAj9Aq2JYpu0Z919/n6w== X-Received: from qtbcc20.prod.google.com ([2002:a05:622a:4114:b0:467:84ce:5e8e]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:ac8:588a:0:b0:467:86c0:4bff with SMTP id d75a77b69052e-46fd0bda40cmr177522911cf.51.1738343632217; Fri, 31 Jan 2025 09:13:52 -0800 (PST) Date: Fri, 31 Jan 2025 17:13:28 +0000 In-Reply-To: <20250131171334.1172661-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250131171334.1172661-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250131171334.1172661-11-edumazet@google.com> Subject: [PATCH 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 ICMP 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/ipv6/icmp.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c index a6984a29fdb9dd972a11ca9f8d5e794c443bac6f..cb9ba5d8b6bab340fd4900f2fa99baa1ebeacb0f 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,7 @@ void icmp6_send(struct sk_buff *skb, u8 type, u8 code, __u32 info, if (!skb->dev) return; - net = dev_net(skb->dev); + net = dev_net_rcu(skb->dev); mark = IP6_REPLY_MARK(net, skb->mark); /* * Make sure we respect the rules @@ -679,8 +679,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 +717,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 +832,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 +889,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 +921,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 +939,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 +1034,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 Fri Jan 31 17:13:29 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13955590 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 2B6D81C4A24 for ; Fri, 31 Jan 2025 17:13:55 +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=1738343637; cv=none; b=k5ExwG80M959hPGj1LcpyVxKqZLY224901AZ7bGy8QigJEbtrRhvvukdM+pYekcM9kGohCT0On5+ovlGsDGijGOQLTpddy2fulNFGOzYgtiSvB6IsmnxWjSImrLv7C/+jPMvqHG0hty1HfhMvkXAq0Xyfnwtfbt4LhvwdIw9O7c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738343637; c=relaxed/simple; bh=S4kgQ8BdXq/TdAZ7H6He9G8UV/L3A5YOQeh4Jaak8Fc=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=KNfhHcy6srNdImbrjY9xayX5dInDexfdSsnWOU1Fp4S25NY5gS5mDLwY0JR/LSNALmPxfILdk9eYlhwBBPRxElKYa5JgFJ/LWD95F0liJuvgabPDmTOrKQZOIbyBvPQp7BVTdJiGzv3zbc+8WD9dKDITGesCkVGCGDOf9kJfCI0= 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=BhAXfEh7; 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="BhAXfEh7" Received: by mail-qt1-f202.google.com with SMTP id d75a77b69052e-467905ab1bbso64301661cf.1 for ; Fri, 31 Jan 2025 09:13:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738343635; x=1738948435; 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=eFHQV76ZnLVC/qjDKSlypzkf4Zt/+CO4gQ4lH7s0JB8=; b=BhAXfEh7aUgeHF6DLST7esVwob3lZC4afJz7xVBj2iEeBHwcvMhXx+XH2tgK4ClJtd EnUTtqfktnu9nMjnPGVU+hFodLzMCXS12KnIDgjHUd9Ta7NXXtWK0Rjk5mvMNT3CXyJD bWGDkvvYKdYEoEblO3U1Dl+V11q+b6Z7DfCfooDkIx2Gv1fo0WmgkfArJ8jtU/HDxA57 PcKWac9uF0JZrxN54sgyf3aWMBf2hNyvoE4K6KdulTFndwHKht5jur/soeVGBv57oUaB /IFnG8QVguB92o1+Kh1+IesZaKGBmbjy/BF4YUN2lV/K8CiVi9btrWDgUeNFNxcWGIsy BGSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738343635; x=1738948435; 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=eFHQV76ZnLVC/qjDKSlypzkf4Zt/+CO4gQ4lH7s0JB8=; b=owmDrX9BVZtgJAFXRrGX4pvhCqnX4cqIGBrpKPoVmuw3c1+ayk2fjyMuV+14chvEmT DiBJujawYTcwBxPplEbvWnb3pRaUW/h5A7T99YsVy635yxoL8TU41NeBWkfpVvyyuy8q d9bMyDkGmEk2NUhqHIwoW5p9HUhxfwZkjsCnJ8mwe/faQWKEVX6L3LnUegn2y1ESZt3y YgvQFU2ig/r2r/jVRqZfKuW+QsS5MQ03qsF5LG9q8jajU9U+H/owR5DpiiZIKAAoscmG YdyAd8EhP7GEzACXsRgvNnL16IS4arNY9nQaZi9W0bPzWoOmzOGAI+InCloded/eodYO q8+A== X-Gm-Message-State: AOJu0YxMF9js+qQ0SZwbY5LtqAhHao3OqzXCP5CXyFXHSY2vjpIGVpwg W7nUZXvzquT9DCgs31LYxHqQNAEjngrS/hrBcvJosaSp747cKfSrBotYmBDHLWjbG7UpcATyWfj 3A72neTutfw== X-Google-Smtp-Source: AGHT+IG8lPVOnnpSVtUE3lPuTQjrJYATDmcTF/Dgy1jKxY2iVklpAsD7Yae/HAi/V0c/9lBIPEe4C+VHC9UyCA== X-Received: from qtbbb14.prod.google.com ([2002:a05:622a:1b0e:b0:46b:1ac5:905c]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:ac8:7e82:0:b0:462:c14f:d13f with SMTP id d75a77b69052e-46fd0b6e2aamr183710251cf.41.1738343634999; Fri, 31 Jan 2025 09:13:54 -0800 (PST) Date: Fri, 31 Jan 2025 17:13:29 +0000 In-Reply-To: <20250131171334.1172661-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250131171334.1172661-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250131171334.1172661-12-edumazet@google.com> Subject: [PATCH 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 Fri Jan 31 17:13:30 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13955591 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 B59B81F0E2E for ; Fri, 31 Jan 2025 17:13:57 +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=1738343639; cv=none; b=MTovATICBuJa6o4U6Jj57g1S2N0J3kZe55t94dXPBvS0lMHx317FdaqdN3D/3/F//XEpKczdiGA9lq8WjpQk0davcsqgtWNvNaYbDAQYJfpNrrg/9/4sUOkHJlu7dsKyyTSX/tiNrtKcw5teEzH9FEQa4d2yy8tf+YOyqB4JGAc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738343639; c=relaxed/simple; bh=Rjkgkmd9WlNhCGLwhOYrVQy7Fu3bO/Qwn1QgOk94YJQ=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=FmRx4s5st5Fcdf3mqFjQ1soXhl2t37/x1C2vViPoSKZgRyR+qEnjXfW4gD9YtzOeu/4mKEhjRyCwVwL6PTdCtBLmU4+b2GvKFqC288I/SiS41LtGwl4QAz77eo7vVo4gh8UgL+WQ/0U11dEYXyZXL0YuKlKVY9sLdM/jdHHJt1I= 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=CYRlLuqA; 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="CYRlLuqA" Received: by mail-qk1-f202.google.com with SMTP id af79cd13be357-7be96bd50caso426717585a.3 for ; Fri, 31 Jan 2025 09:13:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738343636; x=1738948436; 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=fCuH8g8ti5NQ2ZijQC2+wOKhhnOhYLNmT0OBGWEk+1s=; b=CYRlLuqAsQKWzbEV3emWR4YyXi/N4JsRFn0Egg2dlRhHOQdiCpxeWbU7LCE3kFCXYP q9SJzXYft9ae9yBdMRNHHQrzTUyOoihzZb4psqoN4liNLcxIV97TdMf2nkxe+sUXS2AX JnBlnEGo5kpmSdrsf13bOS1UFrOBIPKlnoK936C/EYUVQ0SboVKZQaXlwwqt8AbbREnF zXiFTJtw/+wez8p5+vOOOrvStFz9RvM6TiLFKaXB5lqFWWEOACJyteoBjB6dxW433kGD B9u6vEqkTcGFDsSZ+9fkz+6ad7AdxZ6Vkh3pJyFT0+Ihpht1FBGB7LJip37FgZeI0ZV1 Yzrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738343636; x=1738948436; 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=fCuH8g8ti5NQ2ZijQC2+wOKhhnOhYLNmT0OBGWEk+1s=; b=PaMYXptz5kLTGjgYwyRlfCSTPmK3o7HtgtcoE0ZEOKTbeUmjP2j7KMs4XIADCixr0f Y3lIca1oeydV3huKl26pV+8/d+ZMhOrt0IAvfDq+4rJiJVzHpWNO7JFxgLjIYYhGoKYw xByyv3kOyWT6UdR04HNzZ/DZdJdE+x826xXSj+uSqh4Fw/7vmdSTyslxLW71KZRZgDgf LYtUqQHo5HjpOhw6blr4RwAANW6ltREEAxYtCY+nKmybTTKp0sq4e+Y85uaN+x3RZvno bFquGG+f0mgp6ttBW62kzxYfGlWUqG7kLbiNZ816MDspi8pdiM0NDrXljmlXRjFBF8vN cUlw== X-Gm-Message-State: AOJu0Yy4E1P7GO697Xa44wj4w2uGrAFsJGSKaifkJbFNRXZ9632NnNzG V+75fSJdTdE2ynrot/fS5qa7Xc3+nf1mzu97XUZpDR6IID5UR9px2TwoAyrMT852V/0+o5cayka tNMAHUTAYdA== X-Google-Smtp-Source: AGHT+IF5BgOJKOJyRzueP/Fylsd2XqzmCgDR0SA56Bon6svG3Tw4uwE/sp+7vb+iYf4FGHhBLrGg4GwAfHXc4w== X-Received: from qkoz12.prod.google.com ([2002:a05:620a:260c:b0:7b6:d073:9cb4]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:a05:620a:2586:b0:7b6:d0bd:c7e6 with SMTP id af79cd13be357-7bffcd125fbmr2052865585a.32.1738343636619; Fri, 31 Jan 2025 09:13:56 -0800 (PST) Date: Fri, 31 Jan 2025 17:13:30 +0000 In-Reply-To: <20250131171334.1172661-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250131171334.1172661-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250131171334.1172661-13-edumazet@google.com> Subject: [PATCH 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 Fri Jan 31 17:13:31 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13955592 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 2A6F31C4A24 for ; Fri, 31 Jan 2025 17:13:58 +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=1738343640; cv=none; b=RqAoyz/+YI67Xx8iWSsVnwNxPfQkmW8FN7k2+a/pUlTuAHZ3zFn/jJ7cd6kLF7Kx1Y2G1itRr4A0Bfrn8qn5dkQE82D5ZE522QhdJvelEhVyztOAWib6jIeIwSRn1Qtcc/RVRnp87lT/25nib+OS8f9JRFMV52OfoGB+MIlVy4c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738343640; c=relaxed/simple; bh=TJUuhATaHzNHKt8XVZ3VUbOXK6hsTlECsNjh0vNzD4I=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=V2cV+fE51b9fxXQl0koLurk3GJ1agMXtSuV55/eYWJ3K3L8kEwRydUAnnEUY+lkz1RQIa6Zzco2Om4egXYqC86wWbIs6TeZYjudt//8cVY21TUdbYsLvazGeh7BYNkLwEQGRRonfDINk7jCa1nOzncOI9T/A5a8ryk1yw0/ogPw= 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=SfudvH8B; 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="SfudvH8B" Received: by mail-qt1-f202.google.com with SMTP id d75a77b69052e-467ae19e34bso67522981cf.2 for ; Fri, 31 Jan 2025 09:13:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738343638; x=1738948438; 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=g+QIm7omUWzts0y3PcIC44x6+mC9JZr2uTLV0MOND0Q=; b=SfudvH8BJA/lcL+LgiRsIk77eM6+aUCN9hkegqeWisCSn5eHeDbVVu+lkeuNIBDD7I rzEejOgsALiUGW3zrsOdXXOwzR6UkRK4ScQztXU3NlcTFpuYhtmlYqj9HjQoANL6nmkc 3tqnjtK/Xk0o5q9ziaoy185m+LyblsHsmMApOtCjf+bFn+b3f1wfJKquhl9fWbRw+jfy jUELW7cXkRViicX7o2NFsqvS6xiHi+/hXLNiH5w6kFMxC8ayiLPtFF+MA1jbcCNk/GJY DzIaM9D5/biMBdl2dQ0IzbzopWeEzzrqJFRNQyBSmbpZpOt24xtcxHig+wCRuEZcOd9L x6ag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738343638; x=1738948438; 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=g+QIm7omUWzts0y3PcIC44x6+mC9JZr2uTLV0MOND0Q=; b=B8CEbH1EfMoy7Y9Sy6wDu1+rRgrtfoVwqPYK8IVXQUOZGeR/j6Qupe9YMdm7UIfJD3 lcxoovmc4u0qIXcQGkKJY4Fzem2m+fSbZVd895JCwOaDhG+joDuMe1h+Or73n6++l8is eozOqH4m57jj/tfOyMtobGMxuOD5/O2ahGPJiWJIiht85p3Xl8cvbc0Y+bcC6z2Yg6A+ Q+wf0M4ro6YIQviRzWH9nuDZnRX5s66McISa/vfhob9f82rvEMOuD5OOIfXltA14FsUv YBmpxkUAoKZrN/FXN25IzQUJ2Ho0T7s3o/P8oYjksmOSJJqd6Gu7ZVp1EShA5E2HOgkz ppYQ== X-Gm-Message-State: AOJu0YzRljoEuvyeUsMVghwva8Ow7fkLxKfclfN3XQf3BIY7fU+a+rTc WnkS4txwvS/QF7aS8Jn/Ujo20e4M3etDv6mwr0LVcmAa7aArGtzuTUhWSqzEEjP/HXe9cNfTn7p VsYUIqNfBXA== X-Google-Smtp-Source: AGHT+IHMYi38uhenyJVthKD2lUHrS3Bbq1RyBRnk6ksPdq7kPAQKczxVUKktskuZeU/bYNV6u/eiOPFpL+05Jw== X-Received: from qtbhg20.prod.google.com ([2002:a05:622a:6114:b0:46b:19df:3299]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:ac8:7d89:0:b0:46e:3538:5094 with SMTP id d75a77b69052e-46fd0b6da9fmr151960681cf.36.1738343637989; Fri, 31 Jan 2025 09:13:57 -0800 (PST) Date: Fri, 31 Jan 2025 17:13:31 +0000 In-Reply-To: <20250131171334.1172661-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250131171334.1172661-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250131171334.1172661-14-edumazet@google.com> Subject: [PATCH 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. 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 Fri Jan 31 17:13:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13955593 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 7C9561F2390 for ; Fri, 31 Jan 2025 17:14:00 +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=1738343642; cv=none; b=UXFzuByfLAKAaTTxrhxYoN7QdxwSEvnN41HopHxBwqcV0BQTf9rPjUHmo2KeDJPBRMSt4w6rvq3TQbTFM82FP96PBWmQ1DCbR7zHX9earf8xekOzi7oo4QxpEv7U/eko1zU5rUg4vL62N2UMhhUcSEXzNfr9j9DdnGOKi62hEoA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738343642; c=relaxed/simple; bh=vB1tcCBfi6QS2jhS7Otwrdnw2ozc1kTc/2lNYJtWrj8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=SS8cmSdkgJtXdOjmOS5U5ai1gLkihbzr9FI1Hndik7L2GZE66MnFy9v8Xw0PN3jbu607ls69x1spawbO2m0aAOcWgRZHs1BXP/XY8Av9Uj6hghlRaJK3rub3XIhFNNSu1krP0csy8CpodiQtfK8YwATI6l1fQUKPsy+pKSb/sWo= 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=PLS+YlMO; 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="PLS+YlMO" Received: by mail-qt1-f201.google.com with SMTP id d75a77b69052e-46dd46d759eso38084701cf.2 for ; Fri, 31 Jan 2025 09:14:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738343639; x=1738948439; 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=LMYGwiaH4MNc/5hPheSk1j/6B+0JYlfvn+NzQmGNcXc=; b=PLS+YlMOzzP8PMYI+zHoOyc+xrLs2YLdqa6oGJYGbIcQJMLhBC91+sIkatvt1CL/+x qUZ0JUnIMEptGQFBEjrqxyqnllln+vyGCNk7MQeAcDyg4dp5KKdSBjTH+NQ+RNKVFPpt HC/EcTBeawEsAOBdmjoH14Y6quaK2Hb/cvxDi7S5efSyestQOPriQPu8hGZ2wrJXEWMa dABpe0kZ1yU8u04mFpyljDicpXek0+WwCn8gwDOWlKKB8ik37gZUJzxBs7jntPdx0ROD 67840288Q0hvz1JDyvXLHnaqSAwXhW4USj8S49r08WUAhGh7OM2fZvaHi7pEPmkeg7y8 UIGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738343639; x=1738948439; 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=LMYGwiaH4MNc/5hPheSk1j/6B+0JYlfvn+NzQmGNcXc=; b=qWvVmaOR7h8Sr+Lep4iZA+CTC2CxIB4MtzdZ1no51Zk6UNCKOK1MWO7Os2yWQpwntp kZLrvNj3wrFOaSbEobC2eLhQh8rekHWpp328NiHatN+QmS3Fhqj3Tnaj3XePg+84fVcG M0VG2XW24TRAzwuMC1PO6dA8CvMwLLuWjSCzrd4c4A0P3SHsFN8DJET0DYorzw1wdn0t HF3+mDBoEgVKwJYM87gjYSAFYro/BEzIE4alWvmrkyrKmMZG11iJf+LmZN+Viz8dA5vL Xp2Sf2wLeqFpWgjMTqMI7Ik92jM0Kzdafn9DZQAGRif1AGKDoBPDsmGp7mcSmPD9psg1 Wg6Q== X-Gm-Message-State: AOJu0Yx12qbPwObnKT5+gLcMoUUzWfEMC2IyIy4QhHnLRVyEQu5quGTm 1dnWCanBFJRKhoHIb7YbsZu24MXc1xfHj1mIJF+ne7BqyTCnXdVswVJsS/2a5RYyBRiNdEIkiYK /DYlo2zjzyA== X-Google-Smtp-Source: AGHT+IEbizUkcAuCGTDTIhoLQGhaq/mgv3mgNFv3LP8mZ1cYzF9dLHd58Qc2s1GONcmrUdiU+AYa6ovXYvq92A== X-Received: from qtbfg5.prod.google.com ([2002:a05:622a:5805:b0:467:6ece:2e03]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:ac8:57ce:0:b0:467:6b96:dc5a with SMTP id d75a77b69052e-46fd0bcc544mr197993351cf.47.1738343639399; Fri, 31 Jan 2025 09:13:59 -0800 (PST) Date: Fri, 31 Jan 2025 17:13:32 +0000 In-Reply-To: <20250131171334.1172661-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250131171334.1172661-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250131171334.1172661-15-edumazet@google.com> Subject: [PATCH 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 Fri Jan 31 17:13:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Dumazet X-Patchwork-Id: 13955594 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 689FF1F2C26 for ; Fri, 31 Jan 2025 17:14:02 +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=1738343644; cv=none; b=gBzXkCqOX42J45tkfnIgAuOiecFte8IX4fWih/O3Sa7tv/UEaZkiBxJrgPINEBRcbz7bp67bbeO4vX7vdwj3J3QUUeiJLu7p+7YGZ2v++rxr4UBLAd96ZigCvjmmMTghINsRDnTk1KewTIGzSR+MWq2lZ/dzvykW4ZcdX24+g4w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1738343644; c=relaxed/simple; bh=z/Gd/AyBzACxdLrO82JAxmDUrQMb4RAwi7zjP4LPEbg=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=qT+FPR8vNXYz/XumzAclv+DkOJcU+d1Bjzbe+nS9qQ3coDBHArCwL5AX5rCE42mV7U95d81Me3zGILqynUZqybf1eHGvZ5dacr/ccvxiWAfoxU1isplIMAn84WYipTj39kxoQ9aCwE1lLbaeTVsDdYsJV7vCnjAUZMjyWd97cZw= 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=pudoRze/; 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="pudoRze/" Received: by mail-qt1-f201.google.com with SMTP id d75a77b69052e-467b5861766so42755141cf.2 for ; Fri, 31 Jan 2025 09:14:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1738343641; x=1738948441; 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=MBfobVX0dwL0vKD9sn/rDO4moLPZx2lQR4FzHvX8FCo=; b=pudoRze/yxn2EyILvFWZYQagymzZ4Tva8L/Z5wK7Z5w5ouzP/dHB75ncZ3ZsH/9fqT oeRZMGjLGkO9CsewqwBRb/oLHJblTrkxpZhrYUSqJHYMyJE1nE3M7R/jgbUxTakYi2Hk bkmD1/OM5chv2hy34niWcb59zucIm9DCzU8LM7dgTxXmfMdKshQWcF1lStRNuYMxlNJf vSkVpM2iJwus7oJJckg0OaH0kBfQ7bGQqwdJrMiU/PFwmmQFB/i2Lejgb3Kuv8ycC1C0 /rwt7coLU0fuUm5LnYnlmlHahATM+VO19uf3mr4SG1XPFdrDHUUyGlz8Uc+fDoHcw2rl KB+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738343641; x=1738948441; 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=MBfobVX0dwL0vKD9sn/rDO4moLPZx2lQR4FzHvX8FCo=; b=cjaW/zZkAzjhMhVDuCj9jNGqYzBhyBMR7ZOrsAo/zRB/O744AOr8nnzZ3K89CMYiU9 Qj09KPE03MolYJ6FM6YhgGd/wi09aOaLra8MzuL42AKHzfnildyxkeeJZI7p4ApwVfqB t9A4soZRk6iI7MSFYxbvdfr2GqEx74RcM0YI0W6SB13FE7cmD9jiVdeJj6JsKKy+Mdgh tQAKPj+lm7BJOSKrduzGsiwYTfTXl1X+2Z/H/XvwU5WnOBXeNfsjnSh8KSVSJTcKA9tz J6V8wEoBKv/fovpGI3PlpwTDaCegLrDc2RncDRItd0Q4yBE0556G4ZfeiLzJCgdTAUfb NoPg== X-Gm-Message-State: AOJu0YzU1wWxOj+r/MDGx9Rh1Etg+LjvGWr6sd9K2rmAbtndkKp+F+er VuR5bM+o4ZOSm5TYbacamMLMVMIzs5FBYC2snZs4TShCmsNdSSLijK9dEQHy94ZwTYA8Aguao0C z2uVkidwjBQ== X-Google-Smtp-Source: AGHT+IGZfUd0OVY+AINu8eDSPR0yo+hDcTYFywZq7XGHO48zKKytSl4RyK9sEqPRxaAydbXQLI0fZsupG88NMw== X-Received: from qtbfc11.prod.google.com ([2002:a05:622a:488b:b0:46f:dea3:63b]) (user=edumazet job=prod-delivery.src-stubby-dispatcher) by 2002:ac8:7d13:0:b0:467:677a:74d with SMTP id d75a77b69052e-46fd0acc386mr150235951cf.25.1738343641405; Fri, 31 Jan 2025 09:14:01 -0800 (PST) Date: Fri, 31 Jan 2025 17:13:33 +0000 In-Reply-To: <20250131171334.1172661-1-edumazet@google.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20250131171334.1172661-1-edumazet@google.com> X-Mailer: git-send-email 2.48.1.362.g079036d154-goog Message-ID: <20250131171334.1172661-16-edumazet@google.com> Subject: [PATCH 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: 3cbf4ffba5ee ("net: plumb network namespace into __skb_flow_dissect") 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);