1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Copyright (c) 2017 Cyril Hrubis <chrubis@suse.cz> 4 */ 5 6#ifndef LAPI_KEYCTL_H__ 7#define LAPI_KEYCTL_H__ 8 9#include "config.h" 10 11#if defined(HAVE_KEYUTILS_H) && defined(HAVE_LIBKEYUTILS) 12# include <keyutils.h> 13#else 14# ifdef HAVE_LINUX_KEYCTL_H 15# include <linux/keyctl.h> 16# endif /* HAVE_LINUX_KEYCTL_H */ 17 18# include <stdarg.h> 19# include <stdint.h> 20# include "lapi/syscalls.h" 21typedef int32_t key_serial_t; 22 23static inline key_serial_t add_key(const char *type, 24 const char *description, 25 const void *payload, 26 size_t plen, 27 key_serial_t ringid) 28{ 29 return tst_syscall(__NR_add_key, 30 type, description, payload, plen, ringid); 31} 32 33static inline key_serial_t request_key(const char *type, 34 const char *description, 35 const char *callout_info, 36 key_serial_t destringid) 37{ 38 return tst_syscall(__NR_request_key, 39 type, description, callout_info, destringid); 40} 41 42static inline long keyctl(int cmd, ...) 43{ 44 va_list va; 45 unsigned long arg2, arg3, arg4, arg5; 46 47 va_start(va, cmd); 48 arg2 = va_arg(va, unsigned long); 49 arg3 = va_arg(va, unsigned long); 50 arg4 = va_arg(va, unsigned long); 51 arg5 = va_arg(va, unsigned long); 52 va_end(va); 53 54 return tst_syscall(__NR_keyctl, cmd, arg2, arg3, arg4, arg5); 55} 56 57static inline key_serial_t keyctl_join_session_keyring(const char *name) { 58 return keyctl(KEYCTL_JOIN_SESSION_KEYRING, name); 59} 60 61#endif /* defined(HAVE_KEYUTILS_H) && defined(HAVE_LIBKEYUTILS) */ 62 63/* special process keyring shortcut IDs */ 64#ifndef KEY_SPEC_THREAD_KEYRING 65# define KEY_SPEC_THREAD_KEYRING -1 66#endif 67 68#ifndef KEY_SPEC_PROCESS_KEYRING 69# define KEY_SPEC_PROCESS_KEYRING -2 70#endif 71 72#ifndef KEY_SPEC_SESSION_KEYRING 73# define KEY_SPEC_SESSION_KEYRING -3 74#endif 75 76#ifndef KEY_SPEC_USER_KEYRING 77# define KEY_SPEC_USER_KEYRING -4 78#endif 79 80 81#ifndef KEY_SPEC_USER_SESSION_KEYRING 82# define KEY_SPEC_USER_SESSION_KEYRING -5 83#endif 84 85/* request-key default keyrings */ 86#ifndef KEY_REQKEY_DEFL_THREAD_KEYRING 87# define KEY_REQKEY_DEFL_THREAD_KEYRING 1 88#endif 89 90#ifndef KEY_REQKEY_DEFL_SESSION_KEYRING 91# define KEY_REQKEY_DEFL_SESSION_KEYRING 3 92#endif 93 94#ifndef KEY_REQKEY_DEFL_DEFAULT 95# define KEY_REQKEY_DEFL_DEFAULT 0 96#endif 97 98/* keyctl commands */ 99#ifndef KEYCTL_GET_KEYRING_ID 100# define KEYCTL_GET_KEYRING_ID 0 101#endif 102 103#ifndef KEYCTL_JOIN_SESSION_KEYRING 104# define KEYCTL_JOIN_SESSION_KEYRING 1 105#endif 106 107#ifndef KEYCTL_UPDATE 108# define KEYCTL_UPDATE 2 109#endif 110 111#ifndef KEYCTL_REVOKE 112# define KEYCTL_REVOKE 3 113#endif 114 115#ifndef KEYCTL_SETPERM 116# define KEYCTL_SETPERM 5 117#endif 118 119#ifndef KEYCTL_CLEAR 120# define KEYCTL_CLEAR 7 121#endif 122 123#ifndef KEYCTL_UNLINK 124# define KEYCTL_UNLINK 9 125#endif 126 127#ifndef KEYCTL_READ 128# define KEYCTL_READ 11 129#endif 130 131#ifndef KEYCTL_SET_REQKEY_KEYRING 132# define KEYCTL_SET_REQKEY_KEYRING 14 133#endif 134 135#ifndef KEYCTL_SET_TIMEOUT 136# define KEYCTL_SET_TIMEOUT 15 137#endif 138 139#ifndef KEYCTL_INVALIDATE 140# define KEYCTL_INVALIDATE 21 141#endif 142 143#ifndef KEYCTL_WATCH_KEY 144# define KEYCTL_WATCH_KEY 32 145#endif 146 147/* key permissions */ 148#ifndef KEY_POS_VIEW 149# define KEY_POS_VIEW 0x01000000 150# define KEY_POS_READ 0x02000000 151# define KEY_POS_WRITE 0x04000000 152# define KEY_POS_SEARCH 0x08000000 153# define KEY_POS_LINK 0x10000000 154# define KEY_POS_SETATTR 0x20000000 155# define KEY_POS_ALL 0x3f000000 156 157# define KEY_USR_VIEW 0x00010000 158# define KEY_USR_READ 0x00020000 159# define KEY_USR_WRITE 0x00040000 160# define KEY_USR_SEARCH 0x00080000 161# define KEY_USR_LINK 0x00100000 162# define KEY_USR_SETATTR 0x00200000 163# define KEY_USR_ALL 0x003f0000 164 165# define KEY_GRP_VIEW 0x00000100 166# define KEY_GRP_READ 0x00000200 167# define KEY_GRP_WRITE 0x00000400 168# define KEY_GRP_SEARCH 0x00000800 169# define KEY_GRP_LINK 0x00001000 170# define KEY_GRP_SETATTR 0x00002000 171# define KEY_GRP_ALL 0x00003f00 172 173# define KEY_OTH_VIEW 0x00000001 174# define KEY_OTH_READ 0x00000002 175# define KEY_OTH_WRITE 0x00000004 176# define KEY_OTH_SEARCH 0x00000008 177# define KEY_OTH_LINK 0x00000010 178# define KEY_OTH_SETATTR 0x00000020 179# define KEY_OTH_ALL 0x0000003f 180#endif /* !KEY_POS_VIEW */ 181 182#endif /* LAPI_KEYCTL_H__ */ 183