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:
commit
3d4645bf7a
|
@ -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,
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue