1*e0606daeSOsama Muhammad // SPDX-License-Identifier: GPL-2.0
2*e0606daeSOsama Muhammad /*
3*e0606daeSOsama Muhammad * This test covers the PR_SET_NAME functionality of prctl calls
4*e0606daeSOsama Muhammad */
5*e0606daeSOsama Muhammad
6*e0606daeSOsama Muhammad #include <errno.h>
7*e0606daeSOsama Muhammad #include <sys/prctl.h>
8*e0606daeSOsama Muhammad #include <string.h>
9*e0606daeSOsama Muhammad
10*e0606daeSOsama Muhammad #include "../kselftest_harness.h"
11*e0606daeSOsama Muhammad
12*e0606daeSOsama Muhammad #define CHANGE_NAME "changename"
13*e0606daeSOsama Muhammad #define EMPTY_NAME ""
14*e0606daeSOsama Muhammad #define TASK_COMM_LEN 16
15*e0606daeSOsama Muhammad
set_name(char * name)16*e0606daeSOsama Muhammad int set_name(char *name)
17*e0606daeSOsama Muhammad {
18*e0606daeSOsama Muhammad int res;
19*e0606daeSOsama Muhammad
20*e0606daeSOsama Muhammad res = prctl(PR_SET_NAME, name, NULL, NULL, NULL);
21*e0606daeSOsama Muhammad
22*e0606daeSOsama Muhammad if (res < 0)
23*e0606daeSOsama Muhammad return -errno;
24*e0606daeSOsama Muhammad return res;
25*e0606daeSOsama Muhammad }
26*e0606daeSOsama Muhammad
check_is_name_correct(char * check_name)27*e0606daeSOsama Muhammad int check_is_name_correct(char *check_name)
28*e0606daeSOsama Muhammad {
29*e0606daeSOsama Muhammad char name[TASK_COMM_LEN];
30*e0606daeSOsama Muhammad int res;
31*e0606daeSOsama Muhammad
32*e0606daeSOsama Muhammad res = prctl(PR_GET_NAME, name, NULL, NULL, NULL);
33*e0606daeSOsama Muhammad
34*e0606daeSOsama Muhammad if (res < 0)
35*e0606daeSOsama Muhammad return -errno;
36*e0606daeSOsama Muhammad
37*e0606daeSOsama Muhammad return !strcmp(name, check_name);
38*e0606daeSOsama Muhammad }
39*e0606daeSOsama Muhammad
check_null_pointer(char * check_name)40*e0606daeSOsama Muhammad int check_null_pointer(char *check_name)
41*e0606daeSOsama Muhammad {
42*e0606daeSOsama Muhammad char *name = NULL;
43*e0606daeSOsama Muhammad int res;
44*e0606daeSOsama Muhammad
45*e0606daeSOsama Muhammad res = prctl(PR_GET_NAME, name, NULL, NULL, NULL);
46*e0606daeSOsama Muhammad
47*e0606daeSOsama Muhammad return res;
48*e0606daeSOsama Muhammad }
49*e0606daeSOsama Muhammad
TEST(rename_process)50*e0606daeSOsama Muhammad TEST(rename_process) {
51*e0606daeSOsama Muhammad
52*e0606daeSOsama Muhammad EXPECT_GE(set_name(CHANGE_NAME), 0);
53*e0606daeSOsama Muhammad EXPECT_TRUE(check_is_name_correct(CHANGE_NAME));
54*e0606daeSOsama Muhammad
55*e0606daeSOsama Muhammad EXPECT_GE(set_name(EMPTY_NAME), 0);
56*e0606daeSOsama Muhammad EXPECT_TRUE(check_is_name_correct(EMPTY_NAME));
57*e0606daeSOsama Muhammad
58*e0606daeSOsama Muhammad EXPECT_GE(set_name(CHANGE_NAME), 0);
59*e0606daeSOsama Muhammad EXPECT_LT(check_null_pointer(CHANGE_NAME), 0);
60*e0606daeSOsama Muhammad }
61*e0606daeSOsama Muhammad
62*e0606daeSOsama Muhammad TEST_HARNESS_MAIN
63