All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.