From nobody Sun Feb 8 20:44:11 2026 Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) (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 325DA3191BD; Fri, 5 Sep 2025 17:25:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757093130; cv=none; b=ti9BaFx3NlbPcdxq2xZ1+rdOU+pTO5X0s9xifYwJZYpE/g5uneGPrJQLw3GG+rfupOVFpiV3EXvd7yxhwFYfIEx9CgPUrglJ5KHAa7L5/9qitHSEfBYhTHIJYPBjtjzn+oltFI+0m2FGkJUW8v/tPgCeBaRNheJXr3EbDA9zBw4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757093130; c=relaxed/simple; bh=Y2cL2CM8ef0LBZWCrR2npIMKpR4HevyWNbeYU+ljeao=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tihy2ScybPHFMGVqFzWEU12stbO7uyQ8qiOUZ23c+2nDGbRKA+Yx2OejGiHtOJaSXe6p8TZspL0ISNPM8an7jZ0eupFCeAuJ8rBtEGTje+NTGi/1sRV3mtRRuFsyNIKXu1wx3P2HwVd0UYgNCKpUjJxSUoqpSjAOppz3pO4ZQ9Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.218.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-f54.google.com with SMTP id a640c23a62f3a-afcb7ae6ed0so384665466b.3; Fri, 05 Sep 2025 10:25:27 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757093126; x=1757697926; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DkvSPla93Dt856hF1a7lZwE5EkX9Dd0cV124BnG0es0=; b=rYe1/wxctWqB1fi8r2Ie73L596P60KWfWuHAttYqR4fFkz4XwVx8ySF8qv3ETPqghO +/pQ159u1T80mlvkm1xY8+r2OTQ5LIOsmEIxnB8TZRTp0ycu+Vx3fO8GJRoRtzY+BN1Q LoMF2Y8X04i+Wqm31eTFEo1cOt4FkYNNE2LMQsFqWn3xpl2XPL5UOG3TD4zbVKrkRqBv jEZcU6ULIX7Wpx+ypqiqMkD0P4Il9Y6B04mLu64OKRN4ew54Ukj55tDQ27Rh3YkQnskA goMXNmx7hL6wmBwBRvazLhxcaEL6/NxpIHQK5OIECwD6uBJnl/XxUN29shdq10EgsYLQ DdYQ== X-Forwarded-Encrypted: i=1; AJvYcCU6veGayU7LjtvRvPiiRrDSXvw2L1JMfwAGW6IyFIsryNjEQLzrBxuPbPuZIWYd4OJt+7iNbk7Z@vger.kernel.org, AJvYcCUCbr8c7STdB6xNG9xqS+jXbHaNHtj9ta7wbicuHD/4ADTPex5ldGP2ahcuNTolu3eYSy+7hW6M2HRDkwn7lBA=@vger.kernel.org, AJvYcCUOoi0n1K+BSFocb+fUlgGngGupe1X25Dvsn4T8ZkZQyEcIzeF8Yze7kQmhqwRRIuM+8xBCOYJS@vger.kernel.org X-Gm-Message-State: AOJu0YztZTNN1JGKLYLDibU9mQQD/CG6hh7UFm+buy0WgqYeOhi3iR6g KNW4DX3eAZma7DGEMt1kBY3Slzu8MO8CiKx/GZdxpqfxGst3wCAAw0NL X-Gm-Gg: ASbGncup8zl6O7ahyZsa7oFGjWy+2NSb2//cdxJvIZ39aRXb+rnx+ZF2kbLUr6zzEMJ YBWm1q/k7XSB0ZgGMrwW4Gl1X54JXiLRNvWBADZ+6WuEqjN5XX8P6pXDoJTaQtmcatVXshAymKw 2z4QP3YmRJK1wUvzXlQ6zwXCBn4NffeR7YJAMmAc6LSgkxF29DIlV0FLrNAoLuiND65cUtyplii KbhWE1Hx8LoIc4YpCUkJfqv4CZgYo5WO2hM8kta6hCidcxjodn37TTcdl5B/z7e6vYTYUL4Pf8Y iXiDC22EkmxN4iSQvPKc1vLCvaom/ZZPrNZslsgldNZAN1BJPX1PS2bvrH9ul3+fH0z2Dw8Q2DA Yor5V0H1Z3kMDw4ZO6kBaBjo= X-Google-Smtp-Source: AGHT+IHZNHOzCTLu5B1UuBIpDxd2yWEGYNKxFVvQXi9qBB7P0Y3feStu7lTLcIoWOaS98cHSOIs2wQ== X-Received: by 2002:a17:907:fdc1:b0:afe:b878:a175 with SMTP id a640c23a62f3a-b01d97a0c24mr2557577666b.46.1757093126253; Fri, 05 Sep 2025 10:25:26 -0700 (PDT) Received: from localhost ([2a03:2880:30ff:4::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b0426516668sm1313660666b.46.2025.09.05.10.25.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Sep 2025 10:25:25 -0700 (PDT) From: Breno Leitao Date: Fri, 05 Sep 2025 10:25:07 -0700 Subject: [PATCH net v3 1/3] netpoll: fix incorrect refcount handling causing incorrect cleanup Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250905-netconsole_torture-v3-1-875c7febd316@debian.org> References: <20250905-netconsole_torture-v3-0-875c7febd316@debian.org> In-Reply-To: <20250905-netconsole_torture-v3-0-875c7febd316@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman , david decotigny Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, asantostc@gmail.com, efault@gmx.de, calvin@wbinvd.org, kernel-team@meta.com, Breno Leitao , stable@vger.kernel.org, jv@jvosburgh.net X-Mailer: b4 0.15-dev-dd21f X-Developer-Signature: v=1; a=openpgp-sha256; l=2614; i=leitao@debian.org; h=from:subject:message-id; bh=Y2cL2CM8ef0LBZWCrR2npIMKpR4HevyWNbeYU+ljeao=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBoux0CXzKDzBcB2ock79juPuqbVcy8Z57Wdi9h7 EhzpIBUxuqJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaLsdAgAKCRA1o5Of/Hh3 bbQvEACkkIRatGO5oJfTm7pj0y0Cm80mcErUguFwHsbPMe+AWbOdWZIgMWotUStcWcgf09XPnva tZOXRCn/fvBMa8aqwysk47WKWTJsV/HxKmMslr+6aApzTtEk7r64FAxsHxCfSvtjOIHMM9nOYPw Yo9ruEU4I5pP0DwjbBMiXNWC4dbGYQAehRkOmqdxoxBaAnMCGBTwOI1RO8D4JcDivGu7dtvHGTG H8Xq8HZ+80dVSrsSONPNiOsPk3Y/ZLj2aBRd1JKuTK49swb/8Bjol2LWRe6bOkTBGXMXSYP/SLZ /p9/sfY7uUGqxlI08zc+vkcM8kbdpoVzp9whM4dXFg7EMTw7xtK92DOv5GOba4l9+6nJhwLfu8Y ff489kWI0sklPdh9Ib/1ZjDMG21EAoGxXy291x8X2X5saOqHhwrjTYDa+bDRFyGL172d7li2Myd sGCG72R1Dy4vSYzaDbV7qMp+rkCWEBLNALtwhRzWKoon62qW860Gbl9H5UjwKYXFcaWsrhmOwoy zJYof/VpWYok+NwP4cPvxgsNtEHKTk09/FU7vU7D1/u4TJABnp8I5SW/r9Skr23BezY4Vwq7NkZ KiMUEHK2m4d5C/5TjHMLKafI6VKE8bb7I3G44n9swikJyX3hMN6qKs+p/Ag2sgeGCIWgdNZQmY6 lcA0yV8XAH665tQ== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D commit efa95b01da18 ("netpoll: fix use after free") incorrectly ignored the refcount and prematurely set dev->npinfo to NULL during netpoll cleanup, leading to improper behavior and memory leaks. Scenario causing lack of proper cleanup: 1) A netpoll is associated with a NIC (e.g., eth0) and netdev->npinfo is allocated, and refcnt =3D 1 - Keep in mind that npinfo is shared among all netpoll instances. In this case, there is just one. 2) Another netpoll is also associated with the same NIC and npinfo->refcnt +=3D 1. - Now dev->npinfo->refcnt =3D 2; - There is just one npinfo associated to the netdev. 3) When the first netpolls goes to clean up: - The first cleanup succeeds and clears np->dev->npinfo, ignoring refcnt. - It basically calls `RCU_INIT_POINTER(np->dev->npinfo, NULL);` - Set dev->npinfo =3D NULL, without proper cleanup - No ->ndo_netpoll_cleanup() is either called 4) Now the second target tries to clean up - The second cleanup fails because np->dev->npinfo is already NULL. * In this case, ops->ndo_netpoll_cleanup() was never called, and the skb pool is not cleaned as well (for the second netpoll instance) - This leaks npinfo and skbpool skbs, which is clearly reported by kmemleak. Revert commit efa95b01da18 ("netpoll: fix use after free") and adds clarifying comments emphasizing that npinfo cleanup should only happen once the refcount reaches zero, ensuring stable and correct netpoll behavior. Cc: stable@vger.kernel.org Cc: jv@jvosburgh.net Fixes: efa95b01da18 ("netpoll: fix use after free") Signed-off-by: Breno Leitao Reviewed-by: Simon Horman --- net/core/netpoll.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/net/core/netpoll.c b/net/core/netpoll.c index 5f65b62346d4e..19676cd379640 100644 --- a/net/core/netpoll.c +++ b/net/core/netpoll.c @@ -815,6 +815,10 @@ static void __netpoll_cleanup(struct netpoll *np) if (!npinfo) return; =20 + /* At this point, there is a single npinfo instance per netdevice, and + * its refcnt tracks how many netpoll structures are linked to it. We + * only perform npinfo cleanup when the refcnt decrements to zero. + */ if (refcount_dec_and_test(&npinfo->refcnt)) { const struct net_device_ops *ops; =20 @@ -824,8 +828,7 @@ static void __netpoll_cleanup(struct netpoll *np) =20 RCU_INIT_POINTER(np->dev->npinfo, NULL); call_rcu(&npinfo->rcu, rcu_cleanup_netpoll_info); - } else - RCU_INIT_POINTER(np->dev->npinfo, NULL); + } =20 skb_pool_flush(np); } --=20 2.47.3 From nobody Sun Feb 8 20:44:11 2026 Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) (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 B50CF3568F9; Fri, 5 Sep 2025 17:25:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757093131; cv=none; b=SgXGwEFPxFGxF+0InlYpsu8FnVv5C+y4JCWLdw3c0+hUDEsq4G+H0msWO4LH9DrPVJu0um6mKrQ/dkLfcLbfgA518aXuLk2Iu/lJloat6NG7NoDbnSjWtKWUmV4s31IOO66bv/v5bwk44tikjYMD+icK3MIEAuJxBI4kirZpXKg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757093131; c=relaxed/simple; bh=bfYwUE4OVS5dIORTV1s7iqAOdSg5SLSB644QnoX7bxU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=M7GnEeofcwFcxLxySoEn483SfmLhLONh9X1TCnIu524zcyPqO78+jaanci9Ljk2xrboA/KcbJdsQw3ngBC0lONcUy1fw6vUTgL0Bo1cmIgPa5SE0OHiFcKt+ayVgD2NKpm7SwIiDxcf6ufEEoUHkFglsC7vmjW/bprMnPaFhXT0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.208.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-f45.google.com with SMTP id 4fb4d7f45d1cf-6228de280a4so767385a12.2; Fri, 05 Sep 2025 10:25:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757093128; x=1757697928; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YEMO7BCjA9GH881UcwMUUQsdkiwQYebSV0QqX91LYWI=; b=p3gun5lddJbeSyCfBCuwpiooATdPITl7b0E99cpTn8gUutvVcgApatAj+KsipwTTIQ 7xy9/mPzg8Ru0JnGxFp2vmvwB0WAfsz9Yb4svprjqPXHKSXz4agJ2VMSwnr6Fx3bXOqB wIMH6Bch5Su2UEtgifI0hTREfplLCX34tcK1GtvjEhXnyOqDSja/AZI7YBQ4mvoJCj3o l32cO890oN1SinvTm6vgJE4tINC7dSHBO32xn1Z5zNPfiJwWAoAQUkiwCun9aWZwcDD1 uzIMEoFAWvc6zJQvTc36CzkHKxi7neKQGID05THeRgUIdDl5dkxVzCvfqDsVqA/H2d+V paYA== X-Forwarded-Encrypted: i=1; AJvYcCWJnzrEFw12xlIxKL/gQikODn9MNid6noRnevLILJvcfn/ZZoOeR+LkRmBxK17pQEIgwUs7MV33mVndZJswCSs=@vger.kernel.org, AJvYcCXBoNcEbFAe7fXBV7zT76ofIgNlqq2cRXP0fN2ne9CHEGF8RvGpJ+aFbM38GBtxaMKhUHm3lYcz@vger.kernel.org, AJvYcCXLH8CtdsPLu2+0dSdJT5bNrb8isyCQG91gr8h8kt0inajHW67ulmcdBmsR3/+TyCowgSjsRhKB@vger.kernel.org X-Gm-Message-State: AOJu0YxkW1CxN0Wd4yR53uWXGWukj1aIRdCNYCtlQf6+sLI2Tcq85THU oW0pXqcp1v/BxwaHgRjCwVmqsK90kurZDh2e9lvFU6QDVg9n2QH0N1wY X-Gm-Gg: ASbGncsta3/ER5w0GMaXeywEYzFEO6bgRCufLLTV8TiBZyWfjaUkyawx8klPtuoBJTz 5vQXPPYrAYmTzEesHFhHwyBwft6KAnsYmx/jQwGH0qwSHT5NP28lt9BOnEncSr2GEyk/RgvlIaG YVPT+ZE8PBbGSWissHjFunwrhvnMMBqZfzfLSwetMS14v2G1dxQpSK05P2e/A3Y1UYCUCO6Ie0p q7lU6ArPRlrpqggriZ8tXbP7hn9omBlv2LjHKC6C/iAo/TV3HrmBSAurs3FCOXaVX8TFznFPQ6B DsHb5+Q8rslYXx/sPPAm4QBQsVepMWZ0jPdEnUqp60fn2dXMwqLztzdF+VI0Y9TT3s7P28Fduj+ HZotj5/jZBuDdCsmScVvG4t8D X-Google-Smtp-Source: AGHT+IGDHg85vszzUUpPyeKq3DBDkfnWUoJrh3oa+OUrFLf7pI3+IsDMGFppu1ss9rEUW6+3dWJ5MA== X-Received: by 2002:a05:6402:44d5:b0:620:e309:6c67 with SMTP id 4fb4d7f45d1cf-620e3096ec9mr3379621a12.2.1757093127982; Fri, 05 Sep 2025 10:25:27 -0700 (PDT) Received: from localhost ([2a03:2880:30ff:72::]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-61cfc575b94sm16098463a12.53.2025.09.05.10.25.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Sep 2025 10:25:27 -0700 (PDT) From: Breno Leitao Date: Fri, 05 Sep 2025 10:25:08 -0700 Subject: [PATCH net v3 2/3] selftest: netcons: refactor target creation Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250905-netconsole_torture-v3-2-875c7febd316@debian.org> References: <20250905-netconsole_torture-v3-0-875c7febd316@debian.org> In-Reply-To: <20250905-netconsole_torture-v3-0-875c7febd316@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman , david decotigny Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, asantostc@gmail.com, efault@gmx.de, calvin@wbinvd.org, kernel-team@meta.com, Breno Leitao , stable@vger.kernel.org X-Mailer: b4 0.15-dev-dd21f X-Developer-Signature: v=1; a=openpgp-sha256; l=2432; i=leitao@debian.org; h=from:subject:message-id; bh=bfYwUE4OVS5dIORTV1s7iqAOdSg5SLSB644QnoX7bxU=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBoux0CPTyvJRGj9VPc/H4/0CDC+ynTYtupnkgIO cnvSjJDMXKJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaLsdAgAKCRA1o5Of/Hh3 bVwZEACwgoH3hyAiWCL0sp4QmkyT/FDNZQT4zEDqBj4Ksz3H2Ij5kPEKhf277hsJJBum/94ssFg 2WUFtGoUVj9a68JE1I98wzX7Jlp40tKFZSgfxSgnZGEij/r45/qo8cm41S2OTptHpJZH8xNe+27 fYDAh1xpANBR2TWq2/sNDTRNE49CSWaYLskhnXnA3hWbRJXRIEmj43RbO4Mfv/ifYxSASKqlgM0 2ve4I7YkJhlBINAWjF0J5OjkggW3muayiWiwRDG/qtixPT9pOpTDs+wFuqPEkfzamS2kcXWtl78 KTX8pAEOAiBw8fNCWSkkAdAPEQ3vUT5+bAQrfxHOSVl8/PYPaV+SjhpX6ORbvg4MoQ0NAIFgta3 MV/MNRTcwpnVefx0Md/HdCowVsuvb/r0oFlCQvc+5dA9unY+UdVNM8H+bYMLMNZEw/aNmx8UXkd xPhTTGavcPvoCt4sIvFgPvHXXz76b/GiA+1JMblUGHOIWuf9X+69W8otl9oJ91xN34pDf890dQM KwOFztzXkexmpWWxCqEXn8XklPyJ5GfHTUXrmLH4HGxSAESNZIGkDwI/59MgQBe1tqglo1RCI64 jBIeCQlJ6AC01xiYA9N1WQ2BaOKDdb39KKX3tkHR8wZKULHHbfOvak1ayZjJfF3uZ7ly9Y1x6NR 04WMDGzxAhPspDQ== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D Extract the netconsole target creation from create_dynamic_target(), by moving it from create_dynamic_target() into a new helper function. This enables other tests to use the creation of netconsole targets with arbitrary parameters and no sleep. The new helper will be utilized by forthcoming torture-type selftests that require dynamic target management. Signed-off-by: Breno Leitao Reviewed-by: Simon Horman --- .../selftests/drivers/net/lib/sh/lib_netcons.sh | 30 ++++++++++++++----= ---- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/tools/testing/selftests/drivers/net/lib/sh/lib_netcons.sh b/to= ols/testing/selftests/drivers/net/lib/sh/lib_netcons.sh index b6071e80ebbb6..4fc102407e3a6 100644 --- a/tools/testing/selftests/drivers/net/lib/sh/lib_netcons.sh +++ b/tools/testing/selftests/drivers/net/lib/sh/lib_netcons.sh @@ -113,31 +113,39 @@ function set_network() { configure_ip } =20 -function create_dynamic_target() { - local FORMAT=3D${1:-"extended"} +function _create_dynamic_target() { + local FORMAT=3D"${1:?FORMAT parameter required}" + local NCPATH=3D"${2:?NCPATH parameter required}" =20 DSTMAC=3D$(ip netns exec "${NAMESPACE}" \ ip link show "${DSTIF}" | awk '/ether/ {print $2}') =20 # Create a dynamic target - mkdir "${NETCONS_PATH}" + mkdir "${NCPATH}" =20 - echo "${DSTIP}" > "${NETCONS_PATH}"/remote_ip - echo "${SRCIP}" > "${NETCONS_PATH}"/local_ip - echo "${DSTMAC}" > "${NETCONS_PATH}"/remote_mac - echo "${SRCIF}" > "${NETCONS_PATH}"/dev_name + echo "${DSTIP}" > "${NCPATH}"/remote_ip + echo "${SRCIP}" > "${NCPATH}"/local_ip + echo "${DSTMAC}" > "${NCPATH}"/remote_mac + echo "${SRCIF}" > "${NCPATH}"/dev_name =20 if [ "${FORMAT}" =3D=3D "basic" ] then # Basic target does not support release - echo 0 > "${NETCONS_PATH}"/release - echo 0 > "${NETCONS_PATH}"/extended + echo 0 > "${NCPATH}"/release + echo 0 > "${NCPATH}"/extended elif [ "${FORMAT}" =3D=3D "extended" ] then - echo 1 > "${NETCONS_PATH}"/extended + echo 1 > "${NCPATH}"/extended fi =20 - echo 1 > "${NETCONS_PATH}"/enabled + echo 1 > "${NCPATH}"/enabled + +} + +function create_dynamic_target() { + local FORMAT=3D${1:-"extended"} + local NCPATH=3D${2:-"$NETCONS_PATH"} + _create_dynamic_target "${FORMAT}" "${NCPATH}" =20 # This will make sure that the kernel was able to # load the netconsole driver configuration. The console message --=20 2.47.3 From nobody Sun Feb 8 20:44:11 2026 Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) (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 70D2436CDF5; Fri, 5 Sep 2025 17:25:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757093133; cv=none; b=kVbtulWFvQCWiySO8QaotHfmTchub3baZZDAEZX06/VgvBbdAvJDOKnB6L2xoGh2nf6crPWFegNoX48zaGoih+KTgPAboXcd9fSTFM0vaQjy2bLdb/Em9Kfl9g7bMGScPx0eJPi/T8M/ndjLYwaj3uNkUUsuPAIKIJUc/ezdYI0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757093133; c=relaxed/simple; bh=YhgSQPI30A0/pOzsLH+CWqoAMiyIaTdyKoKM5XsaX+s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MgBNKwDEd6Lh61sJGfXGO2jo9L+ro74nY/9Yi1UxkfkKLTCK+qIBzgeb3ca4lU+mFxStz6NVXHLqmoVm6ECS+Fg62jE790osqIwsh2piBBPtaZk/KMLAIUpYBXTGHRbKcGtsPsK9gTFNCHzsAq52dljBRx2WN8wmLW62EbfA+6U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org; spf=pass smtp.mailfrom=gmail.com; arc=none smtp.client-ip=209.85.218.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=debian.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-f43.google.com with SMTP id a640c23a62f3a-afcb78ead12so373905766b.1; Fri, 05 Sep 2025 10:25:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757093130; x=1757697930; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gsc8MlYaU9tsK4NEePLeaaHzeDgrNDnhXfoZAt49ZYY=; b=lVTJfX22vlpVzb1cEYM5WJzMdnpv8Lsg7h0H02uI+hs4hq1UJfCTbrtO8XK+N8pap6 5Pf4s+YdeZAWVqzMc5++NPljHv4qGHaAOOBlKz9mCZHcfi5nwMAJVwKJCvbkPljM9a8v 81sZ+Ai/69CwA/6AVtIgOvf+/tLOBv3Ha25Zf1szjRA0LzHLezGdxTfWZ7RNlqmbA6wJ cypp8Cn6Irj3v/LYn5BUtiynIh/3e0L4p1fPgMnmrMsD0Rq7nXibQ419tTeq6W1evPsb MAYCVmnTTqqDpWH9Dd779k2FpGKuWqxnsnL7QtgMOKuT6r+0Zv2fqdC1KEuqZLgDqQO8 UXdg== X-Forwarded-Encrypted: i=1; AJvYcCX2XXeZJa9mLB0thHehL8qoF15SwNy8ZNJRykqlWDsudB1e8cNwaLLgYubZ5kRmuvJdSSclgUoa6qvNWWQdOzY=@vger.kernel.org, AJvYcCXIciVLVcokr71gn0fVWzeCBTZtfm8TzXQ4lP9JWH/zoGr6PM4D6zzs5yej7Sv8c1wrMErdVrXJ@vger.kernel.org, AJvYcCXbLeapRd0PeVoT/23QtL/ViEO2PprZVouuL7gYVSZevwMmOAY24jM5HJRYf9/1/EbdceQRiwZg@vger.kernel.org X-Gm-Message-State: AOJu0Yw9uor8ilEnfiMe+TX14Mbx6nYPEWyb0TJwGkJ9QN9WMUW93J+o Rhv+TaGstHm1GmYFH749k9hKLlYjLzPOJuBkRPTDtUApuWWDSA17qEax3Ox8mQ== X-Gm-Gg: ASbGncvGG52qSxxKsxgxg6t46KxZ2pm1O+wBtI5EEkViTjfXWycuTIGg7BNNqBJlqc5 mmEcQhLcyBHpWPfABvZN2NYfxwD96LcqkyJ1MB4ZYwGvu0NRoPaymWddzttTha6817tRN6T71Sj hDbnv4J+SOelo+MphU/7PvysYWZqo3Xx7D4VJCiS46tgi9YCHox8G4m65zYBo073ljffFChXxaK TNGrLRoZfuaj4mmkxHgxb8urmQU3hXvB4icC4i3oP+gxF6vfuP4tUMaIs8V9JpWtE3H8HWb3gdR I82jg0foAxvyJhZGe0r7pUjL0GnfuqwX8hOhQpiPG2nyT2Rbl05hgUR6NUQH3+LcinFmxnfR9wD ZB9c30ecJdc7btJsPc8x5Q8E8 X-Google-Smtp-Source: AGHT+IGqmX/C92BZR/M8sWY1XF2SOAm4ZqKGK9vRVcxiVLn6mADL/aMLPdQCuRHKNrezowVoMUVtfA== X-Received: by 2002:a17:907:7290:b0:b04:8358:7d96 with SMTP id a640c23a62f3a-b04835881a8mr703525166b.51.1757093129618; Fri, 05 Sep 2025 10:25:29 -0700 (PDT) Received: from localhost ([2a03:2880:30ff:72::]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-aff0cb2cb07sm1771128066b.16.2025.09.05.10.25.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 05 Sep 2025 10:25:29 -0700 (PDT) From: Breno Leitao Date: Fri, 05 Sep 2025 10:25:09 -0700 Subject: [PATCH net v3 3/3] selftest: netcons: create a torture test Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250905-netconsole_torture-v3-3-875c7febd316@debian.org> References: <20250905-netconsole_torture-v3-0-875c7febd316@debian.org> In-Reply-To: <20250905-netconsole_torture-v3-0-875c7febd316@debian.org> To: Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Shuah Khan , Simon Horman , david decotigny Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org, asantostc@gmail.com, efault@gmx.de, calvin@wbinvd.org, kernel-team@meta.com, Breno Leitao , stable@vger.kernel.org X-Mailer: b4 0.15-dev-dd21f X-Developer-Signature: v=1; a=openpgp-sha256; l=5212; i=leitao@debian.org; h=from:subject:message-id; bh=YhgSQPI30A0/pOzsLH+CWqoAMiyIaTdyKoKM5XsaX+s=; b=owEBbQKS/ZANAwAIATWjk5/8eHdtAcsmYgBoux0CnH0C4DzJqRi8Evz7XiGBi2xlOP6ecxS9e 2Z5KC6FcdSJAjMEAAEIAB0WIQSshTmm6PRnAspKQ5s1o5Of/Hh3bQUCaLsdAgAKCRA1o5Of/Hh3 bTKDD/9+2q+hv1iMWEoydMoxB5EgWPZ+gNGXIE/nYeZco8dBubNHo+Rl/HHgRCjaVfzzclxz371 aDe/EpHcnyCs0Y+djWM+HelR+FQV41x/STSneQS0mG5cJtpMskK1gBw7NPSvCZ0HK+hxFJl5YSN f8S/+/rmT+pVT2mAMLEK5VsiebNsDjAJ3sePHUKNnXYeDl/9sU8uGf4nZlr3aszb4smGDkpSjN2 5VO+Mpt5m/rUMlUKuEZhjTjiloyMHy2fQ5Y2fYJYQh7RDbKYnddEQQTNY30PyQAfLB8pZYxjcYq /kvknr7mlXS3mKOp4r5SM1OX0sjw6RQY//yhqtPY8LsTgaxivuw5VvgFKZDn2UaYRdZF5bBXvwR uXm6KY1VZF8WDsgkKRIMF66MwRXAW9WjJRfzSYJHu26xiRxR892rZtBX+eIKkH/1M0tM5bu6amd nx4a+odVsKX3w0/MMdiCYPJrZqVhD5DynAKG5N5KauPOLScB3QduqGeVoKd0awn5jk9tS2vlHWs fmvE+bhndxDvdY+SRn0irPBSWNgmXzGh3x/h+Cxk+LIUidgDGBtkh96OxhN+gDFreRzck1g4COd M6YMmlN494Hqj6SMrVD5rwkPF9yxS/kFASlg/15BtS1s43frubaENEKY19Y0JQ9k9alEr+7PrbB 23vnsEKBVF5UXLA== X-Developer-Key: i=leitao@debian.org; a=openpgp; fpr=AC8539A6E8F46702CA4A439B35A3939FFC78776D Create a netconsole test that puts a lot of pressure on the netconsole list manipulation. Do it by creating dynamic targets and deleting targets while messages are being sent. Also put interface down while the messages are being sent, as creating parallel targets. The code launches three background jobs on distinct schedules: * Toggle netcons target every 30 iterations * create and delete random_target every 50 iterations * toggle iface every 70 iterations This creates multiple concurrency sources that interact with netconsole states. This is good practice to simulate stress, and exercise netpoll and netconsole locks. This test already found an issue as reported in [1] Link: https://lore.kernel.org/all/20250901-netpoll_memleak-v1-1-34a181977df= c@debian.org/ [1] Signed-off-by: Breno Leitao Reviewed-by: Andre Carvalho Reviewed-by: Simon Horman --- tools/testing/selftests/drivers/net/Makefile | 1 + .../selftests/drivers/net/netcons_torture.sh | 127 +++++++++++++++++= ++++ 2 files changed, 128 insertions(+) diff --git a/tools/testing/selftests/drivers/net/Makefile b/tools/testing/s= elftests/drivers/net/Makefile index 984ece05f7f92..2b253b1ff4f38 100644 --- a/tools/testing/selftests/drivers/net/Makefile +++ b/tools/testing/selftests/drivers/net/Makefile @@ -17,6 +17,7 @@ TEST_PROGS :=3D \ netcons_fragmented_msg.sh \ netcons_overflow.sh \ netcons_sysdata.sh \ + netcons_torture.sh \ netpoll_basic.py \ ping.py \ queues.py \ diff --git a/tools/testing/selftests/drivers/net/netcons_torture.sh b/tools= /testing/selftests/drivers/net/netcons_torture.sh new file mode 100755 index 0000000000000..3608051d475ff --- /dev/null +++ b/tools/testing/selftests/drivers/net/netcons_torture.sh @@ -0,0 +1,127 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: GPL-2.0 + +# Repeatedly send kernel messages, toggles netconsole targets on and off, +# creates and deletes targets in parallel, and toggles the source interfac= e to +# simulate stress conditions. +# +# This test aims to verify the robustness of netconsole under dynamic +# configurations and concurrent operations. +# +# The major goal is to run this test with LOCKDEP, Kmemleak and KASAN to m= ake +# sure no issues is reported. +# +# Author: Breno Leitao + +set -euo pipefail + +SCRIPTDIR=3D$(dirname "$(readlink -e "${BASH_SOURCE[0]}")") + +source "${SCRIPTDIR}"/lib/sh/lib_netcons.sh + +# Number of times the main loop run +ITERATIONS=3D${1:-1000} + +# Only test extended format +FORMAT=3D"extended" +# And ipv6 only +IP_VERSION=3D"ipv6" + +# Create, enable and delete some targets. +create_and_delete_random_target() { + COUNT=3D2 + RND_PREFIX=3D$(mktemp -u netcons_rnd_XXXX_) + + if [ -d "${NETCONS_CONFIGFS}/${RND_PREFIX}${COUNT}" ] || \ + [ -d "${NETCONS_CONFIGFS}/${RND_PREFIX}0" ]; then + echo "Function didn't finish yet, skipping it." >&2 + return + fi + + # enable COUNT targets + for i in $(seq ${COUNT}) + do + RND_TARGET=3D"${RND_PREFIX}"${i} + RND_TARGET_PATH=3D"${NETCONS_CONFIGFS}"/"${RND_TARGET}" + + # Basic population so the target can come up + _create_dynamic_target "${FORMAT}" "${RND_TARGET_PATH}" + done + + echo "netconsole selftest: ${COUNT} additional targets were created" > /d= ev/kmsg + # disable them all + for i in $(seq ${COUNT}) + do + RND_TARGET=3D"${RND_PREFIX}"${i} + RND_TARGET_PATH=3D"${NETCONS_CONFIGFS}"/"${RND_TARGET}" + echo 0 > "${RND_TARGET_PATH}"/enabled + rmdir "${RND_TARGET_PATH}" + done +} + +# Disable and enable the target mid-air, while messages +# are being transmitted. +toggle_netcons_target() { + for i in $(seq 2) + do + if [ ! -d "${NETCONS_PATH}" ] + then + break + fi + echo 0 > "${NETCONS_PATH}"/enabled 2> /dev/null || true + # Try to enable a bit harder, given it might fail to enable + # Write to `enabled` might fail depending on the lock, which is + # highly contentious here + for _ in $(seq 5) + do + echo 1 > "${NETCONS_PATH}"/enabled 2> /dev/null || true + done + done +} + +toggle_iface(){ + ip link set "${SRCIF}" down + ip link set "${SRCIF}" up +} + +# Start here + +modprobe netdevsim 2> /dev/null || true +modprobe netconsole 2> /dev/null || true + +# Check for basic system dependency and exit if not found +check_for_dependencies +# Set current loglevel to KERN_INFO(6), and default to KERN_NOTICE(5) +echo "6 5" > /proc/sys/kernel/printk +# Remove the namespace, interfaces and netconsole target on exit +trap cleanup EXIT +# Create one namespace and two interfaces +set_network "${IP_VERSION}" +# Create a dynamic target for netconsole +create_dynamic_target "${FORMAT}" + +for i in $(seq "$ITERATIONS") +do + for _ in $(seq 10) + do + echo "${MSG}: ${TARGET} ${i}" > /dev/kmsg + done + wait + + if (( i % 30 =3D=3D 0 )); then + toggle_netcons_target & + fi + + if (( i % 50 =3D=3D 0 )); then + # create some targets, enable them, send msg and disable + # all in a parallel thread + create_and_delete_random_target & + fi + + if (( i % 70 =3D=3D 0 )); then + toggle_iface & + fi +done +wait + +exit "${ksft_pass}" --=20 2.47.3