* [LTP] [PATCH v8] hugemmap/hugemmap41: Migrate ptrace-write-hugepage from libhugetlbfs
@ 2026-08-09 18:50 Pavithra
2026-08-09 19:37 ` [LTP] " linuxtestproject.agent
2026-08-28 11:12 ` [LTP] [PATCH v8] " Cyril Hrubis
0 siblings, 2 replies; 3+ messages in thread
From: Pavithra @ 2026-08-09 18:50 UTC (permalink / raw)
To: ltp; +Cc: pavrampu
This test verifies that ptrace POKEDATA and PEEKDATA operations work
correctly on hugepage-backed memory regions. Migrating it to LTP as
libhugetlbfs is not actively maintained.
Signed-off-by: Pavithra <pavrampu@linux.ibm.com>
---
v7 -> v8:
Replace SAFE_PTRACE(PTRACE_POKEDATA, ...) with TEST() and an explicit
TFAIL check, consistent with how PTRACE_PEEKDATA is already handled.
Link to v7: https://lore.kernel.org/ltp/20260809171646.1832676-1-pavrampu@linux.ibm.com/
---
runtest/hugetlb | 1 +
testcases/kernel/mem/.gitignore | 1 +
.../kernel/mem/hugetlb/hugemmap/hugemmap41.c | 132 ++++++++++++++++++
3 files changed, 134 insertions(+)
create mode 100644 testcases/kernel/mem/hugetlb/hugemmap/hugemmap41.c
diff --git a/runtest/hugetlb b/runtest/hugetlb
index 6b35c1f42..621c9718a 100644
--- a/runtest/hugetlb
+++ b/runtest/hugetlb
@@ -40,6 +40,7 @@ hugemmap35 hugemmap35
hugemmap36 hugemmap36
hugemmap37 hugemmap37
hugemmap38 hugemmap38
+hugemmap41 hugemmap41
hugemmap05_1 hugemmap05 -m
hugemmap05_2 hugemmap05 -s
hugemmap05_3 hugemmap05 -s -m
diff --git a/testcases/kernel/mem/.gitignore b/testcases/kernel/mem/.gitignore
index e63a6dde7..9e706e1c8 100644
--- a/testcases/kernel/mem/.gitignore
+++ b/testcases/kernel/mem/.gitignore
@@ -40,6 +40,7 @@
/hugetlb/hugemmap/hugemmap36
/hugetlb/hugemmap/hugemmap37
/hugetlb/hugemmap/hugemmap38
+/hugetlb/hugemmap/hugemmap41
/hugetlb/hugeshmat/hugeshmat01
/hugetlb/hugeshmat/hugeshmat02
/hugetlb/hugeshmat/hugeshmat03
diff --git a/testcases/kernel/mem/hugetlb/hugemmap/hugemmap41.c b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap41.c
new file mode 100644
index 000000000..d59811d8f
--- /dev/null
+++ b/testcases/kernel/mem/hugetlb/hugemmap/hugemmap41.c
@@ -0,0 +1,132 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Copyright (C) 2005-2006 David Gibson & Adam Litke, IBM Corporation.
+ * Copyright (c) 2026 Pavithra <pavrampu@linux.ibm.com>
+ */
+
+/*\
+ * Test :manpage:`ptrace(2)` write to hugepage memory.
+ *
+ * A child process maps a hugepage via hugetlbfs, zeroes it, and sends
+ * the mapped address to the parent. The parent attaches with
+ * :manpage:`ptrace(2)`, then uses PTRACE_POKEDATA and PTRACE_PEEKDATA
+ * to write and read back a known value at two different offsets within
+ * the hugepage, verifying that ptrace operates correctly on
+ * hugepage-backed memory regions.
+ *
+ * Requires root to mount hugetlbfs and for :manpage:`ptrace(2)`
+ * PTRACE_ATTACH to work across processes when ptrace_scope is
+ * restrictive.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <sys/ptrace.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#include "tst_test.h"
+#include "hugetlb.h"
+
+#define CONST 0xdeadbeefL
+#define MNTPOINT "hugetlbfs/"
+
+static long hpage_size;
+static int fd = -1;
+
+static void child(int hugefd, int pipefd[2])
+{
+ void *p;
+
+ SAFE_CLOSE(pipefd[0]);
+
+ p = SAFE_MMAP(NULL, hpage_size, PROT_READ | PROT_WRITE, MAP_SHARED,
+ hugefd, 0);
+
+ memset(p, 0, hpage_size);
+
+ tst_res(TINFO, "Child mapped data at %p", p);
+
+ SAFE_WRITE(SAFE_WRITE_ALL, pipefd[1], &p, sizeof(p));
+ SAFE_CLOSE(pipefd[1]);
+
+ pause();
+ /* Child is killed by parent via SIGKILL, so cleanup is not reached */
+}
+
+static void do_poke(pid_t pid, void *p)
+{
+ tst_res(TINFO, "Poking at %p...", p);
+ TEST(ptrace(PTRACE_POKEDATA, pid, p, (void *)CONST));
+ if (TST_RET == -1)
+ tst_brk(TFAIL | TTERRNO, "ptrace(POKEDATA) failed");
+
+ tst_res(TINFO, "Peeking at %p...", p);
+ TEST(ptrace(PTRACE_PEEKDATA, pid, p, NULL));
+ if (TST_ERR)
+ tst_brk(TFAIL | TTERRNO, "ptrace(PEEKDATA) failed");
+
+ TST_EXP_EQ_LU((unsigned long)TST_RET, CONST);
+}
+
+static void run_test(void)
+{
+ int pipefd[2];
+ pid_t cpid;
+ void *p;
+ int status;
+
+ fd = tst_creat_unlinked(MNTPOINT, 0, 0600);
+
+ SAFE_PIPE(pipefd);
+
+ cpid = SAFE_FORK();
+
+ if (cpid == 0) {
+ child(fd, pipefd);
+ exit(0);
+ }
+
+ SAFE_CLOSE(pipefd[1]);
+ SAFE_READ(1, pipefd[0], &p, sizeof(p));
+ SAFE_CLOSE(pipefd[0]);
+
+ tst_res(TINFO, "Parent received address %p", p);
+
+ SAFE_PTRACE(PTRACE_ATTACH, cpid, NULL, NULL);
+
+ SAFE_WAITPID(cpid, &status, 0);
+ if (!WIFSTOPPED(status))
+ tst_brk(TBROK, "Child %d was not stopped", cpid);
+
+ do_poke(cpid, p);
+ do_poke(cpid, p + getpagesize());
+
+ SAFE_KILL(cpid, SIGKILL);
+ SAFE_WAITPID(cpid, &status, 0);
+
+ SAFE_CLOSE(fd);
+}
+
+static void setup(void)
+{
+ hpage_size = tst_get_hugepage_size();
+}
+
+static void cleanup(void)
+{
+ if (fd != -1)
+ SAFE_CLOSE(fd);
+}
+
+static struct tst_test test = {
+ .needs_root = 1,
+ .mntpoint = MNTPOINT,
+ .needs_hugetlbfs = 1,
+ .hugepages = {1, TST_NEEDS},
+ .forks_child = 1,
+ .setup = setup,
+ .cleanup = cleanup,
+ .test_all = run_test,
+};
--
2.55.0
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply related [flat|nested] 3+ messages in thread* Re: [LTP] hugemmap/hugemmap41: Migrate ptrace-write-hugepage from libhugetlbfs
2026-08-09 18:50 [LTP] [PATCH v8] hugemmap/hugemmap41: Migrate ptrace-write-hugepage from libhugetlbfs Pavithra
@ 2026-08-09 19:37 ` linuxtestproject.agent
2026-08-28 11:12 ` [LTP] [PATCH v8] " Cyril Hrubis
1 sibling, 0 replies; 3+ messages in thread
From: linuxtestproject.agent @ 2026-08-09 19:37 UTC (permalink / raw)
To: Pavithra; +Cc: ltp
Hi Pavithra,
On Mon, 10 Aug 2026, Pavithra wrote:
> hugemmap/hugemmap41: Migrate ptrace-write-hugepage from libhugetlbfs
> + SAFE_PTRACE(PTRACE_ATTACH, cpid, NULL, NULL);
Could PTRACE_ATTACH be handled without SAFE_PTRACE() so that EPERM caused
by Yama policy can be reported as TCONF? With ptrace_scope=3 Linux denies
every attach, including requests from root, and the wrapper converts this
expected policy denial to TBROK before the test reaches PTRACE_POKEDATA.
> +/hugetlb/hugemmap/hugemmap41
Could this entry instead be placed in a .gitignore in the hugemmap leaf
directory? LTP requires new test binaries to be ignored in their own test
directory rather than from a parent directory.
Verdict - Needs revision
---
Note:
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] 3+ messages in thread
* Re: [LTP] [PATCH v8] hugemmap/hugemmap41: Migrate ptrace-write-hugepage from libhugetlbfs
2026-08-09 18:50 [LTP] [PATCH v8] hugemmap/hugemmap41: Migrate ptrace-write-hugepage from libhugetlbfs Pavithra
2026-08-09 19:37 ` [LTP] " linuxtestproject.agent
@ 2026-08-28 11:12 ` Cyril Hrubis
1 sibling, 0 replies; 3+ messages in thread
From: Cyril Hrubis @ 2026-08-28 11:12 UTC (permalink / raw)
To: Pavithra; +Cc: ltp
Hi!
Applied, thanks.
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-08-28 11:13 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-09 18:50 [LTP] [PATCH v8] hugemmap/hugemmap41: Migrate ptrace-write-hugepage from libhugetlbfs Pavithra
2026-08-09 19:37 ` [LTP] " linuxtestproject.agent
2026-08-28 11:12 ` [LTP] [PATCH v8] " Cyril Hrubis
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox