]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
missing_keyctl: import keyctl.h from kernel 6.14-rc4
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 28 Feb 2025 18:38:23 +0000 (03:38 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 3 Mar 2025 17:24:49 +0000 (02:24 +0900)
src/basic/linux/keyctl.h [new file with mode: 0644]
src/basic/missing_keyctl.h

diff --git a/src/basic/linux/keyctl.h b/src/basic/linux/keyctl.h
new file mode 100644 (file)
index 0000000..222c6c6
--- /dev/null
@@ -0,0 +1,136 @@
+/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
+/* keyctl.h: keyctl command IDs
+ *
+ * Copyright (C) 2004, 2008 Red Hat, Inc. All Rights Reserved.
+ * Written by David Howells (dhowells@redhat.com)
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#ifndef _LINUX_KEYCTL_H
+#define _LINUX_KEYCTL_H
+
+#include <linux/types.h>
+
+/* special process keyring shortcut IDs */
+#define KEY_SPEC_THREAD_KEYRING                -1      /* - key ID for thread-specific keyring */
+#define KEY_SPEC_PROCESS_KEYRING       -2      /* - key ID for process-specific keyring */
+#define KEY_SPEC_SESSION_KEYRING       -3      /* - key ID for session-specific keyring */
+#define KEY_SPEC_USER_KEYRING          -4      /* - key ID for UID-specific keyring */
+#define KEY_SPEC_USER_SESSION_KEYRING  -5      /* - key ID for UID-session keyring */
+#define KEY_SPEC_GROUP_KEYRING         -6      /* - key ID for GID-specific keyring */
+#define KEY_SPEC_REQKEY_AUTH_KEY       -7      /* - key ID for assumed request_key auth key */
+#define KEY_SPEC_REQUESTOR_KEYRING     -8      /* - key ID for request_key() dest keyring */
+
+/* request-key default keyrings */
+#define KEY_REQKEY_DEFL_NO_CHANGE              -1
+#define KEY_REQKEY_DEFL_DEFAULT                        0
+#define KEY_REQKEY_DEFL_THREAD_KEYRING         1
+#define KEY_REQKEY_DEFL_PROCESS_KEYRING                2
+#define KEY_REQKEY_DEFL_SESSION_KEYRING                3
+#define KEY_REQKEY_DEFL_USER_KEYRING           4
+#define KEY_REQKEY_DEFL_USER_SESSION_KEYRING   5
+#define KEY_REQKEY_DEFL_GROUP_KEYRING          6
+#define KEY_REQKEY_DEFL_REQUESTOR_KEYRING      7
+
+/* keyctl commands */
+#define KEYCTL_GET_KEYRING_ID          0       /* ask for a keyring's ID */
+#define KEYCTL_JOIN_SESSION_KEYRING    1       /* join or start named session keyring */
+#define KEYCTL_UPDATE                  2       /* update a key */
+#define KEYCTL_REVOKE                  3       /* revoke a key */
+#define KEYCTL_CHOWN                   4       /* set ownership of a key */
+#define KEYCTL_SETPERM                 5       /* set perms on a key */
+#define KEYCTL_DESCRIBE                        6       /* describe a key */
+#define KEYCTL_CLEAR                   7       /* clear contents of a keyring */
+#define KEYCTL_LINK                    8       /* link a key into a keyring */
+#define KEYCTL_UNLINK                  9       /* unlink a key from a keyring */
+#define KEYCTL_SEARCH                  10      /* search for a key in a keyring */
+#define KEYCTL_READ                    11      /* read a key or keyring's contents */
+#define KEYCTL_INSTANTIATE             12      /* instantiate a partially constructed key */
+#define KEYCTL_NEGATE                  13      /* negate a partially constructed key */
+#define KEYCTL_SET_REQKEY_KEYRING      14      /* set default request-key keyring */
+#define KEYCTL_SET_TIMEOUT             15      /* set key timeout */
+#define KEYCTL_ASSUME_AUTHORITY                16      /* assume request_key() authorisation */
+#define KEYCTL_GET_SECURITY            17      /* get key security label */
+#define KEYCTL_SESSION_TO_PARENT       18      /* apply session keyring to parent process */
+#define KEYCTL_REJECT                  19      /* reject a partially constructed key */
+#define KEYCTL_INSTANTIATE_IOV         20      /* instantiate a partially constructed key */
+#define KEYCTL_INVALIDATE              21      /* invalidate a key */
+#define KEYCTL_GET_PERSISTENT          22      /* get a user's persistent keyring */
+#define KEYCTL_DH_COMPUTE              23      /* Compute Diffie-Hellman values */
+#define KEYCTL_PKEY_QUERY              24      /* Query public key parameters */
+#define KEYCTL_PKEY_ENCRYPT            25      /* Encrypt a blob using a public key */
+#define KEYCTL_PKEY_DECRYPT            26      /* Decrypt a blob using a public key */
+#define KEYCTL_PKEY_SIGN               27      /* Create a public key signature */
+#define KEYCTL_PKEY_VERIFY             28      /* Verify a public key signature */
+#define KEYCTL_RESTRICT_KEYRING                29      /* Restrict keys allowed to link to a keyring */
+#define KEYCTL_MOVE                    30      /* Move keys between keyrings */
+#define KEYCTL_CAPABILITIES            31      /* Find capabilities of keyrings subsystem */
+#define KEYCTL_WATCH_KEY               32      /* Watch a key or ring of keys for changes */
+
+/* keyctl structures */
+struct keyctl_dh_params {
+       union {
+#ifndef __cplusplus
+               __s32 private;
+#endif
+               __s32 priv;
+       };
+       __s32 prime;
+       __s32 base;
+};
+
+struct keyctl_kdf_params {
+       char *hashname;
+       char *otherinfo;
+       __u32 otherinfolen;
+       __u32 __spare[8];
+};
+
+#define KEYCTL_SUPPORTS_ENCRYPT                0x01
+#define KEYCTL_SUPPORTS_DECRYPT                0x02
+#define KEYCTL_SUPPORTS_SIGN           0x04
+#define KEYCTL_SUPPORTS_VERIFY         0x08
+
+struct keyctl_pkey_query {
+       __u32           supported_ops;  /* Which ops are supported */
+       __u32           key_size;       /* Size of the key in bits */
+       __u16           max_data_size;  /* Maximum size of raw data to sign in bytes */
+       __u16           max_sig_size;   /* Maximum size of signature in bytes */
+       __u16           max_enc_size;   /* Maximum size of encrypted blob in bytes */
+       __u16           max_dec_size;   /* Maximum size of decrypted blob in bytes */
+       __u32           __spare[10];
+};
+
+struct keyctl_pkey_params {
+       __s32           key_id;         /* Serial no. of public key to use */
+       __u32           in_len;         /* Input data size */
+       union {
+               __u32           out_len;        /* Output buffer size (encrypt/decrypt/sign) */
+               __u32           in2_len;        /* 2nd input data size (verify) */
+       };
+       __u32           __spare[7];
+};
+
+#define KEYCTL_MOVE_EXCL       0x00000001 /* Do not displace from the to-keyring */
+
+/*
+ * Capabilities flags.  The capabilities list is an array of 8-bit integers;
+ * each integer can carry up to 8 flags.
+ */
+#define KEYCTL_CAPS0_CAPABILITIES      0x01 /* KEYCTL_CAPABILITIES supported */
+#define KEYCTL_CAPS0_PERSISTENT_KEYRINGS 0x02 /* Persistent keyrings enabled */
+#define KEYCTL_CAPS0_DIFFIE_HELLMAN    0x04 /* Diffie-Hellman computation enabled */
+#define KEYCTL_CAPS0_PUBLIC_KEY                0x08 /* Public key ops enabled */
+#define KEYCTL_CAPS0_BIG_KEY           0x10 /* big_key-type enabled */
+#define KEYCTL_CAPS0_INVALIDATE                0x20 /* KEYCTL_INVALIDATE supported */
+#define KEYCTL_CAPS0_RESTRICT_KEYRING  0x40 /* KEYCTL_RESTRICT_KEYRING supported */
+#define KEYCTL_CAPS0_MOVE              0x80 /* KEYCTL_MOVE supported */
+#define KEYCTL_CAPS1_NS_KEYRING_NAME   0x01 /* Keyring names are per-user_namespace */
+#define KEYCTL_CAPS1_NS_KEY_TAG                0x02 /* Key indexing can include a namespace tag */
+#define KEYCTL_CAPS1_NOTIFICATIONS     0x04 /* Keys generate watchable notifications */
+
+#endif /*  _LINUX_KEYCTL_H */
index 78795fa352b51af75cd205990e0b548f60bc3255..01063fd1935fc12e7a325c6df107387b8e9d1bc0 100644 (file)
@@ -6,60 +6,6 @@
 
 #include "macro.h"
 
-#ifndef KEYCTL_JOIN_SESSION_KEYRING
-#  define KEYCTL_JOIN_SESSION_KEYRING 1
-#else
-assert_cc(KEYCTL_JOIN_SESSION_KEYRING == 1);
-#endif
-
-#ifndef KEYCTL_CHOWN
-#  define KEYCTL_CHOWN 4
-#else
-assert_cc(KEYCTL_CHOWN == 4);
-#endif
-
-#ifndef KEYCTL_SETPERM
-#  define KEYCTL_SETPERM 5
-#else
-assert_cc(KEYCTL_SETPERM == 5);
-#endif
-
-#ifndef KEYCTL_DESCRIBE
-#  define KEYCTL_DESCRIBE 6
-#else
-assert_cc(KEYCTL_DESCRIBE == 6);
-#endif
-
-#ifndef KEYCTL_LINK
-#  define KEYCTL_LINK 8
-#else
-assert_cc(KEYCTL_LINK == 8);
-#endif
-
-#ifndef KEYCTL_READ
-#  define KEYCTL_READ 11
-#else
-assert_cc(KEYCTL_READ == 11);
-#endif
-
-#ifndef KEYCTL_SET_TIMEOUT
-#  define KEYCTL_SET_TIMEOUT 15
-#else
-assert_cc(KEYCTL_SET_TIMEOUT == 15);
-#endif
-
-#ifndef KEY_SPEC_USER_KEYRING
-#  define KEY_SPEC_USER_KEYRING -4
-#else
-assert_cc(KEY_SPEC_USER_KEYRING == -4);
-#endif
-
-#ifndef KEY_SPEC_SESSION_KEYRING
-#  define KEY_SPEC_SESSION_KEYRING -3
-#else
-assert_cc(KEY_SPEC_SESSION_KEYRING == -3);
-#endif
-
 /* From linux/key.h */
 #ifndef KEY_POS_VIEW