From nobody Thu Apr 16 17:38:30 2026 Received: from mail-pf1-f174.google.com (mail-pf1-f174.google.com [209.85.210.174]) (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 2E9473E95A9 for ; Thu, 26 Feb 2026 15:29:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772119772; cv=none; b=DUc8xLC36HnKA5/wRWdK7CuDA3PocPOk32SGEiQI54AlZitXjk3R+EpgNAV1M5YTauuxFUVBhpOSxq6bo5Ybu966RRdzcqn7NbGRsFAbjzgathXKbB6Bd8Okgn4B1KsbCCHvTAez1Bg9FAToZ/Re3GbTUTPHGnF1hslclWZebKs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772119772; c=relaxed/simple; bh=KdTxgR9EBLNyZnFRa/HnfcRh9fouIMSWk6+JTAcBD4o=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=DBw1881vSF5ye3qFgPp/MfdUyYWzGmLDT+ZjG/kB2a8HsziY/YBjMWUMKY8DWs36aSD3SpvUI88PQgp0cKrQyuGp5cj+dg4TJ11Gq+rScv8aqLkIft18bMXaj/tTQ+EaE6kdVIowLSf2NMHO0bVamGe6NuC+gtw+yYghA4MFXwc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Xt6SkyQ4; arc=none smtp.client-ip=209.85.210.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Xt6SkyQ4" Received: by mail-pf1-f174.google.com with SMTP id d2e1a72fcca58-82418b0178cso610413b3a.1 for ; Thu, 26 Feb 2026 07:29:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1772119770; x=1772724570; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=TlQh4nIRsXGFML1TwWAE1gHVHpIUgIj6w9/dUqr7Qlc=; b=Xt6SkyQ44otMzRRVgvlQbFxbM7ISKt3Fr8RaGdrULYkAlcTfvrezDdfK+IISy306/w vKSe4962/81YuNK6Qe+ptU6rAFqjeUtar3lkhMbgvyie1o3I2oLAiA0tJJStnCjtlkT/ BebMkjAej9f5qTMgKN81t+JIBC5KgLYzWB00qTrYkmgNlLl0hk1ag/saJ9cP6NT+t7Rx SMf1W+xF+662Cgo36dd56PghGdgD10MF6kxk2xvRk3iAB2wss4KhFJy0kzsMRYOEc090 DGFjqLsaSKQ0JPZsRGyCRbkghiXAp32df4O+rVOy8W+wzIOjGGSDsi+e4Hc3NWFeGpC7 ibFg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772119770; x=1772724570; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=TlQh4nIRsXGFML1TwWAE1gHVHpIUgIj6w9/dUqr7Qlc=; b=PWadcrmKFEC9+fjqAa6qIve1+awPVyFkdByuQiM07fk0xS68pM5mLHLwK7GUrG2d9M ckH79EVajGF59690+vm08tlATCBJmH0Pfk2ZR/fpJQ+rDvS5/62z6Y4WR63pVmy9zmZQ Z8DSX3WZEqVuqVGyFMTYrtukX+yBRHYMlx1KkqmTYwR0UOrJltXDOo7idF6nzgY5wnUY OsqKQuTiidKhbMqQpga29WwTuzvMlVwcJ7VMtT9+TGsJE6CBP88HW4FNJL9kZYjNvLq5 PKaNobjQsIuopb7RVm4vYFbANzX0t68nB47Pl7KJcBAGnqwL12Vqza+TYaDHwHQjSUT8 I1FA== X-Forwarded-Encrypted: i=1; AJvYcCV0YA+cPldBAYaGzEyu2wE8FOXAlz8ZKcYcu5oEog176Q3yzEj6wYuxkDrRsLgR3fwfkX6ht1YmDXMvnVI=@vger.kernel.org X-Gm-Message-State: AOJu0YzKEXa8/B653MlAwqAxQt9XbnD14YGe+jL9QWZPmOwMOMMjBvWz vPaEYIym34naKOfBidqV86a9esSXukJXtyoSjSmbwzzZbhfNo+DN65Vm X-Gm-Gg: ATEYQzwtevIei6I+/+E6l37uD4SR9BRBdQtvhCk0b+TqQr13c2exm4FPW5Bu5Sa8D/+ 0KC8J0FygJ0d0UQ3d51HrlFS3zXRUf9UQ7n/EHTKC4fOZqn1iFpELuxBfW+E6HioFYs6Ctc4jJV AiEfg6dZNCRzHNeIpyZpJr2Mmp7LSBgRjAybYh869pusLZd+gnkRfjc7OGy+wiEY2SP2izhtA8+ fjn3DRhVGrXlxFtpquqTRgFoFb0uG5L236Yt5M77UpzOwcD3EY7XZGxv+S1oB/oxi3Sdd7o5so7 KGCjj+/v3/qoJflobR4KrRH6ZVHwEEzAPpgHVEjowLTNZottXIyVM4+dUTbrqKQlRRYSMQCheKV DTqQlMgVaI2Y3+Ih1xKqQC3JcqVVgnxf0ZZ+ENBe8082P9rSCsdzAwstLT21K0nT2F3fJL6Q22C x3k6186+lR3dhRDgjzf8rG+KKrgrhshnUsb/MsUnN0a5KjI5GEbvwTf+EZkUr6s9pYAg== X-Received: by 2002:a05:6a21:46c5:b0:38c:4371:23f8 with SMTP id adf61e73a8af0-395b499813dmr2888346637.67.1772119770381; Thu, 26 Feb 2026 07:29:30 -0800 (PST) Received: from mac ([113.199.232.144]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-c70fa801963sm2191191a12.21.2026.02.26.07.29.27 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Thu, 26 Feb 2026 07:29:29 -0800 (PST) From: Shuvam Pandey To: brendan.higgins@linux.dev, davidgow@google.com Cc: raemoar63@gmail.com, linux-kselftest@vger.kernel.org, kunit-dev@googlegroups.com, linux-kernel@vger.kernel.org, Shuvam Pandey Subject: [PATCH] kunit: tool: copy caller args in run_kernel to prevent mutation Date: Thu, 26 Feb 2026 21:14:10 +0545 Message-ID: <20260226152910.34530-1-shuvampandey1@gmail.com> X-Mailer: git-send-email 2.50.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" run_kernel() appended KUnit flags directly to the caller-provided args list. When exec_tests() calls run_kernel() repeatedly (e.g. with --run_isolated), each call mutated the same list, causing later runs to inherit stale filter_glob values and duplicate kunit.enable flags. Fix this by copying args at the start of run_kernel(). Add a regression test that calls run_kernel() twice with the same list and verifies the original remains unchanged. Fixes: ff9e09a3762f ("kunit: tool: support running each suite/test separate= ly") Signed-off-by: Shuvam Pandey Reviewed-by: David Gow --- tools/testing/kunit/kunit_kernel.py | 6 ++++-- tools/testing/kunit/kunit_tool_test.py | 26 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/tools/testing/kunit/kunit_kernel.py b/tools/testing/kunit/kuni= t_kernel.py index 260d8d9aa1db..2998e1bc088b 100644 --- a/tools/testing/kunit/kunit_kernel.py +++ b/tools/testing/kunit/kunit_kernel.py @@ -346,8 +346,10 @@ class LinuxSourceTree: return self.validate_config(build_dir) =20 def run_kernel(self, args: Optional[List[str]]=3DNone, build_dir: str=3D'= ', filter_glob: str=3D'', filter: str=3D'', filter_action: Optional[str]=3D= None, timeout: Optional[int]=3DNone) -> Iterator[str]: - if not args: - args =3D [] + # Copy to avoid mutating the caller-supplied list. exec_tests() reuses + # the same args across repeated run_kernel() calls (e.g. --run_isolated), + # so appending to the original would accumulate stale flags on each call. + args =3D list(args) if args else [] if filter_glob: args.append('kunit.filter_glob=3D' + filter_glob) if filter: diff --git a/tools/testing/kunit/kunit_tool_test.py b/tools/testing/kunit/k= unit_tool_test.py index b67408147c1f..f6383884c599 100755 --- a/tools/testing/kunit/kunit_tool_test.py +++ b/tools/testing/kunit/kunit_tool_test.py @@ -503,6 +503,32 @@ class LinuxSourceTreeTest(unittest.TestCase): with open(kunit_kernel.get_outfile_path(build_dir), 'rt') as outfile: self.assertEqual(outfile.read(), 'hi\nbye\n', msg=3D'Missing some outp= ut') =20 + def test_run_kernel_args_not_mutated(self): + """Verify run_kernel() copies args so callers can reuse them.""" + start_calls =3D [] + + def fake_start(start_args, unused_build_dir): + start_calls.append(list(start_args)) + return subprocess.Popen(['printf', 'KTAP version 1\n'], + text=3DTrue, stdout=3Dsubprocess.PIPE) + + with tempfile.TemporaryDirectory('') as build_dir: + tree =3D kunit_kernel.LinuxSourceTree(build_dir, + kunitconfig_paths=3D[os.devnull]) + with mock.patch.object(tree._ops, 'start', side_effect=3Dfake_start), \ + mock.patch.object(kunit_kernel.subprocess, 'call'): + kernel_args =3D ['mem=3D1G'] + for _ in tree.run_kernel(args=3Dkernel_args, build_dir=3Dbuild_dir, + filter_glob=3D'suite.test1'): + pass + for _ in tree.run_kernel(args=3Dkernel_args, build_dir=3Dbuild_dir, + filter_glob=3D'suite.test2'): + pass + self.assertEqual(kernel_args, ['mem=3D1G'], + 'run_kernel() should not modify caller args') + self.assertIn('kunit.filter_glob=3Dsuite.test1', start_calls[0]) + self.assertIn('kunit.filter_glob=3Dsuite.test2', start_calls[1]) + def test_build_reconfig_no_config(self): with tempfile.TemporaryDirectory('') as build_dir: with open(kunit_kernel.get_kunitconfig_path(build_dir), 'w') as f: base-commit: f4d0ec0aa20d49f09dc01d82894ce80d72de0560 --=20 2.50.0