From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pj2-f13.google.com (mail-pj2-f13.google.com [74.125.227.141]) (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 31D3A374170 for ; Sun, 13 Sep 2026 02:43:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.227.141 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789267417; cv=none; b=oXcTmn1iUpY3Zl5RbN4ZGPW8LESeWGe+OjL9QoCCfGZdxm9MOoM5cOQsWD6y/wO3qmydIk1Li+It7hLz0+paS+9j7Nip467ewqOdj83XVbp3BAuCZO4hWeH1A/IER6/FutIFm0uwsPVEcS/VebwvXpOeh8XxiRmIVJYXYSTZUrM= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789267417; c=relaxed/simple; bh=K7Lvcq30g5jAiKbIvON0Fu92sp4m1ESGE8VCZY4y1yQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kK3VFeb8g2ZVFs70Lp28TgrI9LIxxbTcn/GVwsgHSJsfL8wUY5UQt1v8LYJkhTCgHuC5SVTbI4yUEEVfCnDsnk5p+mr/J7J5X/SQS9WNGrOIBJy6F4pS+Yf7RPQfgc1d81uGkrFgrJ/1PDrcInEjlXD1fF7mzhJFwIMntOhdSgc= 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=Baea/4X3; arc=none smtp.client-ip=74.125.227.141 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="Baea/4X3" Received: by mail-pj2-f13.google.com with SMTP id 98e67ed59e1d1-39b350c6920so634165a91.1 for ; Sat, 12 Sep 2026 19:43:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1789267414; x=1789872214; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=y/218sFdeZGo4bR9Mym3BJcGpBxvzFk4oKQJE6x3EQA=; b=Baea/4X3D1pAxRDARt2UgMfSr6adSY8dqUdlEzt/zblzqWMIaNxytFqES0LyYVYCl2 jeB7yATXhdB0knD0tmpUP24pETB73jLQfQOu+/ZJrcc+UivN44QY8xgCvge6fmZfvVzp Iwtx5Au1aCVXZlZ16GGh6Wn9WRLOpqhmZN85/F/SA3h/0W7hscNLwWx1I0idp8jOKpIg pL7KSuHjIkqCM0+Y+yI0ruCY8isg06nGYh5LZPR4CvFXwYSD409J9uxEe1pgJvYbA6Jj PPGjlhfAtcIffgVmGESFMiU2HiYz6kyLresVQJgkSwxkYtFoIYhFTwAwxqRrXcUoZHJB tmAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789267414; x=1789872214; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=y/218sFdeZGo4bR9Mym3BJcGpBxvzFk4oKQJE6x3EQA=; b=HlDJ08fAEEgLeEDRSuF4pleQT//YkxCIMTZ9ZIb5l4wbPUTa1Qn3ua1kGmIdSHMxWz 9Y0WZDQi5anpstQGHy/4L0lBEG9Xv4lcMLTSRs3JJFSxrh7JlfKNcENy59kaq+6HfcPx UvKtcl/co6C1yxImI65cZ4NhI5JtJ5PGrgeCmR+fqdRuLewU6pTVqox6vmbyWUbX9XpM m9Cu+zZfjv1ZlLk3eLS5ZdI+ByWGfg0sCKByWP4GKmp6A7TiWqbkLXwGV1KIDba6JVf2 o7R4J/PwWJrjdXYyc9Xms9W/UCbjdE4D6l81XaKAJ6Vnvla79ZmtjD5vzNi51pkdzqW8 Xr+g== X-Gm-Message-State: AFuF++nykdyu2+lWYopyCsz+X2l6/k6WSHOKNhA3N9rtndcIWXZRNFnO I0j/y4xuOpXIA6lwe4S5Ko/tvx2VxTicjtE7qLPzTr9uyZf+w9jNDKt6 X-Gm-Gg: AYBFou2r6sFlChwpu24rhbSzYWgzsIsjbc+EGtIJSuKuUUposwE5Bvw+yVUpQhEuqbZ 2xzxj2N+MBAlImc+6Mywnjtbtp7Hki5VYA0TwrSdgXPG19V1rG7c0JXdEx5su+xAUQz1sWCkhul 4BoMCmNmhwsNBT7T1szsfil9v2fMiNLVRGzLvVsk1HvFLM9ugYSTrzPVXd8Fa7R7owrMD/blWzS YgkB+s3Y+LETN/DR13TzMF0AwpzB5CugkZfHUHp0WMJ7PwMY8j/eEzFtl3DinyiDjz80kf5+vZB 6MO8FWB6ce9B7F0ctdEgObWHOdftkwBhWj9+54l36PaVuA1RuIkZvhSIrkTMAmtPOGQrT1P4pR9 7v1htxiF/HoEHPQmOhNrXbNE/47q5o7HC/+YbDjmEbfthcKsc+l/xF+f3zsUXxVNFUFi4M28t/0 vJKutamXWt5KcSkq2VDh5xj5XAlnttYDVyt4QRpOEmKWWJu8sWo4/cQbApoZokcRu7WMtp2LhjO Ic89w0zl8eQuYCdCG5ScD6JqHUWzaU8ZlPpr5MRq4sIbuV76fetuIA/94NoQoRgVBiVaA== X-Received: by 2002:a17:90b:5244:b0:38f:18f9:785 with SMTP id 98e67ed59e1d1-39dbc0c2df1mr9367909a91.8.1789267414464; Sat, 12 Sep 2026 19:43:34 -0700 (PDT) Received: from localhost.localdomain ([240e:46d:2000:1e66:594b:84e9:394f:396d]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-39d994cc978sm12730756a91.9.2026.09.12.19.43.29 (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Sat, 12 Sep 2026 19:43:33 -0700 (PDT) From: Yafang Shao To: jpoimboe@kernel.org, jikos@kernel.org, mbenes@suse.cz, pmladek@suse.com, joe.lawrence@redhat.com, song@kernel.org Cc: live-patching@vger.kernel.org, Yafang Shao Subject: [PATCH v9 7/9] selftests/livepatch: Add provides/obsoletes test scenarios Date: Sun, 13 Sep 2026 10:42:26 +0800 Message-ID: <20260913024228.72317-8-laoar.shao@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260913024228.72317-1-laoar.shao@gmail.com> References: <20260913024228.72317-1-laoar.shao@gmail.com> Precedence: bulk X-Mailing-List: live-patching@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Now that the legacy "replace" field has been replaced by the provides/obsoletes mechanism, add test scenarios to verify the new behavior. The test modules gain provides/obsoletes module parameters, and test-provides-obsoletes.sh covers the new replace semantics: provides=0 replacement, same-provides replacement, obsoletes-based replacement and coexistence of different provides ids. These tests are skipped on kernels that still support the legacy "replace" attribute. Assisted-by: Comagic:DeepSeek-V4-Flash Signed-off-by: Yafang Shao --- tools/testing/selftests/livepatch/Makefile | 3 +- .../livepatch/test-provides-obsoletes.sh | 216 ++++++++++++++++++ .../test_modules/test_klp_callbacks_demo2.c | 20 +- .../test_modules/test_klp_cmdline_lp.c | 11 +- .../test_modules/test_klp_meminfo_lp.c | 30 ++- .../livepatch/test_modules/test_klp_state.c | 5 +- .../livepatch/test_modules/test_klp_state2.c | 5 +- 7 files changed, 256 insertions(+), 34 deletions(-) create mode 100755 tools/testing/selftests/livepatch/test-provides-obsoletes.sh diff --git a/tools/testing/selftests/livepatch/Makefile b/tools/testing/selftests/livepatch/Makefile index a080eb54a215..38f98594d883 100644 --- a/tools/testing/selftests/livepatch/Makefile +++ b/tools/testing/selftests/livepatch/Makefile @@ -11,7 +11,8 @@ TEST_PROGS := \ test-ftrace.sh \ test-sysfs.sh \ test-syscall.sh \ - test-kprobe.sh + test-kprobe.sh \ + test-provides-obsoletes.sh TEST_FILES := settings diff --git a/tools/testing/selftests/livepatch/test-provides-obsoletes.sh b/tools/testing/selftests/livepatch/test-provides-obsoletes.sh new file mode 100755 index 000000000000..c2fbac3d0e06 --- /dev/null +++ b/tools/testing/selftests/livepatch/test-provides-obsoletes.sh @@ -0,0 +1,216 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0 +# Copyright (C) 2026 Yafang Shao + +. $(dirname $0)/functions.sh + +MOD_MEMINFO=test_klp_meminfo_lp +MOD_CMDLINE=test_klp_cmdline_lp + +setup_config +detect_provides_attr + +# The provides/obsoletes based tests only run on kernels that no longer +# support the legacy "replace" attribute. +if [[ "$HAS_PROVIDES_ATTR" != "1" ]]; then + skip "kernel still supports the legacy replace attribute" +fi + + +# - load a livepatch with provides=0 (cmdline), then another with +# provides=0 (meminfo). The second replaces the first (same provides). +# - unload the remaining livepatch + +start_test "provides 0 replaces provides 0" + +load_lp $MOD_CMDLINE provides=0 +load_lp $MOD_MEMINFO provides=0 + +check_sysfs_value "$MOD_MEMINFO" "enabled" "1" + +disable_lp $MOD_MEMINFO +unload_lp $MOD_MEMINFO +unload_lp $MOD_CMDLINE + +check_result "% insmod test_modules/$MOD_CMDLINE.ko provides=0 +livepatch: enabling patch '$MOD_CMDLINE' +livepatch: '$MOD_CMDLINE': initializing patching transition +livepatch: '$MOD_CMDLINE': starting patching transition +livepatch: '$MOD_CMDLINE': completing patching transition +livepatch: '$MOD_CMDLINE': patching complete +% insmod test_modules/$MOD_MEMINFO.ko provides=0 +livepatch: enabling patch '$MOD_MEMINFO' +livepatch: '$MOD_MEMINFO': initializing patching transition +livepatch: '$MOD_MEMINFO': starting patching transition +livepatch: '$MOD_MEMINFO': completing patching transition +livepatch: '$MOD_MEMINFO': patching complete +% echo 0 > $SYSFS_KLP_DIR/$MOD_MEMINFO/enabled +livepatch: '$MOD_MEMINFO': initializing unpatching transition +livepatch: '$MOD_MEMINFO': starting unpatching transition +livepatch: '$MOD_MEMINFO': completing unpatching transition +livepatch: '$MOD_MEMINFO': unpatching complete +% rmmod $MOD_MEMINFO +% rmmod $MOD_CMDLINE" + + +# - load a livepatch with provides=1 (cmdline), then another with +# provides=1 (meminfo). The second replaces the first (same provides). +# - unload the remaining livepatch + +start_test "same provides replaces" + +load_lp $MOD_CMDLINE provides=1 +load_lp $MOD_MEMINFO provides=1 + +check_sysfs_value "$MOD_MEMINFO" "enabled" "1" + +disable_lp $MOD_MEMINFO +unload_lp $MOD_MEMINFO +unload_lp $MOD_CMDLINE + +check_result "% insmod test_modules/$MOD_CMDLINE.ko provides=1 +livepatch: enabling patch '$MOD_CMDLINE' +livepatch: '$MOD_CMDLINE': initializing patching transition +livepatch: '$MOD_CMDLINE': starting patching transition +livepatch: '$MOD_CMDLINE': completing patching transition +livepatch: '$MOD_CMDLINE': patching complete +% insmod test_modules/$MOD_MEMINFO.ko provides=1 +livepatch: enabling patch '$MOD_MEMINFO' +livepatch: '$MOD_MEMINFO': initializing patching transition +livepatch: '$MOD_MEMINFO': starting patching transition +livepatch: '$MOD_MEMINFO': completing patching transition +livepatch: '$MOD_MEMINFO': patching complete +% echo 0 > $SYSFS_KLP_DIR/$MOD_MEMINFO/enabled +livepatch: '$MOD_MEMINFO': initializing unpatching transition +livepatch: '$MOD_MEMINFO': starting unpatching transition +livepatch: '$MOD_MEMINFO': completing unpatching transition +livepatch: '$MOD_MEMINFO': unpatching complete +% rmmod $MOD_MEMINFO +% rmmod $MOD_CMDLINE" + + +# - load a livepatch with provides=1 (cmdline), then another with +# provides=2 and obsoletes=[1] (meminfo). The second replaces the +# first (obsoletes contains the first patch's provides id). +# - verify the provides/obsoletes sysfs values +# - unload the remaining livepatch + +start_test "obsoletes replaces" + +load_lp $MOD_CMDLINE provides=1 +load_lp $MOD_MEMINFO provides=2 obsoletes=1 + +check_sysfs_value "$MOD_MEMINFO" "provides" "2" +check_sysfs_value "$MOD_MEMINFO" "obsoletes" "1" + +disable_lp $MOD_MEMINFO +unload_lp $MOD_MEMINFO +unload_lp $MOD_CMDLINE + +check_result "% insmod test_modules/$MOD_CMDLINE.ko provides=1 +livepatch: enabling patch '$MOD_CMDLINE' +livepatch: '$MOD_CMDLINE': initializing patching transition +livepatch: '$MOD_CMDLINE': starting patching transition +livepatch: '$MOD_CMDLINE': completing patching transition +livepatch: '$MOD_CMDLINE': patching complete +% insmod test_modules/$MOD_MEMINFO.ko provides=2 obsoletes=1 +livepatch: enabling patch '$MOD_MEMINFO' +livepatch: '$MOD_MEMINFO': initializing patching transition +livepatch: '$MOD_MEMINFO': starting patching transition +livepatch: '$MOD_MEMINFO': completing patching transition +livepatch: '$MOD_MEMINFO': patching complete +% echo 0 > $SYSFS_KLP_DIR/$MOD_MEMINFO/enabled +livepatch: '$MOD_MEMINFO': initializing unpatching transition +livepatch: '$MOD_MEMINFO': starting unpatching transition +livepatch: '$MOD_MEMINFO': completing unpatching transition +livepatch: '$MOD_MEMINFO': unpatching complete +% rmmod $MOD_MEMINFO +% rmmod $MOD_CMDLINE" + + +# - load two livepatches with different provides ids that modify +# different functions and verify that they coexist +# - in particular, verify that provides=0 does NOT replace a patch +# with a different provides id +# - unload both livepatches + +start_test "provides 0 coexists with provides 1" + +load_lp $MOD_CMDLINE provides=0 +load_lp $MOD_MEMINFO provides=1 + +disable_lp $MOD_CMDLINE +unload_lp $MOD_CMDLINE +disable_lp $MOD_MEMINFO +unload_lp $MOD_MEMINFO + +check_result "% insmod test_modules/$MOD_CMDLINE.ko provides=0 +livepatch: enabling patch '$MOD_CMDLINE' +livepatch: '$MOD_CMDLINE': initializing patching transition +livepatch: '$MOD_CMDLINE': starting patching transition +livepatch: '$MOD_CMDLINE': completing patching transition +livepatch: '$MOD_CMDLINE': patching complete +% insmod test_modules/$MOD_MEMINFO.ko provides=1 +livepatch: enabling patch '$MOD_MEMINFO' +livepatch: '$MOD_MEMINFO': initializing patching transition +livepatch: '$MOD_MEMINFO': starting patching transition +livepatch: '$MOD_MEMINFO': completing patching transition +livepatch: '$MOD_MEMINFO': patching complete +% echo 0 > $SYSFS_KLP_DIR/$MOD_CMDLINE/enabled +livepatch: '$MOD_CMDLINE': initializing unpatching transition +livepatch: '$MOD_CMDLINE': starting unpatching transition +livepatch: '$MOD_CMDLINE': completing unpatching transition +livepatch: '$MOD_CMDLINE': unpatching complete +% rmmod $MOD_CMDLINE +% echo 0 > $SYSFS_KLP_DIR/$MOD_MEMINFO/enabled +livepatch: '$MOD_MEMINFO': initializing unpatching transition +livepatch: '$MOD_MEMINFO': starting unpatching transition +livepatch: '$MOD_MEMINFO': completing unpatching transition +livepatch: '$MOD_MEMINFO': unpatching complete +% rmmod $MOD_MEMINFO" + + +# - load a livepatch with provides=2 and obsoletes=[1] (cmdline), +# then another with provides=1 (meminfo). Although the second patch +# does not list provides=2 in its own obsoletes list, it still +# replaces the first one, because the obsoletes relationship is +# symmetric: the first patch's obsoletes list contains the second +# patch's provides id. +# - verify the provides sysfs value of the replacing patch +# - unload the remaining livepatch +# +# MOD_MEMINFO(provides=2, obsoletes=[1]) -- loaded first +# MOD_CMDLINE(provides=1) -- loaded second, replaces above + +start_test "symmetric obsoletes replaces" + +load_lp $MOD_MEMINFO provides=2 obsoletes=1 +load_lp $MOD_CMDLINE provides=1 + +check_sysfs_value "$MOD_CMDLINE" "provides" "1" + +disable_lp $MOD_CMDLINE +unload_lp $MOD_CMDLINE +unload_lp $MOD_MEMINFO + +check_result "% insmod test_modules/$MOD_MEMINFO.ko provides=2 obsoletes=1 +livepatch: enabling patch '$MOD_MEMINFO' +livepatch: '$MOD_MEMINFO': initializing patching transition +livepatch: '$MOD_MEMINFO': starting patching transition +livepatch: '$MOD_MEMINFO': completing patching transition +livepatch: '$MOD_MEMINFO': patching complete +% insmod test_modules/$MOD_CMDLINE.ko provides=1 +livepatch: enabling patch '$MOD_CMDLINE' +livepatch: '$MOD_CMDLINE': initializing patching transition +livepatch: '$MOD_CMDLINE': starting patching transition +livepatch: '$MOD_CMDLINE': completing patching transition +livepatch: '$MOD_CMDLINE': patching complete +% echo 0 > $SYSFS_KLP_DIR/$MOD_CMDLINE/enabled +livepatch: '$MOD_CMDLINE': initializing unpatching transition +livepatch: '$MOD_CMDLINE': starting unpatching transition +livepatch: '$MOD_CMDLINE': completing unpatching transition +livepatch: '$MOD_CMDLINE': unpatching complete +% rmmod $MOD_CMDLINE +% rmmod $MOD_MEMINFO" + +exit 0 diff --git a/tools/testing/selftests/livepatch/test_modules/test_klp_callbacks_demo2.c b/tools/testing/selftests/livepatch/test_modules/test_klp_callbacks_demo2.c index de4eabd4b924..93789470fe18 100644 --- a/tools/testing/selftests/livepatch/test_modules/test_klp_callbacks_demo2.c +++ b/tools/testing/selftests/livepatch/test_modules/test_klp_callbacks_demo2.c @@ -7,15 +7,14 @@ #include #include -#ifndef CONFIG_KLP_HAS_PROVIDES +#ifdef CONFIG_KLP_HAS_PROVIDES +static unsigned int provides; +module_param(provides, uint, 0444); +MODULE_PARM_DESC(provides, "provides id (default=0)"); +#else static int replace; module_param(replace, int, 0644); MODULE_PARM_DESC(replace, "replace (default=0)"); -#else -/* - * TODO: Add provides/obsoletes module parameters for the - * provides/obsoletes based tests (to be added later). - */ #endif static const char *const module_state[] = { @@ -86,13 +85,10 @@ static struct klp_patch patch = { static int test_klp_callbacks_demo2_init(void) { -#ifndef CONFIG_KLP_HAS_PROVIDES - patch.replace = replace; +#ifdef CONFIG_KLP_HAS_PROVIDES + patch.provides = provides; #else - /* - * TODO: Set provides/obsoletes from the module parameters - * for the provides/obsoletes based tests (to be added later). - */ + patch.replace = replace; #endif return klp_enable_patch(&patch); } diff --git a/tools/testing/selftests/livepatch/test_modules/test_klp_cmdline_lp.c b/tools/testing/selftests/livepatch/test_modules/test_klp_cmdline_lp.c index 88c6aed925fb..8a93f005a383 100644 --- a/tools/testing/selftests/livepatch/test_modules/test_klp_cmdline_lp.c +++ b/tools/testing/selftests/livepatch/test_modules/test_klp_cmdline_lp.c @@ -6,8 +6,14 @@ #include #include #include - #include + +#ifdef CONFIG_KLP_HAS_PROVIDES +static unsigned int provides; +module_param(provides, uint, 0444); +MODULE_PARM_DESC(provides, "provides id (default=0)"); +#endif + static int livepatch_cmdline_proc_show(struct seq_file *m, void *v) { seq_printf(m, "%s: %s\n", THIS_MODULE->name, @@ -36,6 +42,9 @@ static struct klp_patch patch = { static int test_klp_cmdline_lp_init(void) { +#ifdef CONFIG_KLP_HAS_PROVIDES + patch.provides = provides; +#endif return klp_enable_patch(&patch); } diff --git a/tools/testing/selftests/livepatch/test_modules/test_klp_meminfo_lp.c b/tools/testing/selftests/livepatch/test_modules/test_klp_meminfo_lp.c index 842efa5b22db..a3b433385148 100644 --- a/tools/testing/selftests/livepatch/test_modules/test_klp_meminfo_lp.c +++ b/tools/testing/selftests/livepatch/test_modules/test_klp_meminfo_lp.c @@ -7,15 +7,20 @@ #include #include -#ifndef CONFIG_KLP_HAS_PROVIDES +#ifdef CONFIG_KLP_HAS_PROVIDES +static unsigned int provides; +module_param(provides, uint, 0444); +MODULE_PARM_DESC(provides, "provides id (default=0)"); + +#define KLP_MAX_OBSOLETES 16 +static unsigned int obsoletes[KLP_MAX_OBSOLETES]; +static int nr_obsoletes; +module_param_array(obsoletes, uint, &nr_obsoletes, 0444); +MODULE_PARM_DESC(obsoletes, "obsoletes provides ids"); +#else static int replace; module_param(replace, int, 0644); MODULE_PARM_DESC(replace, "replace (default=0)"); -#else -/* - * TODO: Add provides/obsoletes module parameters for the - * provides/obsoletes based tests (to be added later). - */ #endif #include @@ -50,13 +55,14 @@ static struct klp_patch patch = { static int test_klp_meminfo_lp_init(void) { -#ifndef CONFIG_KLP_HAS_PROVIDES - patch.replace = replace; +#ifdef CONFIG_KLP_HAS_PROVIDES + patch.provides = provides; + if (nr_obsoletes > 0) { + patch.obsoletes = obsoletes; + patch.nr_obsoletes = nr_obsoletes; + } #else - /* - * TODO: Set provides/obsoletes from the module parameters - * for the provides/obsoletes based tests (to be added later). - */ + patch.replace = replace; #endif return klp_enable_patch(&patch); } diff --git a/tools/testing/selftests/livepatch/test_modules/test_klp_state.c b/tools/testing/selftests/livepatch/test_modules/test_klp_state.c index 69825ea8d65d..5c5872ff2566 100644 --- a/tools/testing/selftests/livepatch/test_modules/test_klp_state.c +++ b/tools/testing/selftests/livepatch/test_modules/test_klp_state.c @@ -145,10 +145,7 @@ static struct klp_patch patch = { #ifndef CONFIG_KLP_HAS_PROVIDES .replace = true, #else - /* - * TODO: Add provides/obsoletes module parameters for the - * provides/obsoletes based tests (to be added later). - */ + /* provides=0 by default, replaces all provides=0 patches */ #endif }; diff --git a/tools/testing/selftests/livepatch/test_modules/test_klp_state2.c b/tools/testing/selftests/livepatch/test_modules/test_klp_state2.c index 3274f084b035..4dd78bd01c61 100644 --- a/tools/testing/selftests/livepatch/test_modules/test_klp_state2.c +++ b/tools/testing/selftests/livepatch/test_modules/test_klp_state2.c @@ -174,10 +174,7 @@ static struct klp_patch patch = { #ifndef CONFIG_KLP_HAS_PROVIDES .replace = true, #else - /* - * TODO: Add provides/obsoletes module parameters for the - * provides/obsoletes based tests (to be added later). - */ + /* provides=0 by default, replaces all provides=0 patches */ #endif }; -- 2.52.0