summaryrefslogtreecommitdiff
path: root/src/sysctl.c
blob: 8624e018eb6c4b0d4a52d1479c33c26a8e04efce (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
 * Copyright (c) 2022 Dmitry V. Levin <ldv@strace.io>
 * All rights reserved.
 *
 * SPDX-License-Identifier: LGPL-2.1-or-later
 */

#include "defs.h"

#include DEF_MPERS_TYPE(struct_sysctl_args)
#include <linux/sysctl.h>
typedef struct __sysctl_args struct_sysctl_args;
#include MPERS_DEFS

SYS_FUNC(sysctl)
{
	struct_sysctl_args info;

	if (umove_or_printaddr(tcp, tcp->u_arg[0], &info))
		return RVAL_DECODED;

	tprint_struct_begin();
	PRINT_FIELD_PTR(info, name);
	tprint_struct_next();
	PRINT_FIELD_D(info, nlen);
	tprint_struct_next();
	PRINT_FIELD_PTR(info, oldval);
	tprint_struct_next();
	PRINT_FIELD_PTR(info, oldlenp);
	tprint_struct_next();
	PRINT_FIELD_PTR(info, newval);
	tprint_struct_next();
	PRINT_FIELD_U(info, newlen);
	tprint_struct_end();

	return RVAL_DECODED;
}