]> err.no Git - linux-2.6/commitdiff
[PATCH] uml: workaround host bug in "TT mode vs. NPTL link fix"
authorPaolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Thu, 14 Jul 2005 07:33:36 +0000 (00:33 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Thu, 14 Jul 2005 16:00:24 +0000 (09:00 -0700)
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 <blaisorblade@yahoo.it>
Cc: Jeff Dike <jdike@addtoit.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/um/sys-i386/unmap.c
arch/um/sys-x86_64/unmap.c

index 136875263d27838c1bfe3f4c943f0ec1041007d8..1b0ad0e4adcd26d29f0b605266dfea0cfb1f19d2 100644 (file)
@@ -15,7 +15,7 @@ int switcheroo(int fd, int prot, void *from, void *to, int size)
        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){
index bc7094cce47e2b2ab4de352afe62c333c3ebe1e8..f4a4bffd8a18bc5fb4f6aadce49fb466453d11bd 100644 (file)
@@ -15,7 +15,7 @@ int switcheroo(int fd, int prot, void *from, void *to, int size)
        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){