public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Eric Dumazet <dada1@cosmosbay.com>
To: Petr Vandrovec <vandrove@vc.cvut.cz>
Cc: Andi Kleen <ak@suse.de>,
	linux-kernel@vger.kernel.org, Andrew Morton <akpm@osdl.org>
Subject: Re: Something very strange on x86_64 2.6.X kernels
Date: Fri, 21 Jan 2005 17:49:25 +0100	[thread overview]
Message-ID: <41F13295.40702@cosmosbay.com> (raw)
In-Reply-To: <20050121162601.GA8469@vana.vc.cvut.cz>

Petr Vandrovec wrote:

> 
> Maybe I already missed answer, but try patch below.  It is definitely bad
> to mark syscall page as global one...
>

Hi Petr

If I follow you, any 64 bits program is corrupted as soon one 32bits 
program using sysenter starts ?

Thank you for the patch, I will try it as soon as possible.
I tried your tpg program and had the same behavior you describe.

I confirm that avoiding the 0xFFFFE000 - 0x100000000 VM ranges is also 
OK , the program never crash...

Eric
> When you build program below, once as 64bit and once as 32bit, 32bit one
> should print 464C457F and 64bit one should die with SIGSEGV.  But when
> you run both in parallel, 64bit one sometime gets SIGSEGV as it should,
> sometime it gets 464C457F. (actually results below are from SMP system;
> I believe that on UP you'll get reproducible 464C457F on UP system...)
> 
> vana:~/64bit-test# ./tpg32
> Memory at ffffe000 is 464C457F
> vana:~/64bit-test# ./tpg
> Segmentation fault
> vana:~/64bit-test# ./tpg32 & ./tpg
> [1] 8450
> Memory at ffffe000 is 464C457F
> Memory at ffffe000 is 464C457F
> [1]+  Exit 31                 ./tpg32
> vana:~/64bit-test# ./tpg32 & ./tpg
> [1] 8454
> Memory at ffffe000 is 464C457F
> [1]+  Exit 31                 ./tpg32
> Segmentation fault
> vana:~/64bit-test# ./tpg32 & ./tpg
> [1] 8456
> Memory at ffffe000 is 464C457F
> Memory at ffffe000 is 464C457F
> [1]+  Exit 31                 ./tpg32
> vana:~/64bit-test# ./tpg32 & ./tpg
> [1] 8458
> Memory at ffffe000 is 464C457F
> Memory at ffffe000 is 464C457F
> [1]+  Exit 31                 ./tpg32
> vana:~/64bit-test#
> 
> 
> void main(void) {
> 	int acc;
> 	int i;
> 
> 	for (i = 0; i < 100000000; i++) ;
> 	acc = *(volatile unsigned long*)(0xffffe000);
> 	printf("Memory at ffffe000 is %08X\n", acc);
> }
> 
> 								Petr
> 
> 
> diff -urdN linux/arch/x86_64/ia32/syscall32.c linux/arch/x86_64/ia32/syscall32.c
> --- linux/arch/x86_64/ia32/syscall32.c	2005-01-17 12:29:05.000000000 +0000
> +++ linux/arch/x86_64/ia32/syscall32.c	2005-01-21 16:15:04.000000000 +0000
> @@ -55,7 +55,7 @@
>   			if (pte_none(*pte)) {
>   				set_pte(pte,
>   					mk_pte(virt_to_page(syscall32_page),
> - 					       PAGE_KERNEL_VSYSCALL));
> + 					       PAGE_KERNEL_VSYSCALL32));
>   			}
>   			/* Flush only the local CPU. Other CPUs taking a fault
>   			   will just end up here again
> diff -urdN linux/include/asm-x86_64/pgtable.h linux/include/asm-x86_64/pgtable.h
> --- linux/include/asm-x86_64/pgtable.h	2005-01-17 12:29:11.000000000 +0000
> +++ linux/include/asm-x86_64/pgtable.h	2005-01-21 16:14:44.000000000 +0000
> @@ -182,6 +182,7 @@
>  #define PAGE_KERNEL_EXEC MAKE_GLOBAL(__PAGE_KERNEL_EXEC)
>  #define PAGE_KERNEL_RO MAKE_GLOBAL(__PAGE_KERNEL_RO)
>  #define PAGE_KERNEL_NOCACHE MAKE_GLOBAL(__PAGE_KERNEL_NOCACHE)
> +#define PAGE_KERNEL_VSYSCALL32 __pgprot(__PAGE_KERNEL_VSYSCALL)
>  #define PAGE_KERNEL_VSYSCALL MAKE_GLOBAL(__PAGE_KERNEL_VSYSCALL)
>  #define PAGE_KERNEL_LARGE MAKE_GLOBAL(__PAGE_KERNEL_LARGE)
>  #define PAGE_KERNEL_VSYSCALL_NOCACHE MAKE_GLOBAL(__PAGE_KERNEL_VSYSCALL_NOCACHE)
> 
> 


  reply	other threads:[~2005-01-21 16:51 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-01-19 23:13 COMMAND_LINE_SIZE increasing in 2.6.11-rc1-bk6 Janos Farkas
2005-01-20  4:21 ` Chris Bruner
2005-01-20 16:28 ` Adrian Bunk
2005-01-20 16:40   ` Linus Torvalds
2005-01-20 16:48   ` Andi Kleen
2005-01-20 20:53     ` Something very strange on x86_64 2.6.X kernels Eric Dumazet
2005-01-20 21:08       ` Andrew Morton
2005-01-20 21:19         ` Eric Dumazet
2005-01-21 16:26       ` Petr Vandrovec
2005-01-21 16:49         ` Eric Dumazet [this message]
2005-01-21 18:30           ` Petr Vandrovec
2005-01-22  1:54         ` Andi Kleen
2005-01-22  2:14           ` Linus Torvalds
2005-01-21  6:58     ` COMMAND_LINE_SIZE increasing in 2.6.11-rc1-bk6 Catalin(ux aka Dino) BOIE
2005-01-21  7:11       ` Andi Kleen
2005-01-21 17:46         ` Matt Domsch
2005-01-21 19:05           ` H. Peter Anvin
2005-02-07  6:57         ` Werner Almesberger
2005-02-12 13:54           ` Eric W. Biederman
2005-02-12 14:51             ` Werner Almesberger
2005-02-12 15:17               ` Eric W. Biederman
2005-02-14  5:49                 ` Werner Almesberger
2005-02-14  7:36                   ` Eric W. Biederman
2005-02-14  6:15       ` Adam Sulmicki

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=41F13295.40702@cosmosbay.com \
    --to=dada1@cosmosbay.com \
    --cc=ak@suse.de \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=vandrove@vc.cvut.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox