[LTP] hugetlb/hugeshmat: Add hugeshmat06 migrated from libhugetlbfs shm-perms
Samir M
samir@linux.ibm.com
Fri Aug 21 20:50:03 CEST 2026
On 21/08/26 12:10 am, linuxtestproject.agent@gmail.com wrote:
> Hi Samir,
>
> On Aug 20, 2026, Samir Mulani wrote:
>> hugetlb/hugeshmat: Add hugeshmat06 migrated from libhugetlbfs shm-perms
>> #define HPAGES_IN_SEG 4
>> #define MAX_CHILDREN 128
>>
>> iterations = MIN((long)tst_hugepages, (long)MAX_CHILDREN);
> Could the iteration count retain the original test's exhaustion guarantee?
> Each leaked attach reserves HPAGES_IN_SEG pages, so a pool containing N
> hugepages requires more than N / HPAGES_IN_SEG attaches to expose the leak.
> The original test calculated that value plus one.
>
> With this cap, one execution can pass without detecting the bug when the pool
> contains 512 or more hugepages. Even the "-i 5" runtest entry is insufficient
> at 2560 or more. Could the count instead be derived from the pool and segment
> sizes, including the final attach that exceeds the pool?
Fixed. Replaced MIN(tst_hugepages, MAX_CHILDREN) with tst_hugepages /
HPAGES_IN_SEG + 1 and removed MAX_CHILDREN. Now the count is derived
from the pool size and segment size, and includes the final attach that
must fail on a buggy kernel.
>
>> if (shmaddr == (void *)-1) {
>> tst_res(TFAIL | TERRNO,
>> "Child %d: shmat() failed, hugepage reservation pool may be exhausted",
>> getpid());
>> exit(EXIT_FAILURE);
>> }
> Could the child exit successfully after reporting TFAIL?
> tst_reap_children() converts this nonzero status into an additional TBROK
> ("Invalid child exit value") and aborts the parent. LTP already propagates the
> child's tst_res() result, so the regression should remain a TFAIL rather than
> also becoming a broken-test result.
Fixed. Changed both exit(EXIT_FAILURE) to exit(EXIT_SUCCESS) — once in
the shmat() failure path and once in the pattern-mismatch path. Also
updated the comment above tst_reap_children() which was incorrectly
describing the behavior.
>> static struct tst_test test = {
>> .needs_root = 1,
> This is described as a regression test, but the test has no .tags entry.
> Could the corresponding linux-git regression fix tag be added?
Fixed. The regression was fixed by upstream commit f83a275dbc5c ("mm:
account for MAP_SHARED mappings using VM_MAYSHARE and not VM_SHARED in
hugetlbfs" by Mel Gorman). Added the .tags entry with the 12-character
hash, consistent with the other tests in the same directory.
>> +/hugetlb/hugeshmat/hugeshmat06
> Could this binary instead be ignored by
> testcases/kernel/mem/hugetlb/hugeshmat/.gitignore as /hugeshmat06? New test
> binaries should use a leaf-directory .gitignore rather than the shared
> testcases/kernel/mem/.gitignore.
This change is not required.
>> /*\
>> * Tests shared memory behavior when multiple processes attach to a
>> * hugepage-backed segment with different permissions.
> Could the exported description explain why root is required? The test sets
> .needs_root because the framework adjusts the hugepage pool and mounts
> hugetlbfs.
>
>> * pool. This is detected by using raw shmat() in each child so that a
> Could shmat() use the ":manpage:`shmat(2)`" role here? Syscalls in exported
> test descriptions should use their man-page role.
Fixed both. Added a sentence in the exported description explaining that
root is required because the LTP framework adjusts the hugepage pool and
mounts hugetlbfs. Also changed shmat() to :manpage:`shmat(2)` in the
same block.
> 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
Regards,
Samir
More information about the ltp
mailing list