Linux Test Project
 help / color / mirror / Atom feed
* Re: [LTP] userfaultfd: Add helper for checking UFFD feature support
  2026-05-07  8:31 [LTP] [PATCH v3 1/2] " Ricardo Branco
@ 2026-05-07  9:40 ` linuxtestproject.agent
  0 siblings, 0 replies; 12+ messages in thread
From: linuxtestproject.agent @ 2026-05-07  9:40 UTC (permalink / raw)
  To: Ricardo Branco; +Cc: ltp

Hi Ricardo,

--- [PATCH 1/2] ---

On Thu, 7 May 2026, Ricardo Branco wrote:
> userfaultfd: Add helper for checking UFFD feature support
>
> Add CHECK_UFFD_FEATURE() to perform the initial UFFDIO_API handshake
> without requesting optional features and verify that the kernel reports
> the requested feature bit.

The body only explains the mechanism, not the motivation. Add a sentence
explaining why this helper is needed — e.g. "Without this two-step probe,
requesting an unsupported feature in UFFDIO_API fails with EINVAL,
causing tests to TBROK instead of TCONF."

--- [PATCH 2/2] ---

On Thu, 7 May 2026, Ricardo Branco wrote:
> Fixes: 1840ee23d172b5ab04cca7c2acfa48755b041911

Please verify this SHA resolves in the full LTP history; it is not
reachable in this clone.

Pre-existing issues noticed in the surrounding code (not introduced
by this patch):

- testcases/kernel/syscalls/userfaultfd/userfaultfd05.c — `wp_fault_seen`
  is never reset to 0 at the top of run(); on multi-iteration runs (-i N)
  the second iteration may falsely pass.

---
Note:

Our agent completed the review of the patch.

The agent can sometimes produce false positives although often its
findings are genuine. If you find issues with the review, please
comment this email or ignore the suggestions.

Regards,
LTP AI Reviewer

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [LTP] [PATCH v4 1/3] userfaultfd: Add helper for checking UFFD feature support
@ 2026-05-07 12:28 Ricardo Branco
  2026-05-07 12:28 ` [LTP] [PATCH v4 2/3] userfaultfd: Use two-step handshake to probe features Ricardo Branco
                   ` (4 more replies)
  0 siblings, 5 replies; 12+ messages in thread
From: Ricardo Branco @ 2026-05-07 12:28 UTC (permalink / raw)
  To: ltp

Add CHECK_UFFD_FEATURE() to perform the initial UFFDIO_API handshake
without requesting optional features and verify that the kernel reports
the requested feature bit.

Signed-off-by: Ricardo Branco <rbranco@suse.de>
---
 include/lapi/userfaultfd.h | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/include/lapi/userfaultfd.h b/include/lapi/userfaultfd.h
index aab3890b7..170dfadd4 100644
--- a/include/lapi/userfaultfd.h
+++ b/include/lapi/userfaultfd.h
@@ -277,4 +277,24 @@ retry:
 	return ret;
 }
 
+#define CHECK_UFFD_FEATURE(feature)	check_uffd_feature(feature, #feature)
+
+static inline void check_uffd_feature(uint64_t feature, const char *name)
+{
+	struct uffdio_api uffdio_api = {};
+	int uffd;
+
+	uffd = SAFE_USERFAULTFD(O_CLOEXEC | O_NONBLOCK, false);
+
+	uffdio_api.api = UFFD_API;
+	SAFE_IOCTL(uffd, UFFDIO_API, &uffdio_api);
+
+	if (!(uffdio_api.features & feature)) {
+		SAFE_CLOSE(uffd);
+		tst_brk(TCONF, "%s not supported", name);
+	}
+
+	SAFE_CLOSE(uffd);
+}
+
 #endif /* LAPI_USERFAULTFD_H__ */
-- 
2.54.0


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [LTP] [PATCH v4 2/3] userfaultfd: Use two-step handshake to probe features
  2026-05-07 12:28 [LTP] [PATCH v4 1/3] userfaultfd: Add helper for checking UFFD feature support Ricardo Branco
@ 2026-05-07 12:28 ` Ricardo Branco
  2026-05-07 12:36   ` Andrea Cervesato via ltp
  2026-05-07 12:28 ` [LTP] [PATCH v4 3/3] userfaultfd: Reset wp_fault_seen on each run() Ricardo Branco
                   ` (3 subsequent siblings)
  4 siblings, 1 reply; 12+ messages in thread
From: Ricardo Branco @ 2026-05-07 12:28 UTC (permalink / raw)
  To: ltp

userfaultfd05 and userfaultfd06 assume that
UFFD_FEATURE_PAGEFAULT_FLAG_WP and UFFD_FEATURE_POISON are available
when setting up userfaultfd.

On kernels where either feature is unavailable at runtime,
UFFDIO_API fails with EINVAL and the tests end up as TBROK instead of
being skipped.

Fix this by using the required two-step handshake and skip with TCONF
if the required feature bit is absent.

Fixes: 1840ee23d172b5ab04cca7c2acfa48755b041911
Link: https://github.com/linux-test-project/ltp/issues/1289

Signed-off-by: Ricardo Branco <rbranco@suse.de>
---
 testcases/kernel/syscalls/userfaultfd/userfaultfd05.c | 8 +++++++-
 testcases/kernel/syscalls/userfaultfd/userfaultfd06.c | 6 +++---
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/testcases/kernel/syscalls/userfaultfd/userfaultfd05.c b/testcases/kernel/syscalls/userfaultfd/userfaultfd05.c
index 59956d85d..a42ac09bd 100644
--- a/testcases/kernel/syscalls/userfaultfd/userfaultfd05.c
+++ b/testcases/kernel/syscalls/userfaultfd/userfaultfd05.c
@@ -22,6 +22,11 @@ static char *page;
 static int uffd = -1;
 static volatile int wp_fault_seen;
 
+static void setup(void)
+{
+	CHECK_UFFD_FEATURE(UFFD_FEATURE_PAGEFAULT_FLAG_WP);
+}
+
 static void set_pages(void)
 {
 	page_size = SAFE_SYSCONF(_SC_PAGE_SIZE);
@@ -87,7 +92,7 @@ static void *handle_thread(void *arg LTP_ATTRIBUTE_UNUSED)
 static void run(void)
 {
 	pthread_t thr;
-	struct uffdio_api uffdio_api;
+	struct uffdio_api uffdio_api = {};
 	struct uffdio_register uffdio_register;
 	struct uffdio_writeprotect uffdio_writeprotect;
 
@@ -127,6 +132,7 @@ static void run(void)
 }
 
 static struct tst_test test = {
+	.setup = setup,
 	.test_all = run,
 	.min_kver = "5.7",
 	.needs_kconfigs = (const char *[]) {
diff --git a/testcases/kernel/syscalls/userfaultfd/userfaultfd06.c b/testcases/kernel/syscalls/userfaultfd/userfaultfd06.c
index ec93d8ad6..1ab288e64 100644
--- a/testcases/kernel/syscalls/userfaultfd/userfaultfd06.c
+++ b/testcases/kernel/syscalls/userfaultfd/userfaultfd06.c
@@ -38,6 +38,8 @@ static void setup(void)
 {
 	struct sigaction sa = {};
 
+	CHECK_UFFD_FEATURE(UFFD_FEATURE_POISON);
+
 	sa.sa_handler = sigbus_handler;
 	sigemptyset(&sa.sa_mask);
 	SAFE_SIGACTION(SIGBUS, &sa, NULL);
@@ -99,6 +101,7 @@ static void run(void)
 
 	poison_fault_seen = 0;
 	sigbus_seen = 0;
+
 	set_pages();
 
 	uffd = SAFE_USERFAULTFD(O_CLOEXEC | O_NONBLOCK, false);
@@ -108,9 +111,6 @@ static void run(void)
 
 	SAFE_IOCTL(uffd, UFFDIO_API, &uffdio_api);
 
-	if (!(uffdio_api.features & UFFD_FEATURE_POISON))
-		tst_brk(TCONF, "UFFD_FEATURE_POISON not supported");
-
 	uffdio_register.range.start = (unsigned long) page;
 	uffdio_register.range.len = page_size;
 	uffdio_register.mode = UFFDIO_REGISTER_MODE_MISSING;
-- 
2.54.0


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [LTP] [PATCH v4 3/3] userfaultfd: Reset wp_fault_seen on each run()
  2026-05-07 12:28 [LTP] [PATCH v4 1/3] userfaultfd: Add helper for checking UFFD feature support Ricardo Branco
  2026-05-07 12:28 ` [LTP] [PATCH v4 2/3] userfaultfd: Use two-step handshake to probe features Ricardo Branco
@ 2026-05-07 12:28 ` Ricardo Branco
  2026-05-07 12:36   ` Andrea Cervesato via ltp
  2026-05-07 12:40 ` [LTP] [PATCH v4 1/3] userfaultfd: Add helper for checking UFFD feature support Andrea Cervesato via ltp
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 12+ messages in thread
From: Ricardo Branco @ 2026-05-07 12:28 UTC (permalink / raw)
  To: ltp

wp_fault_seen was never reset to 0 at the top of run(); so on multiple
runs (-i N) the second iteration could falsely pass.

Signed-off-by: Ricardo Branco <rbranco@suse.de>
---
 testcases/kernel/syscalls/userfaultfd/userfaultfd05.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/testcases/kernel/syscalls/userfaultfd/userfaultfd05.c b/testcases/kernel/syscalls/userfaultfd/userfaultfd05.c
index a42ac09bd..e36f9c321 100644
--- a/testcases/kernel/syscalls/userfaultfd/userfaultfd05.c
+++ b/testcases/kernel/syscalls/userfaultfd/userfaultfd05.c
@@ -97,6 +97,7 @@ static void run(void)
 	struct uffdio_writeprotect uffdio_writeprotect;
 
 	set_pages();
+	wp_fault_seen = 0;
 
 	uffd = SAFE_USERFAULTFD(O_CLOEXEC | O_NONBLOCK, false);
 
-- 
2.54.0


-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [LTP] [PATCH v4 3/3] userfaultfd: Reset wp_fault_seen on each run()
  2026-05-07 12:28 ` [LTP] [PATCH v4 3/3] userfaultfd: Reset wp_fault_seen on each run() Ricardo Branco
@ 2026-05-07 12:36   ` Andrea Cervesato via ltp
  0 siblings, 0 replies; 12+ messages in thread
From: Andrea Cervesato via ltp @ 2026-05-07 12:36 UTC (permalink / raw)
  To: Ricardo Branco; +Cc: ltp

Reviewed-by: Andrea Cervesato <andrea.cervesato@suse.com>

--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [LTP] [PATCH v4 2/3] userfaultfd: Use two-step handshake to probe features
  2026-05-07 12:28 ` [LTP] [PATCH v4 2/3] userfaultfd: Use two-step handshake to probe features Ricardo Branco
@ 2026-05-07 12:36   ` Andrea Cervesato via ltp
  0 siblings, 0 replies; 12+ messages in thread
From: Andrea Cervesato via ltp @ 2026-05-07 12:36 UTC (permalink / raw)
  To: Ricardo Branco; +Cc: ltp

Reviewed-by: Andrea Cervesato <andrea.cervesato@suse.com>

--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [LTP] [PATCH v4 1/3] userfaultfd: Add helper for checking UFFD feature support
  2026-05-07 12:28 [LTP] [PATCH v4 1/3] userfaultfd: Add helper for checking UFFD feature support Ricardo Branco
  2026-05-07 12:28 ` [LTP] [PATCH v4 2/3] userfaultfd: Use two-step handshake to probe features Ricardo Branco
  2026-05-07 12:28 ` [LTP] [PATCH v4 3/3] userfaultfd: Reset wp_fault_seen on each run() Ricardo Branco
@ 2026-05-07 12:40 ` Andrea Cervesato via ltp
  2026-05-07 14:20 ` Cyril Hrubis
  2026-05-07 14:22 ` [LTP] " linuxtestproject.agent
  4 siblings, 0 replies; 12+ messages in thread
From: Andrea Cervesato via ltp @ 2026-05-07 12:40 UTC (permalink / raw)
  To: Ricardo Branco; +Cc: ltp

Reviewed-by: Andrea Cervesato <andrea.cervesato@suse.com>

--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [LTP] [PATCH v4 1/3] userfaultfd: Add helper for checking UFFD feature support
  2026-05-07 12:28 [LTP] [PATCH v4 1/3] userfaultfd: Add helper for checking UFFD feature support Ricardo Branco
                   ` (2 preceding siblings ...)
  2026-05-07 12:40 ` [LTP] [PATCH v4 1/3] userfaultfd: Add helper for checking UFFD feature support Andrea Cervesato via ltp
@ 2026-05-07 14:20 ` Cyril Hrubis
  2026-05-07 14:22 ` [LTP] " linuxtestproject.agent
  4 siblings, 0 replies; 12+ messages in thread
From: Cyril Hrubis @ 2026-05-07 14:20 UTC (permalink / raw)
  To: Ricardo Branco; +Cc: ltp

Hi!
Patchset pushed, thanks.

-- 
Cyril Hrubis
chrubis@suse.cz

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [LTP] userfaultfd: Add helper for checking UFFD feature support
  2026-05-07 12:28 [LTP] [PATCH v4 1/3] userfaultfd: Add helper for checking UFFD feature support Ricardo Branco
                   ` (3 preceding siblings ...)
  2026-05-07 14:20 ` Cyril Hrubis
@ 2026-05-07 14:22 ` linuxtestproject.agent
  2026-05-07 14:40   ` Andrea Cervesato via ltp
  4 siblings, 1 reply; 12+ messages in thread
From: linuxtestproject.agent @ 2026-05-07 14:22 UTC (permalink / raw)
  To: Ricardo Branco; +Cc: ltp

Hi Ricardo,

--- [PATCH 1/3] ---

On Thu, 7 May 2026 14:28:53 +0200, Ricardo Branco wrote:
> [PATCH 1/3] userfaultfd: Add helper for checking UFFD feature support

> +	uffd = SAFE_USERFAULTFD(O_CLOEXEC | O_NONBLOCK, false);
> +
> +	uffdio_api.api = UFFD_API;
> +	SAFE_IOCTL(uffd, UFFDIO_API, &uffdio_api);

If SAFE_IOCTL calls tst_brk(TBROK) here, the local `uffd` is not
closed before the test runner takes over; the cleanup functions only
track the global `uffd`. Close it before the SAFE_IOCTL call, or
restructure to guarantee SAFE_CLOSE on all exit paths.

--- [PATCH 2/3] ---

On Thu, 7 May 2026 14:28:54 +0200, Ricardo Branco wrote:
> [PATCH 2/3] userfaultfd: Use two-step handshake to probe features

> Fixes: 1840ee23d172b5ab04cca7c2acfa48755b041911

This commit is not reachable in the local git history (grafted shallow
clone). Please verify the Fixes: tag resolves correctly against the
upstream LTP tree.

Pre-existing issues noticed in the surrounding code (not introduced
by this patch):

- testcases/kernel/syscalls/userfaultfd/userfaultfd06.c:142 — no
  .min_kver set; UFFD_FEATURE_POISON requires Linux 6.6.

---
Note:

Our agent completed the review of the patch.

The agent can sometimes produce false positives although often its
findings are genuine. If you find issues with the review, please
comment this email or ignore the suggestions.

Regards,
LTP AI Reviewer

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [LTP] userfaultfd: Add helper for checking UFFD feature support
  2026-05-07 14:22 ` [LTP] " linuxtestproject.agent
@ 2026-05-07 14:40   ` Andrea Cervesato via ltp
  2026-05-07 14:43     ` Cyril Hrubis
  0 siblings, 1 reply; 12+ messages in thread
From: Andrea Cervesato via ltp @ 2026-05-07 14:40 UTC (permalink / raw)
  To: linuxtestproject.agent; +Cc: ltp

Hi!

> > +	uffd = SAFE_USERFAULTFD(O_CLOEXEC | O_NONBLOCK, false);
> > +
> > +	uffdio_api.api = UFFD_API;
> > +	SAFE_IOCTL(uffd, UFFDIO_API, &uffdio_api);
> 
> If SAFE_IOCTL calls tst_brk(TBROK) here, the local `uffd` is not
> closed before the test runner takes over; the cleanup functions only
> track the global `uffd`. Close it before the SAFE_IOCTL call, or
> restructure to guarantee SAFE_CLOSE on all exit paths.

This is not necessarily wrong, but since TBROK is called, fd is closed
with the process. We need to instruct the agent because I seen this
logical concept being missed a few times.

> 
> --- [PATCH 2/3] ---
> 
> On Thu, 7 May 2026 14:28:54 +0200, Ricardo Branco wrote:
> > [PATCH 2/3] userfaultfd: Use two-step handshake to probe features
> 
> > Fixes: 1840ee23d172b5ab04cca7c2acfa48755b041911
> 
> This commit is not reachable in the local git history (grafted shallow
> clone). Please verify the Fixes: tag resolves correctly against the
> upstream LTP tree.

Can you please double check this? Maybe we have an another issue
with the agent.

Regards,
--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [LTP] userfaultfd: Add helper for checking UFFD feature support
  2026-05-07 14:40   ` Andrea Cervesato via ltp
@ 2026-05-07 14:43     ` Cyril Hrubis
  2026-05-07 16:57       ` Andrea Cervesato via ltp
  0 siblings, 1 reply; 12+ messages in thread
From: Cyril Hrubis @ 2026-05-07 14:43 UTC (permalink / raw)
  To: Andrea Cervesato; +Cc: ltp, linuxtestproject.agent

Hi!
> > --- [PATCH 2/3] ---
> > 
> > On Thu, 7 May 2026 14:28:54 +0200, Ricardo Branco wrote:
> > > [PATCH 2/3] userfaultfd: Use two-step handshake to probe features
> > 
> > > Fixes: 1840ee23d172b5ab04cca7c2acfa48755b041911
> > 
> > This commit is not reachable in the local git history (grafted shallow
> > clone). Please verify the Fixes: tag resolves correctly against the
> > upstream LTP tree.
> 
> Can you please double check this? Maybe we have an another issue
> with the agent.

The commit is there:

commit 1840ee23d172b5ab04cca7c2acfa48755b041911
Author: Li Wang <li.wang@linux.dev>
Date:   Fri Jan 23 19:54:19 2026 +0800

    userfaultfd05: require CONFIG_HAVE_ARCH_USERFAULTFD_WP


-- 
Cyril Hrubis
chrubis@suse.cz

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [LTP] userfaultfd: Add helper for checking UFFD feature support
  2026-05-07 14:43     ` Cyril Hrubis
@ 2026-05-07 16:57       ` Andrea Cervesato via ltp
  0 siblings, 0 replies; 12+ messages in thread
From: Andrea Cervesato via ltp @ 2026-05-07 16:57 UTC (permalink / raw)
  To: Cyril Hrubis; +Cc: ltp, linuxtestproject.agent

> The commit is there:
> 
> commit 1840ee23d172b5ab04cca7c2acfa48755b041911
> Author: Li Wang <li.wang@linux.dev>
> Date:   Fri Jan 23 19:54:19 2026 +0800
> 
>     userfaultfd05: require CONFIG_HAVE_ARCH_USERFAULTFD_WP

sigh. Im wondering why it didn't catch it, this is the basics.

I think we need to separate the logical review from everything
that can be done with a linter. I will explore this possibility
in the next weeks when I will have more time.

Regards,
--
Andrea Cervesato
SUSE QE Automation Engineer Linux
andrea.cervesato@suse.com

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2026-05-07 16:57 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-07 12:28 [LTP] [PATCH v4 1/3] userfaultfd: Add helper for checking UFFD feature support Ricardo Branco
2026-05-07 12:28 ` [LTP] [PATCH v4 2/3] userfaultfd: Use two-step handshake to probe features Ricardo Branco
2026-05-07 12:36   ` Andrea Cervesato via ltp
2026-05-07 12:28 ` [LTP] [PATCH v4 3/3] userfaultfd: Reset wp_fault_seen on each run() Ricardo Branco
2026-05-07 12:36   ` Andrea Cervesato via ltp
2026-05-07 12:40 ` [LTP] [PATCH v4 1/3] userfaultfd: Add helper for checking UFFD feature support Andrea Cervesato via ltp
2026-05-07 14:20 ` Cyril Hrubis
2026-05-07 14:22 ` [LTP] " linuxtestproject.agent
2026-05-07 14:40   ` Andrea Cervesato via ltp
2026-05-07 14:43     ` Cyril Hrubis
2026-05-07 16:57       ` Andrea Cervesato via ltp
  -- strict thread matches above, loose matches on Subject: below --
2026-05-07  8:31 [LTP] [PATCH v3 1/2] " Ricardo Branco
2026-05-07  9:40 ` [LTP] " linuxtestproject.agent

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox