|
@@ -1,45 +0,0 @@
|
|
|
-m68knommu: fix user a5 register being overwritten
|
|
|
-
|
|
|
-On no-MMU systems the application a5 register can be overwitten with the
|
|
|
-address of the process data segment when processing application signals.
|
|
|
-For flat format applications compiled with full absolute relocation this
|
|
|
-effectively corrupts the a5 register on signal processing - and this very
|
|
|
-quickly leads to process crash and often takes out the whole system with
|
|
|
-a panic as well.
|
|
|
-
|
|
|
-This has no effect on flat format applications compiled with the more
|
|
|
-common PIC methods (such as -msep-data). These format applications reserve
|
|
|
-a5 for the pointer to the data segment anyway - so it doesn't change it.
|
|
|
-
|
|
|
-A long time ago the a5 register was used in the code packed into the user
|
|
|
-stack to enable signal return processing. And so it had to be restored on
|
|
|
-end of signal cleanup processing back to the original a5 user value. This
|
|
|
-was historically done by saving away a5 in the sigcontext structure. At
|
|
|
-some point (a long time back it seems) the a5 restore process was changed
|
|
|
-and it was hard coded to put the user data segment address directly into a5.
|
|
|
-Which is ok for the common PIC compiled application case, but breaks the
|
|
|
-full relocation application code.
|
|
|
-
|
|
|
-We no longer use this type of signal handling mechanism and so we don't
|
|
|
-need to do anything special to save and restore a5 at all now. So remove the
|
|
|
-code that hard codes a5 to the address of the user data segment.
|
|
|
-
|
|
|
-Signed-off-by: Greg Ungerer <gerg@linux-m68k.org>
|
|
|
----
|
|
|
- arch/m68k/kernel/signal.c | 1 -
|
|
|
- 1 file changed, 1 deletion(-)
|
|
|
-
|
|
|
-diff --git a/arch/m68k/kernel/signal.c b/arch/m68k/kernel/signal.c
|
|
|
-index 2dcee3a..9202f82 100644
|
|
|
---- a/arch/m68k/kernel/signal.c
|
|
|
-+++ b/arch/m68k/kernel/signal.c
|
|
|
-@@ -213,7 +213,6 @@ static inline int frame_extra_sizes(int f)
|
|
|
-
|
|
|
- static inline void adjustformat(struct pt_regs *regs)
|
|
|
- {
|
|
|
-- ((struct switch_stack *)regs - 1)->a5 = current->mm->start_data;
|
|
|
- /*
|
|
|
- * set format byte to make stack appear modulo 4, which it will
|
|
|
- * be when doing the rte
|
|
|
---
|
|
|
-1.9.1
|