|
@@ -921,13 +921,21 @@ void *malloc_pkey(long size, int prot, u16 pkey)
|
|
|
}
|
|
|
|
|
|
int last_pkru_faults;
|
|
|
+#define UNKNOWN_PKEY -2
|
|
|
void expected_pk_fault(int pkey)
|
|
|
{
|
|
|
dprintf2("%s(): last_pkru_faults: %d pkru_faults: %d\n",
|
|
|
__func__, last_pkru_faults, pkru_faults);
|
|
|
dprintf2("%s(%d): last_si_pkey: %d\n", __func__, pkey, last_si_pkey);
|
|
|
pkey_assert(last_pkru_faults + 1 == pkru_faults);
|
|
|
- pkey_assert(last_si_pkey == pkey);
|
|
|
+
|
|
|
+ /*
|
|
|
+ * For exec-only memory, we do not know the pkey in
|
|
|
+ * advance, so skip this check.
|
|
|
+ */
|
|
|
+ if (pkey != UNKNOWN_PKEY)
|
|
|
+ pkey_assert(last_si_pkey == pkey);
|
|
|
+
|
|
|
/*
|
|
|
* The signal handler shold have cleared out PKRU to let the
|
|
|
* test program continue. We now have to restore it.
|