const char *capability_to_name(int id) {
if (id < 0)
return NULL;
- if ((size_t) id >= ELEMENTSOF(capability_names))
+ if (id >= capability_list_length())
return NULL;
return capability_names[id];
return sc->id;
}
-/* This is the number of capability names we are *compiled* with.
- * For the max capability number of the currently-running kernel,
- * use cap_last_cap(). */
+/* This is the number of capability names we are *compiled* with. For the max capability number of the
+ * currently-running kernel, use cap_last_cap(). Note that this one returns the size of the array, i.e. one
+ * value larger than the last known capability. This is different from cap_last_cap() which returns the
+ * highest supported capability. Hence with everyone agreeing on the same capabilities list, this function
+ * will return one higher than cap_last_cap(). */
int capability_list_length(void) {
- return (int) ELEMENTSOF(capability_names);
+ return (int) MIN(ELEMENTSOF(capability_names), 63U);
}
int capability_set_to_string(uint64_t set, char **ret) {