Latest kernels return ENOTTY instead of EINVAL when invoking ioctl(pidfd, PIDFD_GET_INFO_SHORT, info_invalid). Update the test to accept both EINVAL and ENOTTY as valid errors to ensure compatibility across different kernel versions.
Link: https://lore.kernel.org/all/CA+G9fYtUp3Bk-5biynickO5U98CKKN1nkE7ooxJHp7dT1g3... Signed-off-by: Naresh Kamboju naresh.kamboju@linaro.org --- .../kernel/syscalls/ioctl/ioctl_pidfd05.c | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-)
diff --git a/testcases/kernel/syscalls/ioctl/ioctl_pidfd05.c b/testcases/kernel/syscalls/ioctl/ioctl_pidfd05.c index d20c6f074..ec92240a1 100644 --- a/testcases/kernel/syscalls/ioctl/ioctl_pidfd05.c +++ b/testcases/kernel/syscalls/ioctl/ioctl_pidfd05.c @@ -4,7 +4,7 @@ */
/*\ - * Verify that ioctl() raises an EINVAL error when PIDFD_GET_INFO is used. This + * Verify that ioctl() raises an EINVAL or ENOTTY error when PIDFD_GET_INFO is used. This * happens when: * * - info parameter is NULL @@ -14,6 +14,7 @@ #include "tst_test.h" #include "lapi/pidfd.h" #include "lapi/sched.h" +#include <errno.h> #include "ioctl_pidfd.h"
struct pidfd_info_invalid { @@ -43,7 +44,22 @@ static void run(void) exit(0);
TST_EXP_FAIL(ioctl(pidfd, PIDFD_GET_INFO, NULL), EINVAL); - TST_EXP_FAIL(ioctl(pidfd, PIDFD_GET_INFO_SHORT, info_invalid), EINVAL); + /* Expect ioctl to fail; accept either EINVAL or ENOTTY */ + TEST(ioctl(pidfd, PIDFD_GET_INFO_SHORT, info_invalid)); + if (TEST_RETURN == -1) { + if (TEST_ERRNO == EINVAL || TEST_ERRNO == ENOTTY) { + tst_res(TPASS, + "ioctl(PIDFD_GET_INFO_SHORT) failed as expected with %s", + tst_strerrno(TEST_ERRNO)); + } else { + tst_res(TFAIL, + "Unexpected errno: %s (expected EINVAL or ENOTTY)", + tst_strerrno(TEST_ERRNO)); + } + } else { + tst_res(TFAIL, "ioctl(PIDFD_GET_INFO_SHORT) unexpectedly succeeded"); + } +
SAFE_CLOSE(pidfd); }