| From 962f0af83c239c0aef05639631e871c874b00f99 Mon Sep 17 00:00:00 2001 |
| From: Gerald Schaefer <gerald.schaefer@de.ibm.com> |
| Date: Mon, 27 May 2019 18:40:19 +0200 |
| Subject: s390/mm: fix address space detection in exception handling |
| |
| From: Gerald Schaefer <gerald.schaefer@de.ibm.com> |
| |
| commit 962f0af83c239c0aef05639631e871c874b00f99 upstream. |
| |
| Commit 0aaba41b58bc ("s390: remove all code using the access register |
| mode") removed access register mode from the kernel, and also from the |
| address space detection logic. However, user space could still switch |
| to access register mode (trans_exc_code == 1), and exceptions in that |
| mode would not be correctly assigned. |
| |
| Fix this by adding a check for trans_exc_code == 1 to get_fault_type(), |
| and remove the wrong comment line before that function. |
| |
| Fixes: 0aaba41b58bc ("s390: remove all code using the access register mode") |
| Reviewed-by: Janosch Frank <frankja@linux.ibm.com> |
| Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com> |
| Cc: <stable@vger.kernel.org> # v4.15+ |
| Signed-off-by: Gerald Schaefer <gerald.schaefer@de.ibm.com> |
| Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| arch/s390/mm/fault.c | 5 ++++- |
| 1 file changed, 4 insertions(+), 1 deletion(-) |
| |
| --- a/arch/s390/mm/fault.c |
| +++ b/arch/s390/mm/fault.c |
| @@ -83,7 +83,6 @@ static inline int notify_page_fault(stru |
| |
| /* |
| * Find out which address space caused the exception. |
| - * Access register mode is impossible, ignore space == 3. |
| */ |
| static inline enum fault_type get_fault_type(struct pt_regs *regs) |
| { |
| @@ -108,6 +107,10 @@ static inline enum fault_type get_fault_ |
| } |
| return VDSO_FAULT; |
| } |
| + if (trans_exc_code == 1) { |
| + /* access register mode, not used in the kernel */ |
| + return USER_FAULT; |
| + } |
| /* home space exception -> access via kernel ASCE */ |
| return KERNEL_FAULT; |
| } |