brintos

brintos / linux-shallow public Read only

0
0
Text · 1.5 KiB · c7b9ba8 Raw
59 lines · c
1// SPDX-License-Identifier: GPL-2.02/* Copyright (C) 2024. Huawei Technologies Co., Ltd */3#include "test_progs.h"4#include "read_vsyscall.skel.h"5 6#if defined(__x86_64__)7/* For VSYSCALL_ADDR */8#include <asm/vsyscall.h>9#else10/* To prevent build failure on non-x86 arch */11#define VSYSCALL_ADDR 0UL12#endif13 14struct read_ret_desc {15	const char *name;16	int ret;17} all_read[] = {18	{ .name = "probe_read_kernel", .ret = -ERANGE },19	{ .name = "probe_read_kernel_str", .ret = -ERANGE },20	{ .name = "probe_read", .ret = -ERANGE },21	{ .name = "probe_read_str", .ret = -ERANGE },22	{ .name = "probe_read_user", .ret = -EFAULT },23	{ .name = "probe_read_user_str", .ret = -EFAULT },24	{ .name = "copy_from_user", .ret = -EFAULT },25	{ .name = "copy_from_user_task", .ret = -EFAULT },26	{ .name = "copy_from_user_str", .ret = -EFAULT },27};28 29void test_read_vsyscall(void)30{31	struct read_vsyscall *skel;32	unsigned int i;33	int err;34 35#if !defined(__x86_64__)36	test__skip();37	return;38#endif39	skel = read_vsyscall__open_and_load();40	if (!ASSERT_OK_PTR(skel, "read_vsyscall open_load"))41		return;42 43	skel->bss->target_pid = getpid();44	err = read_vsyscall__attach(skel);45	if (!ASSERT_EQ(err, 0, "read_vsyscall attach"))46		goto out;47 48	/* userspace may don't have vsyscall page due to LEGACY_VSYSCALL_NONE,49	 * but it doesn't affect the returned error codes.50	 */51	skel->bss->user_ptr = (void *)VSYSCALL_ADDR;52	usleep(1);53 54	for (i = 0; i < ARRAY_SIZE(all_read); i++)55		ASSERT_EQ(skel->bss->read_ret[i], all_read[i].ret, all_read[i].name);56out:57	read_vsyscall__destroy(skel);58}59