* [PATCH]: 4/4GB:
@ 2004-11-11 16:20 Kirill Korotaev
2004-11-12 20:22 ` Ingo Molnar
0 siblings, 1 reply; 2+ messages in thread
From: Kirill Korotaev @ 2004-11-11 16:20 UTC (permalink / raw)
To: linux-kernel, Ingo Molnar
[-- Attachment #1: Type: text/plain, Size: 496 bytes --]
This patch fixes exception handling in RESTORE_ALL macro on returing
to user space. Incorrect values in %ds/%es can lead to incorrect
behaivour and iret to kernel space address. This patch moves
exception handler from .fixup section to .entry.text and makes it
to be between int80_ret_start_marker/int80_ret_end_marker markers.
Signed-Off-By: Kirill Korotaev <dev@sw.ru>
Kirill
P.S. These 4GB split patches are against modified 2.6.8.1 kernel, but
should be appliable to last Fedora kernels
[-- Attachment #2: diff-arch-4gb-restore --]
[-- Type: text/plain, Size: 1032 bytes --]
--- ./arch/i386/kernel/entry.S.4gbrest 2004-11-10 11:21:32.000000000 +0300
+++ ./arch/i386/kernel/entry.S 2004-11-10 12:35:24.239613040 +0300
@@ -167,7 +167,7 @@ int80_ret_start_marker: \
movl %edx, %esp; \
movl %ecx, %cr3; \
\
- __RESTORE_ALL; \
+ __RESTORE_ALL_USER; \
int80_ret_end_marker: \
2:
@@ -204,14 +204,19 @@ int80_ret_end_marker: \
#define __RESTORE_REGS \
__RESTORE_INT_REGS; \
+ popl %ds; \
+ popl %es;
+
+#define __RESTORE_REGS_USER \
+ __RESTORE_INT_REGS; \
111: popl %ds; \
222: popl %es; \
-.section .fixup,"ax"; \
+ jmp 666f; \
444: movl $0,(%esp); \
jmp 111b; \
555: movl $0,(%esp); \
jmp 222b; \
-.previous; \
+666: \
.section __ex_table,"a";\
.align 4; \
.long 111b,444b;\
@@ -220,6 +225,13 @@ int80_ret_end_marker: \
#define __RESTORE_ALL \
__RESTORE_REGS \
+ __RESTORE_IRET
+
+#define __RESTORE_ALL_USER \
+ __RESTORE_REGS_USER \
+ __RESTORE_IRET
+
+#define __RESTORE_IRET \
addl $4, %esp; \
333: iret; \
.section .fixup,"ax"; \
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH]: 4/4GB:
2004-11-11 16:20 [PATCH]: 4/4GB: Kirill Korotaev
@ 2004-11-12 20:22 ` Ingo Molnar
0 siblings, 0 replies; 2+ messages in thread
From: Ingo Molnar @ 2004-11-12 20:22 UTC (permalink / raw)
To: Kirill Korotaev; +Cc: linux-kernel
* Kirill Korotaev <dev@sw.ru> wrote:
> #define __RESTORE_REGS \
> __RESTORE_INT_REGS; \
> + popl %ds; \
> + popl %es;
> +
> +#define __RESTORE_REGS_USER \
> + __RESTORE_INT_REGS; \
> 111: popl %ds; \
> 222: popl %es; \
> -.section .fixup,"ax"; \
> + jmp 666f; \
> 444: movl $0,(%esp); \
> jmp 111b; \
> 555: movl $0,(%esp); \
> jmp 222b; \
> -.previous; \
> +666: \
> .section __ex_table,"a";\
> .align 4; \
> .long 111b,444b;\
> @@ -220,6 +225,13 @@ int80_ret_end_marker: \
>
> #define __RESTORE_ALL \
> __RESTORE_REGS \
> + __RESTORE_IRET
> +
> +#define __RESTORE_ALL_USER \
> + __RESTORE_REGS_USER \
> + __RESTORE_IRET
> +
> +#define __RESTORE_IRET \
> addl $4, %esp; \
> 333: iret; \
> .section .fixup,"ax"; \
looks fine and necessary. Fundamental bugs in this area tend to show up
as instant reboots, so i'm sure if you broke this code you'll quickly
notice it ...
Ingo
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2004-11-12 19:23 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-11-11 16:20 [PATCH]: 4/4GB: Kirill Korotaev
2004-11-12 20:22 ` Ingo Molnar
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.