From patchwork Thu Mar 20 11:41:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Olsa X-Patchwork-Id: 14023792 X-Patchwork-Delegate: bpf@iogearbox.net Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E00D021E0BC; Thu, 20 Mar 2025 11:45:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742471150; cv=none; b=XaTVgCEnfEGoTD9TPJ5YTGg4iLvDmJTed7CUJ+H5GhxFwG0yeVSGoBg2+HY2cODzhf/0ixY096p+9KF90GLpOpTlT3NHceUye/YXiSJqjl9m80bc/koqRUDdKuWuWCp+jSixN5GudyQcPy5Tco55RQ0mMBj1jv98ufjVzBsBrRE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1742471150; c=relaxed/simple; bh=5eX9iAOhbgnJGufycsOCc/yZIwKF9lKLXEOqDi/RP+Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ASZpvkWpa4fau/7X5L+r9FVEGqzcTRb6hqa5IysQy79mY7FS0ZUqRw+7fUjf6t7tBLMv2oANHTNFhCUViYAiqFAW9KeEWHolT8qGHU5vPtQV5C9Hb3io2Dqd8ITAyreZrTaam6lhtr9nOhbZxEREyFycNvLMoj0WY5V3GgwxNLU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZbyYmbOh; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZbyYmbOh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E597DC4CEE8; Thu, 20 Mar 2025 11:45:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1742471149; bh=5eX9iAOhbgnJGufycsOCc/yZIwKF9lKLXEOqDi/RP+Q=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZbyYmbOha73Pyn+lyjsmD++QCjgtYlytU7Ozuannwyx+vDULl5YtMmVoZAp1dQIIx Mnpmneb73rXPMpmVk8GGRDHDi8an2XyHajeoE6HFCGYwTptv40RIn4I9rRDB2JBvW0 2wzEHMaPATT6oRcyq1VVt2+Eq/mOvKVtXXP6DKkBjeV1k7cSAqGZI37ch9bt+Tghq9 fX2kvXaS4krYzYRQP5JMi+mj9HzOsMdUFC54yPU4v6E+kd2GOi6vCL8mQ582CrmzXl HQFwQT3KsJYCSHpDcxAljjtuZCjec2Hf/JQKR2h9tRNDLCz259M5cb0Smn+Wz7Sh2w 3cbvlo0eR49LQ== From: Jiri Olsa To: Oleg Nesterov , Peter Zijlstra , Andrii Nakryiko Cc: bpf@vger.kernel.org, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org, x86@kernel.org, Song Liu , Yonghong Song , John Fastabend , Hao Luo , Steven Rostedt , Masami Hiramatsu , Alan Maguire , David Laight , =?utf-8?q?Thomas_Wei=C3=9Fschuh?= Subject: [PATCH RFCv3 20/23] selftests/bpf: Change test_uretprobe_regs_change for uprobe and uretprobe Date: Thu, 20 Mar 2025 12:41:55 +0100 Message-ID: <20250320114200.14377-21-jolsa@kernel.org> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20250320114200.14377-1-jolsa@kernel.org> References: <20250320114200.14377-1-jolsa@kernel.org> Precedence: bulk X-Mailing-List: bpf@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: bpf@iogearbox.net X-Patchwork-State: RFC Changing the test_uretprobe_regs_change test to test both uprobe and uretprobe by adding entry consumer handler to the testmod and making it to change one of the registers. Making sure that changed values both uprobe and uretprobe handlers propagate to the user space. Signed-off-by: Jiri Olsa --- .../testing/selftests/bpf/prog_tests/uprobe_syscall.c | 11 +++++++---- tools/testing/selftests/bpf/test_kmods/bpf_testmod.c | 11 +++++++++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/tools/testing/selftests/bpf/prog_tests/uprobe_syscall.c b/tools/testing/selftests/bpf/prog_tests/uprobe_syscall.c index f1c297a9bb03..83e4b7b6095d 100644 --- a/tools/testing/selftests/bpf/prog_tests/uprobe_syscall.c +++ b/tools/testing/selftests/bpf/prog_tests/uprobe_syscall.c @@ -203,7 +203,7 @@ static int write_bpf_testmod_uprobe(unsigned long offset) return ret != n ? (int) ret : 0; } -static void test_uretprobe_regs_change(void) +static void test_regs_change(void) { struct pt_regs before = {}, after = {}; unsigned long *pb = (unsigned long *) &before; @@ -217,6 +217,9 @@ static void test_uretprobe_regs_change(void) if (!ASSERT_OK(err, "register_uprobe")) return; + /* make sure uprobe gets optimized */ + uprobe_regs_trigger(); + uprobe_regs(&before, &after); err = write_bpf_testmod_uprobe(0); @@ -373,8 +376,8 @@ static void test_uretprobe_shadow_stack(void) /* Run all of the uretprobe tests. */ test_uprobe_regs_equal(false); - test_uretprobe_regs_change(); test_uretprobe_syscall_call(); + test_regs_change(); ARCH_PRCTL(ARCH_SHSTK_DISABLE, ARCH_SHSTK_SHSTK); } @@ -735,8 +738,6 @@ static void __test_uprobe_syscall(void) { if (test__start_subtest("uretprobe_regs_equal")) test_uprobe_regs_equal(true); - if (test__start_subtest("uretprobe_regs_change")) - test_uretprobe_regs_change(); if (test__start_subtest("uretprobe_syscall_call")) test_uretprobe_syscall_call(); if (test__start_subtest("uretprobe_shadow_stack")) @@ -755,6 +756,8 @@ static void __test_uprobe_syscall(void) test_uprobe_sigill(); if (test__start_subtest("uprobe_regs_equal")) test_uprobe_regs_equal(false); + if (test__start_subtest("regs_change")) + test_regs_change(); } #else static void __test_uprobe_syscall(void) diff --git a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c index 3220f1d28697..08494fcf6a58 100644 --- a/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c +++ b/tools/testing/selftests/bpf/test_kmods/bpf_testmod.c @@ -496,15 +496,21 @@ static struct bin_attribute bin_attr_bpf_testmod_file __ro_after_init = { */ #ifdef __x86_64__ +static int +uprobe_handler(struct uprobe_consumer *self, struct pt_regs *regs, __u64 *data) +{ + regs->cx = 0x87654321feebdaed; + return 0; +} + static int uprobe_ret_handler(struct uprobe_consumer *self, unsigned long func, struct pt_regs *regs, __u64 *data) { regs->ax = 0x12345678deadbeef; - regs->cx = 0x87654321feebdaed; regs->r11 = (u64) -1; - return true; + return 0; } struct testmod_uprobe { @@ -516,6 +522,7 @@ struct testmod_uprobe { static DEFINE_MUTEX(testmod_uprobe_mutex); static struct testmod_uprobe uprobe = { + .consumer.handler = uprobe_handler, .consumer.ret_handler = uprobe_ret_handler, };