// SPDX-License-Identifier: GPL-2.0
/* Copyright (C) 2024. Huawei Technologies Co., Ltd */
#include "test_progs.h"
#include "read_vsyscall.skel.h"

#if defined(__x86_64__)
/* For VSYSCALL_ADDR */
#include <asm/vsyscall.h>
#else
/* To prevent build failure on non-x86 arch */
#define VSYSCALL_ADDR 0UL
#endif

struct read_ret_desc {
	const char *name;
	int ret;
} all_read[] = {
	{ .name = "probe_read_kernel", .ret = -ERANGE },
	{ .name = "probe_read_kernel_str", .ret = -ERANGE },
	{ .name = "probe_read", .ret = -ERANGE },
	{ .name = "probe_read_str", .ret = -ERANGE },
	{ .name = "probe_read_user", .ret = -EFAULT },
	{ .name = "probe_read_user_str", .ret = -EFAULT },
	{ .name = "copy_from_user", .ret = -EFAULT },
	{ .name = "copy_from_user_task", .ret = -EFAULT },
};

void test_read_vsyscall(void)
{
	struct read_vsyscall *skel;
	unsigned int i;
	int err;

#if !defined(__x86_64__)
	test__skip();
	return;
#endif
	skel = read_vsyscall__open_and_load();
	if (!ASSERT_OK_PTR(skel, "read_vsyscall open_load"))
		return;

	skel->bss->target_pid = getpid();
	err = read_vsyscall__attach(skel);
	if (!ASSERT_EQ(err, 0, "read_vsyscall attach"))
		goto out;

	/* userspace may don't have vsyscall page due to LEGACY_VSYSCALL_NONE,
	 * but it doesn't affect the returned error codes.
	 */
	skel->bss->user_ptr = (void *)VSYSCALL_ADDR;
	usleep(1);

	for (i = 0; i < ARRAY_SIZE(all_read); i++)
		ASSERT_EQ(skel->bss->read_ret[i], all_read[i].ret, all_read[i].name);
out:
	read_vsyscall__destroy(skel);
}
