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>
This commit is contained in:
Heiko Carstens 2025-11-03 16:25:32 +01:00
parent 02310adcc6
commit 76502abca2

View File

@ -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)) {