162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * This test covers the PR_SET_NAME functionality of prctl calls 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <errno.h> 762306a36Sopenharmony_ci#include <sys/prctl.h> 862306a36Sopenharmony_ci#include <string.h> 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include "../kselftest_harness.h" 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#define CHANGE_NAME "changename" 1362306a36Sopenharmony_ci#define EMPTY_NAME "" 1462306a36Sopenharmony_ci#define TASK_COMM_LEN 16 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ciint set_name(char *name) 1762306a36Sopenharmony_ci{ 1862306a36Sopenharmony_ci int res; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci res = prctl(PR_SET_NAME, name, NULL, NULL, NULL); 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci if (res < 0) 2362306a36Sopenharmony_ci return -errno; 2462306a36Sopenharmony_ci return res; 2562306a36Sopenharmony_ci} 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ciint check_is_name_correct(char *check_name) 2862306a36Sopenharmony_ci{ 2962306a36Sopenharmony_ci char name[TASK_COMM_LEN]; 3062306a36Sopenharmony_ci int res; 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_ci res = prctl(PR_GET_NAME, name, NULL, NULL, NULL); 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci if (res < 0) 3562306a36Sopenharmony_ci return -errno; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci return !strcmp(name, check_name); 3862306a36Sopenharmony_ci} 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ciint check_null_pointer(char *check_name) 4162306a36Sopenharmony_ci{ 4262306a36Sopenharmony_ci char *name = NULL; 4362306a36Sopenharmony_ci int res; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci res = prctl(PR_GET_NAME, name, NULL, NULL, NULL); 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci return res; 4862306a36Sopenharmony_ci} 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ciTEST(rename_process) { 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci EXPECT_GE(set_name(CHANGE_NAME), 0); 5362306a36Sopenharmony_ci EXPECT_TRUE(check_is_name_correct(CHANGE_NAME)); 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci EXPECT_GE(set_name(EMPTY_NAME), 0); 5662306a36Sopenharmony_ci EXPECT_TRUE(check_is_name_correct(EMPTY_NAME)); 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci EXPECT_GE(set_name(CHANGE_NAME), 0); 5962306a36Sopenharmony_ci EXPECT_LT(check_null_pointer(CHANGE_NAME), 0); 6062306a36Sopenharmony_ci} 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ciTEST_HARNESS_MAIN 63