• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #include "key_control.h"
2 
3 #include <stdarg.h>
4 #include <unistd.h>
5 #include <sys/syscall.h>
6 #include <linux/keyctl.h>
7 
keyctl(int cmd,...)8 static 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 
add_key(const char * type,const char * description,const void * payload,size_t plen,key_serial_t ringid)22 key_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 
keyctl_revoke(key_serial_t id)31 long keyctl_revoke(key_serial_t id)
32 {
33     return keyctl(KEYCTL_REVOKE, id);
34 }
35 
keyctl_setperm(key_serial_t id,int permissions)36 long keyctl_setperm(key_serial_t id, int permissions)
37 {
38     return keyctl(KEYCTL_SETPERM, id, permissions);
39 }
40 
keyctl_search(key_serial_t ringid,const char * type,const char * description,key_serial_t destringid)41 long 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