1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Copyright (c) 2020 Viresh Kumar <viresh.kumar@linaro.org>
4 */
5
6/*\
7 * [Description]
8 *
9 * Tests basic error handling of the pidfd_open syscall.
10 *
11 * - ESRCH the process specified by pid does not exist
12 * - EINVAL pid is not valid
13 * - EINVAL flags is not valid
14 */
15#include "tst_test.h"
16#include "lapi/pidfd.h"
17
18static pid_t expired_pid, my_pid, invalid_pid = -1;
19
20static struct tcase {
21	char *name;
22	pid_t *pid;
23	int flags;
24	int exp_errno;
25} tcases[] = {
26	{"expired pid", &expired_pid, 0, ESRCH},
27	{"invalid pid", &invalid_pid, 0, EINVAL},
28	{"invalid flags", &my_pid, 1, EINVAL},
29};
30
31static void setup(void)
32{
33	pidfd_open_supported();
34	expired_pid = tst_get_unused_pid();
35	my_pid = getpid();
36}
37
38static void run(unsigned int n)
39{
40	struct tcase *tc = &tcases[n];
41
42	TST_EXP_FAIL2(pidfd_open(*tc->pid, tc->flags), tc->exp_errno,
43			"pidfd_open with %s", tc->name);
44}
45
46static struct tst_test test = {
47	.tcnt = ARRAY_SIZE(tcases),
48	.test = run,
49	.setup = setup,
50};
51