[LTP] [PATCH v3] ioctl_pidfd01: check EACCESS error when SELinux is enabled

Petr Vorel pvorel@suse.cz
Wed Jul 30 10:24:35 CEST 2025


Hi Andrea,

> From: Andrea Cervesato <andrea.cervesato@suse.com>

> When SELinux is enabled with enforcing policy, ioctl_pidfd01 might fail
> with EACCESS. This is an error triggered by ioctl() syscall, before we
> actually reach the code we are about to test, so we need to consider
> this errno just in case enforcing policy is on.

Thanks!
Reviewed-by: Petr Vorel <pvorel@suse.cz>

ALso, we have yet another bug on some older kernel versions (found on 6.12 and
6.13, but 6.16 is not affected)
ioctl_pidfd.h:32: TBROK: ioctl(3,((((2U|1U) << (((0+8)+8)+14)) | (((0xFF)) << (0+8)) | (((11)) << 0) | ((((sizeof(struct pidfd_info)))) << ((0+8)+8)))),...) failed: ESRCH (3)

Kind regards,
Petr

> Signed-off-by: Andrea Cervesato <andrea.cervesato@suse.com>
> ---
> Following errors are caused by SELinux, trying to block any access to
> the file descriptor before actually accessing to it.

> ioctl_pidfd01.c:37: TINFO: io uring -> ...
> ioctl_pidfd01.c:28: TFAIL: ioctl(io uring, PIDFD_GET_INFO, info) expected EINVAL, EBADF, ENOTTY: EACCES (13)
> ---
> Changes in v3:
> - verify for EACCESS only
> - Link to v2: https://lore.kernel.org/r/20250729-ioctl_pidfd01_selinux-v2-1-2d92c0e56b25@suse.com

> Changes in v2:
> - disable the whole test if enforcing policy is on
> - Link to v1: https://lore.kernel.org/r/20250729-ioctl_pidfd01_selinux-v1-1-432e100a5a53@suse.com
> ---
>  testcases/kernel/syscalls/ioctl/ioctl_pidfd01.c | 9 ++++++++-
>  1 file changed, 8 insertions(+), 1 deletion(-)

> diff --git a/testcases/kernel/syscalls/ioctl/ioctl_pidfd01.c b/testcases/kernel/syscalls/ioctl/ioctl_pidfd01.c
> index 92c51c6c0d0dcbb2308c1a8d82b2a92650f3a6b3..a786b25b495b7b465ef8a2c410ae6c11e0e01763 100644
> --- a/testcases/kernel/syscalls/ioctl/ioctl_pidfd01.c
> +++ b/testcases/kernel/syscalls/ioctl/ioctl_pidfd01.c
> @@ -10,10 +10,12 @@

>  #include "ioctl_pidfd.h"

> +static int exp_errnos_num;
>  static int exp_errnos[] = {
>  	EINVAL,
>  	EBADF,
>  	ENOTTY,
> +	EACCES,
>  };

>  static struct pidfd_info *info;
> @@ -26,7 +28,7 @@ static void test_bad_pidfd(struct tst_fd *fd_in)
>  	}

>  	TST_EXP_FAIL_ARR(ioctl(fd_in->fd, PIDFD_GET_INFO, info),
> -		  exp_errnos, ARRAY_SIZE(exp_errnos),
> +		  exp_errnos, exp_errnos_num,
>  		  "ioctl(%s, PIDFD_GET_INFO, info)",
>  		  tst_fd_desc(fd_in));
>  }
> @@ -44,6 +46,11 @@ static void setup(void)
>  	if (!ioctl_pidfd_info_exit_supported())
>  		tst_brk(TCONF, "PIDFD_INFO_EXIT is not supported by ioctl()");

> +	exp_errnos_num = ARRAY_SIZE(exp_errnos) - 1;
> +
> +	if (tst_selinux_enforcing())
> +		exp_errnos_num++;
> +
>  	info->mask = PIDFD_INFO_EXIT;
>  }


> ---
> base-commit: 91e6272febf95e19a8300695dfc2089569adf9d8
> change-id: 20250729-ioctl_pidfd01_selinux-1479ea457850

> Best regards,


More information about the ltp mailing list