[patch 2/9] uml: workaround host bug in "TT mode vs. NPTL link fix"

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



A big bug has been diagnosed on hosts running the SKAS patch and built with
CONFIG_REGPARM, due to some missing prevent_tail_call().

On these hosts, this workaround is needed to avoid triggering that bug,
because "to" is kept by GCC only in EBX, which is corrupted at the return of
mmap2().

Since to trigger this bug int 0x80 must be used when doing the call, it rarely
manifests itself, so I'd prefer to get this merged to workaround that host
bug, since it should cause no functional change. Still, you might prefer to
drop it, I'll leave this to you.

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <[email protected]>
---

 linux-2.6.git-broken-paolo/arch/um/sys-i386/unmap.c   |    2 +-
 linux-2.6.git-broken-paolo/arch/um/sys-x86_64/unmap.c |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff -puN arch/um/sys-i386/unmap.c~uml-fix-link-tt-mode-against-nptl arch/um/sys-i386/unmap.c
--- linux-2.6.git-broken/arch/um/sys-i386/unmap.c~uml-fix-link-tt-mode-against-nptl	2005-07-13 19:37:10.000000000 +0200
+++ linux-2.6.git-broken-paolo/arch/um/sys-i386/unmap.c	2005-07-13 19:37:32.000000000 +0200
@@ -15,7 +15,7 @@ int switcheroo(int fd, int prot, void *f
 	if(munmap(to, size) < 0){
 		return(-1);
 	}
-	if(mmap2(to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) != to){
+	if(mmap2(to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) == (void*) -1 ){
 		return(-1);
 	}
 	if(munmap(from, size) < 0){
diff -puN arch/um/sys-x86_64/unmap.c~uml-fix-link-tt-mode-against-nptl arch/um/sys-x86_64/unmap.c
--- linux-2.6.git-broken/arch/um/sys-x86_64/unmap.c~uml-fix-link-tt-mode-against-nptl	2005-07-13 19:37:10.000000000 +0200
+++ linux-2.6.git-broken-paolo/arch/um/sys-x86_64/unmap.c	2005-07-13 19:37:32.000000000 +0200
@@ -15,7 +15,7 @@ int switcheroo(int fd, int prot, void *f
 	if(munmap(to, size) < 0){
 		return(-1);
 	}
-	if(mmap(to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) != to){
+	if(mmap(to, size, prot, MAP_SHARED | MAP_FIXED, fd, 0) == (void*) -1){
 		return(-1);
 	}
 	if(munmap(from, size) < 0){
_
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]
  Powered by Linux