[PATCH 00/13] [v4] x86, pkeys: two protection keys bug fixes

From: Dave Hansen
Date: Wed May 09 2018 - 13:21:38 EST


Hi x86 maintainers,

This set has been seen quite a few changes and additions since the
last post. Details below.

Changes from v3:
* Reordered patches following Ingo's recommendations: Introduce
failing selftests first, then the kernel code to fix the test
failure.
* Increase verbosity and accuracy of do_not_expect_pk_fault()
messages.
* Removed abort() use from tests. Crashing is not nice.
* Remove some dead debugging code, fixing dprint_in_signal.
* Fix deadlocks from using printf() and friends in signal
handlers.

Changes from v2:
* Clarified commit message in patch 1/9 taking some feedback from
Shuah.

Changes from v1:
* Added Fixes: and cc'd stable. No code changes.

--

This fixes two bugs, and adds selftests to make sure they stay fixed:

1. pkey 0 was not usable via mprotect_pkey() because it had never
been explicitly allocated.
2. mprotect(PROT_EXEC) memory could sometimes be left with the
implicit exec-only protection key assigned.

I already posted #1 previously. I'm including them both here because
I don't think it's been picked up in case folks want to pull these
all in a single bundle.

Dave Hansen (13):
x86/pkeys/selftests: give better unexpected fault error messages
x86/pkeys/selftests: Stop using assert()
x86/pkeys/selftests: remove dead debugging code, fix dprint_in_signal
x86/pkeys/selftests: avoid printf-in-signal deadlocks
x86/pkeys/selftests: Allow faults on unknown keys
x86/pkeys/selftests: Factor out "instruction page"
x86/pkeys/selftests: Add PROT_EXEC test
x86/pkeys/selftests: Fix pkey exhaustion test off-by-one
x86/pkeys: Override pkey when moving away from PROT_EXEC
x86/pkeys/selftests: Fix pointer math
x86/pkeys/selftests: Save off 'prot' for allocations
x86/pkeys/selftests: Add a test for pkey 0
x86/pkeys: Do not special case protection key 0

arch/x86/include/asm/mmu_context.h | 2 +-
arch/x86/include/asm/pkeys.h | 18 +-
arch/x86/mm/pkeys.c | 21 +-
tools/testing/selftests/x86/pkey-helpers.h | 20 +-
tools/testing/selftests/x86/protection_keys.c | 187 +++++++++++++-----
5 files changed, 173 insertions(+), 75 deletions(-)

Cc: Ram Pai <linuxram@xxxxxxxxxx>
Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx>
Cc: Dave Hansen <dave.hansen@xxxxxxxxx>
Cc: Michael Ellermen <mpe@xxxxxxxxxxxxxx>
Cc: Ingo Molnar <mingo@xxxxxxxxxx>
Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>p
Cc: Shuah Khan <shuah@xxxxxxxxxx>
Cc: Shakeel Butt <shakeelb@xxxxxxxxxx>