Linux Test Project
 help / color / mirror / Atom feed
From: Petr Vorel <pvorel@suse.cz>
To: Wake Liu <wakel@google.com>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH] listmount04: Detect EBADF behavior dynamically at runtime
Date: Fri, 24 Jul 2026 14:11:14 +0200	[thread overview]
Message-ID: <20260724121114.GB983347@pevik> (raw)
In-Reply-To: <20260724095737.3631000-1-wakel@google.com>

> Upstream commit 78f0e33cd6c9 ("fs/namespace: correctly handle errors
> returned by grab_requested_mnt_ns") changed the errno from EINVAL to
> EBADF when an invalid mount namespace file descriptor is passed to
> listmount(). This change has been backported to various stable kernels
> (e.g., 6.12.59 LTS).

> Instead of hardcoding version checks for every stable backport, probe
> the behavior dynamically in setup() by calling listmount() with an
> invalid fd (-1) and checking the returned errno.

> Signed-off-by: Wake Liu <wakel@google.com>
> ---
>  .../kernel/syscalls/listmount/listmount04.c   | 27 ++++++++++++++++---
>  1 file changed, 23 insertions(+), 4 deletions(-)

> diff --git a/testcases/kernel/syscalls/listmount/listmount04.c b/testcases/kernel/syscalls/listmount/listmount04.c
> index 919f4c854..f7343608f 100644
> --- a/testcases/kernel/syscalls/listmount/listmount04.c
> +++ b/testcases/kernel/syscalls/listmount/listmount04.c
> @@ -153,16 +153,35 @@ static void run(unsigned int n)
>  	}

>  	TST_EXP_FAIL(tst_syscall(__NR_listmount, req, tc->mnt_ids,
> -		tc->nr_mnt_ids, tc->flags), tc->exp_errno,
> -		"%s", tc->msg);
> +				 tc->nr_mnt_ids, tc->flags),
> +		     tc->exp_errno,
> +		     "%s", tc->msg);
>  }

>  static void setup(void)
>  {
> -	if (tst_kvercmp(6, 17, 9) >= 0)
> +	mnt_id_req req = {
> +		.size = MNT_ID_REQ_SIZE_VER0,
> +		.mnt_id = LSMT_ROOT,
> +		.mnt_ns_fd = -1,
> +	};
> +	uint64_t ids[MNT_SIZE];
> +
> +	TEST(tst_syscall(__NR_listmount, &req, ids, MNT_SIZE, 0));
I wonder if we should use listmount() from listmount.h.

> +	if (TST_RET >= 0)
> +		tst_brk(TBROK, "listmount() succeeded unexpectedly with invalid fd");
Maybe we could have TST_EXP_FAIL_ARR_SILENT_BRK() in the future :)

> +
> +	if (TST_ERR == EBADF) {
>  		kver = AFTER_6_17_9;
At this point we may rename macros back to AFTER_6_18 and BEFORE_6_18, with
keeping note that it got backported into stable.

> -	else
> +		tst_res(TINFO, "Detected kernel with EBADF behavior for invalid mnt_ns_fd");
> +	} else if (TST_ERR == EINVAL) {
>  		kver = BEFORE_6_17_9;
> +		tst_res(TINFO, "Detected kernel with EINVAL behavior for invalid mnt_ns_fd");
> +	} else if (TST_ERR == ENOSYS) {
> +		tst_brk(TCONF, "listmount() syscall not supported");
This is IMHO not supported, because it's part of tst_syscall().
Other than this LGTM.
Reviewed-by: Petr Vorel <pvorel@suse.cz>

Kind regards,
Petr

> +	} else {
> +		tst_brk(TBROK | TTERRNO, "Unexpected error during probe");
> +	}

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

      reply	other threads:[~2026-07-24 12:11 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-24  9:57 [LTP] [PATCH] listmount04: Detect EBADF behavior dynamically at runtime Wake Liu via ltp
2026-07-24 12:11 ` Petr Vorel [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260724121114.GB983347@pevik \
    --to=pvorel@suse.cz \
    --cc=ltp@lists.linux.it \
    --cc=wakel@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox