1#include "ext4_utils/key_control.h"
2
3#include <stdarg.h>
4#include <unistd.h>
5#include <sys/syscall.h>
6#include <linux/keyctl.h>
7
8static long keyctl(int cmd, ...)
9{
10    va_list va;
11    unsigned long arg2, arg3, arg4, arg5;
12
13    va_start(va, cmd);
14    arg2 = va_arg(va, unsigned long);
15    arg3 = va_arg(va, unsigned long);
16    arg4 = va_arg(va, unsigned long);
17    arg5 = va_arg(va, unsigned long);
18    va_end(va);
19    return syscall(__NR_keyctl, cmd, arg2, arg3, arg4, arg5);
20}
21
22key_serial_t add_key(const char *type,
23                     const char *description,
24                     const void *payload,
25                     size_t plen,
26                     key_serial_t ringid)
27{
28    return syscall(__NR_add_key, type, description, payload, plen, ringid);
29}
30
31long keyctl_unlink(key_serial_t key, key_serial_t keyring)
32{
33    return keyctl(KEYCTL_UNLINK, key, keyring);
34}
35
36long keyctl_setperm(key_serial_t id, int permissions)
37{
38    return keyctl(KEYCTL_SETPERM, id, permissions);
39}
40
41long keyctl_search(key_serial_t ringid, const char *type,
42                   const char *description, key_serial_t destringid)
43{
44    return keyctl(KEYCTL_SEARCH, ringid, type, description, destringid);
45}
46