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
16int 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
27int 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
40int 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
50TEST(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
62TEST_HARNESS_MAIN
63