brintos

brintos / linux-shallow public Read only

0
0
Text · 1.6 KiB · 562f707 Raw
95 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * This test covers the PR_SET_NAME functionality of prctl calls4 */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 1615#define MAX_PATH_LEN 5016 17int set_name(char *name)18{19	int res;20 21	res = prctl(PR_SET_NAME, name, NULL, NULL, NULL);22 23	if (res < 0)24		return -errno;25	return res;26}27 28int check_is_name_correct(char *check_name)29{30	char name[TASK_COMM_LEN];31	int res;32 33	res = prctl(PR_GET_NAME, name, NULL, NULL, NULL);34 35	if (res < 0)36		return -errno;37 38	return !strcmp(name, check_name);39}40 41int check_null_pointer(char *check_name)42{43	char *name = NULL;44	int res;45 46	res = prctl(PR_GET_NAME, name, NULL, NULL, NULL);47 48	return res;49}50 51int check_name(void)52{53 54	int pid;55 56	pid = getpid();57	FILE *fptr = NULL;58	char path[MAX_PATH_LEN] = {};59	char name[TASK_COMM_LEN] = {};60	char output[TASK_COMM_LEN] = {};61	int j;62 63	j = snprintf(path, MAX_PATH_LEN, "/proc/self/task/%d/comm", pid);64	fptr = fopen(path, "r");65	if (!fptr)66		return -EIO;67 68	fscanf(fptr, "%s", output);69	if (ferror(fptr))70		return -EIO;71 72	int res = prctl(PR_GET_NAME, name, NULL, NULL, NULL);73 74	if (res < 0)75		return -errno;76 77	return !strcmp(output, name);78}79 80TEST(rename_process) {81 82	EXPECT_GE(set_name(CHANGE_NAME), 0);83	EXPECT_TRUE(check_is_name_correct(CHANGE_NAME));84 85	EXPECT_GE(set_name(EMPTY_NAME), 0);86	EXPECT_TRUE(check_is_name_correct(EMPTY_NAME));87 88	EXPECT_GE(set_name(CHANGE_NAME), 0);89	EXPECT_LT(check_null_pointer(CHANGE_NAME), 0);90 91	EXPECT_TRUE(check_name());92}93 94TEST_HARNESS_MAIN95