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