diff options
| author | Kyle Evans <kevans@FreeBSD.org> | 2026-06-20 13:55:26 +0000 |
|---|---|---|
| committer | Kyle Evans <kevans@FreeBSD.org> | 2026-06-20 13:56:04 +0000 |
| commit | 57fefbee1f959d0c65376dbdad309d01c182d710 (patch) | |
| tree | c9896874564c7988851fe62cf061c3a629c7f325 | |
| parent | c27779e0a9546e8b2bfde74b5c9cbf08bbed000e (diff) | |
rights(4): fix our representation of the unused bits
The current format seems to be a little confusing, and the version of it
for index 0 was broken by the below-referenced commit. Break our
UNUSED macros out into one per unused bit to enumerate the entirety of
the space and make it easier to claim an unused one.
Fixes: b165e9e3ea4e327fc ("Add fchroot(2)")
Reviewed by: oshogbo (previous version), kib, markj
Differential Revision: https://reviews.freebsd.org/D57505
| -rw-r--r-- | sys/sys/capsicum.h | 64 |
1 files changed, 56 insertions, 8 deletions
diff --git a/sys/sys/capsicum.h b/sys/sys/capsicum.h index 3847c4c73e75..9ef2f0d48d38 100644 --- a/sys/sys/capsicum.h +++ b/sys/sys/capsicum.h @@ -52,6 +52,13 @@ #define CAPRIGHT(idx, bit) ((1ULL << (57 + (idx))) | (bit)) /* + * The top 7 bits are reserved in all indices. + * Index 0 - 2 bit array size + 5 bit array element + * Index N - 2 bits of 0 + 5 bit array element + */ +#define CAP_RESERVED 0xFE00000000000000ULL + +/* * Possible rights on capabilities. * * Notes: @@ -212,12 +219,23 @@ CAP_GETSOCKOPT | CAP_LISTEN | CAP_PEELOFF | CAP_RECV | CAP_SEND | \ CAP_SETSOCKOPT | CAP_SHUTDOWN) +#define CAP_UNUSED0_45 CAPRIGHT(0, 0x0000100000000000ULL) +#define CAP_UNUSED0_46 CAPRIGHT(0, 0x0000200000000000ULL) +#define CAP_UNUSED0_47 CAPRIGHT(0, 0x0000400000000000ULL) +#define CAP_UNUSED0_48 CAPRIGHT(0, 0x0000800000000000ULL) +#define CAP_UNUSED0_49 CAPRIGHT(0, 0x0001000000000000ULL) +#define CAP_UNUSED0_50 CAPRIGHT(0, 0x0002000000000000ULL) +#define CAP_UNUSED0_51 CAPRIGHT(0, 0x0004000000000000ULL) +#define CAP_UNUSED0_52 CAPRIGHT(0, 0x0008000000000000ULL) +#define CAP_UNUSED0_53 CAPRIGHT(0, 0x0010000000000000ULL) +#define CAP_UNUSED0_54 CAPRIGHT(0, 0x0020000000000000ULL) +#define CAP_UNUSED0_55 CAPRIGHT(0, 0x0040000000000000ULL) +#define CAP_UNUSED0_56 CAPRIGHT(0, 0x0080000000000000ULL) +#define CAP_UNUSED0_57 CAPRIGHT(0, 0x0100000000000000ULL) + /* All used bits for index 0. */ #define CAP_ALL0 CAPRIGHT(0, 0x00000FFFFFFFFFFFULL) -/* Available bits for index 0. */ -#define CAP_UNUSED0_57 CAPRIGHT(0, 0x0100000000000000ULL) - /* INDEX 1 */ /* Mandatory Access Control. */ @@ -283,14 +301,44 @@ #define CAP_INOTIFY_ADD CAPRIGHT(1, 0x0000000000200000ULL) #define CAP_INOTIFY_RM CAPRIGHT(1, 0x0000000000400000ULL) +#define CAP_UNUSED1_24 CAPRIGHT(1, 0x0000000000800000ULL) +#define CAP_UNUSED1_25 CAPRIGHT(1, 0x0000000001000000ULL) +#define CAP_UNUSED1_26 CAPRIGHT(1, 0x0000000002000000ULL) +#define CAP_UNUSED1_27 CAPRIGHT(1, 0x0000000004000000ULL) +#define CAP_UNUSED1_28 CAPRIGHT(1, 0x0000000008000000ULL) +#define CAP_UNUSED1_29 CAPRIGHT(1, 0x0000000010000000ULL) +#define CAP_UNUSED1_30 CAPRIGHT(1, 0x0000000020000000ULL) +#define CAP_UNUSED1_31 CAPRIGHT(1, 0x0000000040000000ULL) +#define CAP_UNUSED1_32 CAPRIGHT(1, 0x0000000080000000ULL) +#define CAP_UNUSED1_33 CAPRIGHT(1, 0x0000000100000000ULL) +#define CAP_UNUSED1_34 CAPRIGHT(1, 0x0000000200000000ULL) +#define CAP_UNUSED1_35 CAPRIGHT(1, 0x0000000400000000ULL) +#define CAP_UNUSED1_36 CAPRIGHT(1, 0x0000000800000000ULL) +#define CAP_UNUSED1_37 CAPRIGHT(1, 0x0000001000000000ULL) +#define CAP_UNUSED1_38 CAPRIGHT(1, 0x0000002000000000ULL) +#define CAP_UNUSED1_39 CAPRIGHT(1, 0x0000004000000000ULL) +#define CAP_UNUSED1_40 CAPRIGHT(1, 0x0000008000000000ULL) +#define CAP_UNUSED1_41 CAPRIGHT(1, 0x0000010000000000ULL) +#define CAP_UNUSED1_42 CAPRIGHT(1, 0x0000020000000000ULL) +#define CAP_UNUSED1_43 CAPRIGHT(1, 0x0000040000000000ULL) +#define CAP_UNUSED1_44 CAPRIGHT(1, 0x0000080000000000ULL) +#define CAP_UNUSED1_45 CAPRIGHT(1, 0x0000100000000000ULL) +#define CAP_UNUSED1_46 CAPRIGHT(1, 0x0000200000000000ULL) +#define CAP_UNUSED1_47 CAPRIGHT(1, 0x0000400000000000ULL) +#define CAP_UNUSED1_48 CAPRIGHT(1, 0x0000800000000000ULL) +#define CAP_UNUSED1_49 CAPRIGHT(1, 0x0001000000000000ULL) +#define CAP_UNUSED1_50 CAPRIGHT(1, 0x0002000000000000ULL) +#define CAP_UNUSED1_51 CAPRIGHT(1, 0x0004000000000000ULL) +#define CAP_UNUSED1_52 CAPRIGHT(1, 0x0008000000000000ULL) +#define CAP_UNUSED1_53 CAPRIGHT(1, 0x0010000000000000ULL) +#define CAP_UNUSED1_54 CAPRIGHT(1, 0x0020000000000000ULL) +#define CAP_UNUSED1_55 CAPRIGHT(1, 0x0040000000000000ULL) +#define CAP_UNUSED1_56 CAPRIGHT(1, 0x0080000000000000ULL) +#define CAP_UNUSED1_57 CAPRIGHT(1, 0x0100000000000000ULL) + /* All used bits for index 1. */ #define CAP_ALL1 CAPRIGHT(1, 0x00000000007FFFFFULL) -/* Available bits for index 1. */ -#define CAP_UNUSED1_22 CAPRIGHT(1, 0x0000000000800000ULL) -/* ... */ -#define CAP_UNUSED1_57 CAPRIGHT(1, 0x0100000000000000ULL) - /* Backward compatibility. */ #define CAP_POLL_EVENT CAP_EVENT |
