diff options
| author | Heiko Carstens <hca@linux.ibm.com> | 2025-11-03 16:25:32 +0100 |
|---|---|---|
| committer | Heiko Carstens <hca@linux.ibm.com> | 2025-11-14 11:34:27 +0100 |
| commit | 76502abca219fc8579353458a12744587b7a281f (patch) | |
| tree | e46016841ef4c830d013982c38ac6bb7be361e80 /arch/s390/mm/fault.c | |
| parent | 02310adcc621ca59d09263074de8fe44b30abbe8 (diff) | |
s390/mm: Change comment and die() message if teid.b61 is zero
The comments in do_protection() give the impression that a TEID, where bit
61 is zero, indicates a low address protection exception. This is not
necessarily true, and it depends on the type of Suppression-on-Protection
facility of the machine (see Princples of Operation) what this means.
Rework the comments and the die() message to reflect this. This may also
help to avoid confusion.
Reviewed-by: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
Diffstat (limited to 'arch/s390/mm/fault.c')
| -rw-r--r-- | arch/s390/mm/fault.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/arch/s390/mm/fault.c b/arch/s390/mm/fault.c index e1ad05bfd28a..639c4f610fdd 100644 --- a/arch/s390/mm/fault.c +++ b/arch/s390/mm/fault.c @@ -368,20 +368,15 @@ void do_protection_exception(struct pt_regs *regs) if (!(regs->int_code & 0x200)) regs->psw.addr = __rewind_psw(regs->psw, regs->int_code >> 16); /* - * Check for low-address protection. This needs to be treated - * as a special case because the translation exception code - * field is not guaranteed to contain valid data in this case. + * If bit 61 if the TEID is not set, the remainder of the + * TEID is unpredictable. Special handling is required. */ if (unlikely(!teid.b61)) { if (user_mode(regs)) { - /* Low-address protection in user mode: cannot happen */ dump_fault_info(regs); - die(regs, "Low-address protection"); + die(regs, "Unexpected TEID"); } - /* - * Low-address protection in kernel mode means - * NULL pointer write access in kernel mode. - */ + /* Assume low-address protection in kernel mode. */ return handle_fault_error_nolock(regs, 0); } if (unlikely(cpu_has_nx() && teid.b56)) { |