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