int sys_pkey_alloc(unsignedlong flags, unsignedlong init_val); int sys_pkey_free(unsignedlong pkey); int sys_mprotect_pkey(void *ptr, size_t size, unsignedlong orig_prot, unsignedlong pkey);
/* For functions called from protection_keys.c only */
noinline int read_ptr(int *ptr); void expected_pkey_fault(int pkey); int mprotect_pkey(void *ptr, size_t size, unsignedlong orig_prot, unsignedlong pkey); void record_pkey_malloc(void *ptr, long size, int prot);
#ifndef set_pkey_bits staticinline u64 set_pkey_bits(u64 reg, int pkey, u64 flags)
{
u32 shift = pkey_bit_position(pkey); /* mask out bits from pkey in old value */
reg &= ~((u64)PKEY_MASK << shift); /* OR in new bits for pkey */
reg |= (flags & PKEY_MASK) << shift; return reg;
} #endif
staticinlineint kernel_has_pkeys(void)
{ /* try allocating a key and see if it succeeds */ int ret = sys_pkey_alloc(0, PKEY_UNRESTRICTED); if (ret <= 0) { return0;
}
sys_pkey_free(ret); return1;
}
staticinlineint is_pkeys_supported(void)
{ /* check if the cpu supports pkeys */ if (!cpu_has_pkeys()) {
dprintf1("SKIP: %s: no CPU support\n", __func__); return0;
}
/* check if the kernel supports pkeys */ if (!kernel_has_pkeys()) {
dprintf1("SKIP: %s: no kernel support\n", __func__); return0;
}
return1;
}
#endif/* _PKEYS_HELPER_H */
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-10-12)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.