summaryrefslogtreecommitdiffstats
path: root/doc/man/man3/seccomp_syscall_resolve_name.3
blob: 3c0f7897b43fcbb0575ee50ffb25fc5117b6570d (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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
.TH "seccomp_syscall_resolve_name" 3 "8 May 2014" "paul@paul-moore.com" "libseccomp Documentation"
.\" //////////////////////////////////////////////////////////////////////////
.SH NAME
.\" //////////////////////////////////////////////////////////////////////////
seccomp_syscall_resolve_name \- Resolve a syscall name
.\" //////////////////////////////////////////////////////////////////////////
.SH SYNOPSIS
.\" //////////////////////////////////////////////////////////////////////////
.nf
.B #include <seccomp.h>
.sp
.BI "int seccomp_syscall_resolve_name(const char *" name ");"
.BI "int seccomp_syscall_resolve_name_arch(uint32_t " arch_token ","
.BI "                                      const char *" name ");"
.BI "int seccomp_syscall_resolve_name_rewrite(uint32_t " arch_token ","
.BI "                                         const char *" name ");"
.BI "char *seccomp_syscall_resolve_num_arch(uint32_t " arch_token ", int " num ");"
.sp
Link with \fI\-lseccomp\fP.
.fi
.\" //////////////////////////////////////////////////////////////////////////
.SH DESCRIPTION
.\" //////////////////////////////////////////////////////////////////////////
.P
The
.BR seccomp_syscall_resolve_name() ,
.BR seccomp_syscall_resolve_name_arch() ,
and
.BR seccomp_syscall_resolve_name_rewrite()
functions resolve the commonly used syscall name to the syscall number used by
the kernel and the rest of the libseccomp API, with
.BR seccomp_syscall_resolve_name_rewrite()
rewriting the syscall number for architectures that modify the syscall.  Syscall
rewriting typically happens in case of a multiplexed syscall, like
.BR socketcall (2)
or
.BR ipc (2)
on x86.
.BR seccomp_syscall_resolve_num_arch()
function resolves the syscall number used by the kernel to the commonly used
syscall name.
.P
The caller is responsible for freeing the returned string from
.BR seccomp_syscall_resolve_num_arch() .
.\" //////////////////////////////////////////////////////////////////////////
.SH RETURN VALUE
.\" //////////////////////////////////////////////////////////////////////////
.P
In the case of
.BR seccomp_syscall_resolve_name() ,
.BR seccomp_syscall_resolve_name_arch() ,
and
.BR seccomp_syscall_resolve_name_rewrite()
the associated syscall number is returned, with the negative pseudo syscall
number being returned in cases where the given syscall does not exist for the
architecture.  The value
.BR __NR_SCMP_ERROR
is returned in case of error.  In all cases, the return value is suitable for
use in any libseccomp API function which requires the syscall number, examples include
.BR seccomp_rule_add ()
and
.BR seccomp_rule_add_exact ().
.P
In the case of
.BR seccomp_syscall_resolve_num_arch()
the associated syscall name is returned and it remains the callers
responsibility to free the returned string via
.BR free (3).
.\" //////////////////////////////////////////////////////////////////////////
.SH EXAMPLES
.\" //////////////////////////////////////////////////////////////////////////
.nf
#include <seccomp.h>

int main(int argc, char *argv[])
{
	int rc = \-1;
	scmp_filter_ctx ctx;

	ctx = seccomp_init(SCMP_ACT_KILL);
	if (ctx == NULL)
		goto out;

	/* ... */

	rc = seccomp_rule_add(ctx, SCMP_ACT_ALLOW,
	                      seccomp_syscall_resolve_name("open"), 0);
	if (rc < 0)
		goto out;

	/* ... */

	rc = seccomp_load(ctx);
	if (rc < 0)
		goto out;

	/* ... */

out:
	seccomp_release(ctx);
	return \-rc;
}
.fi
.\" //////////////////////////////////////////////////////////////////////////
.SH NOTES
.\" //////////////////////////////////////////////////////////////////////////
.P
In case of bare syscalls implemented on top of a multiplexed syscall,
.BR seccomp_syscall_resolve_name()
and
.BR seccomp_syscall_resolve_name_arch()
can be used to verify if a bare syscall is implemented for a specific
architecture, while
.BR seccomp_syscall_resolve_name_rewrite()
can be used to determine the underlying multiplexed syscall.
.P
While the seccomp filter can be generated independent of the kernel, kernel
support is required to load and enforce the seccomp filter generated by
libseccomp.
.P
The libseccomp project site, with more information and the source code
repository, can be found at https://github.com/seccomp/libseccomp.  This tool,
as well as the libseccomp library, is currently under development, please
report any bugs at the project site or directly to the author.
.\" //////////////////////////////////////////////////////////////////////////
.SH AUTHOR
.\" //////////////////////////////////////////////////////////////////////////
Paul Moore <paul@paul-moore.com>
.\" //////////////////////////////////////////////////////////////////////////
.SH SEE ALSO
.\" //////////////////////////////////////////////////////////////////////////
.BR seccomp_rule_add (3),
.BR seccomp_rule_add_exact (3)