s390 updates for 5.2-rc4

- fix stack unwinder: the stack unwinder rework has on off-by-one bug
    which prevents following stack backchains over more than one
    context (e.g. irq -> process).
 
  - fix address space detection in exception handler: if user space
    switches to access register mode, which is not supported anymore,
    the exception handler may resolve to the wrong address space.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJc+31MAAoJECIOw3kbKW7CTKcP/jda+jHCfNBfta23wGDhjjUK
 77swcIQ77QEi507/NEWxE/leDkoedyIA6lLI6w2hcjm2sGBPndCJeoAiQfHA7Y5s
 xX+zTDZBYbUyOCI3o+s0M5oCp3N1F3IyUXJqHIczN44IZOOYFsDkgxXam2rie7Xx
 INwIoq1DsQGUYk4kkLY1eLjjwaEPo2I77rqS2mF8KyTskCZ6nMtULY+Cui9zIb3v
 PLOKFRNY32OUIt+CjcAbb0bujjVETPuOs8cAK6ZOsZtM59o48iVphwxi1ZYGQlXd
 0WNsBWCRKfknfLytm0R9TEfKn+CcG/rMtpv5GnOFa1aA4avl60eHgzPaWxz4JIjQ
 Q/dkciM52D8MoY0od2QSZr4RXtdb+NYlvmjSSUJ0zjdbppmg5cCIc16FyDfuCn+y
 b3+hrA+IcPBHP2JNp/GncV5SWHlrleCDoJyBYO+x1u9zeVFcivZSrzrbr5dhoRB/
 cwy9/2hNquIS+/7CC0HajLnR5q8D5jG9lfKTY2ZaQGHEr98czgQCWsfqQm1rFU9S
 BCOPkioGdhD3IpJyjOi4y02/0pvNCV6xEpcsMuotrnwm77+Qum0F6jb5wIsZsqAz
 mUeBIxqsxhGo4V7CBGkzuweJU1Lv2Pev0E3HATdauyvbjjCQxx7ud9xUUx1sIHjJ
 Je7l0Dn8xSWmXxUEWVAh
 =8Ewa
 -----END PGP SIGNATURE-----

Merge tag 's390-5.2-4' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux

Pull s390 fixes from Heiko Carstens:

 - fix stack unwinder: the stack unwinder rework has on off-by-one bug
   which prevents following stack backchains over more than one context
   (e.g. irq -> process).

 - fix address space detection in exception handler: if user space
   switches to access register mode, which is not supported anymore, the
   exception handler may resolve to the wrong address space.

* tag 's390-5.2-4' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux:
  s390/unwind: correct stack switching during unwind
  s390/mm: fix address space detection in exception handling
This commit is contained in:
Linus Torvalds 2019-06-08 13:12:54 -07:00
commit 3d4645bf7a
2 changed files with 5 additions and 2 deletions

View File

@ -30,7 +30,7 @@ static inline bool on_stack(struct stack_info *info,
return false; return false;
if (addr + len < addr) if (addr + len < addr)
return false; return false;
return addr >= info->begin && addr + len < info->end; return addr >= info->begin && addr + len <= info->end;
} }
static inline unsigned long get_stack_pointer(struct task_struct *task, static inline unsigned long get_stack_pointer(struct task_struct *task,

View File

@ -83,7 +83,6 @@ static inline int notify_page_fault(struct pt_regs *regs)
/* /*
* Find out which address space caused the exception. * Find out which address space caused the exception.
* Access register mode is impossible, ignore space == 3.
*/ */
static enum fault_type get_fault_type(struct pt_regs *regs) static enum fault_type get_fault_type(struct pt_regs *regs)
{ {
@ -108,6 +107,10 @@ static enum fault_type get_fault_type(struct pt_regs *regs)
} }
return VDSO_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 */ /* home space exception -> access via kernel ASCE */
return KERNEL_FAULT; return KERNEL_FAULT;
} }