Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=957ff882f9db86e017f730e77322ec5193178e5e
Commit:     957ff882f9db86e017f730e77322ec5193178e5e
Parent:     f322727b92957ccd4b0366dbd42908613222033a
Author:     Siddha, Suresh B <[EMAIL PROTECTED]>
AuthorDate: Fri Oct 19 20:35:02 2007 +0200
Committer:  Thomas Gleixner <[EMAIL PROTECTED]>
CommitDate: Fri Oct 19 20:35:02 2007 +0200

    x86, vsyscall: fix the oops crash with __pa_vsymbol()
    
    Appended patch fixes an oops while changing the vsyscall sysctl.
    I am sure no one tested this code before integrating into mainline :(
    
    BTW, using ioremap() in vsyscall_sysctl_change() to get the virtual
    address of a kernel symbol sounds like an over kill.. I wonder if we
    can define a simple __va_vsymbol() which will return directly the
    kernel direct mapping. comments in the code which says gcc has trouble
    with __va(__pa()) sounds bogus to me. __pa() on a vsyscall address will
    not work anyhow :(
    
    And also, the whole nop out syscall in vsyscall page infrastructure
    (vsyscall_sysctl_change()) is added to make some attacks difficult,
    and yet I don't see this nop out being done by default. This area
    requires more cleanups?
    
    Fix an oops with __pa_vsymbol(). VSYSCALL_FIRST_PAGE is a fixmap index.
    We want the starting virtual address of the vsyscall page and not the index.
    
    [ mingo: arch/x86 adaptation ]
    
    Reported-by: Yanmin Zhang <[EMAIL PROTECTED]>
    Signed-off-by: Suresh Siddha <[EMAIL PROTECTED]>
    Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]>
    Signed-off-by: Thomas Gleixner <[EMAIL PROTECTED]>
---
 arch/x86/kernel/vsyscall_64.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kernel/vsyscall_64.c b/arch/x86/kernel/vsyscall_64.c
index 585541c..4a2c340 100644
--- a/arch/x86/kernel/vsyscall_64.c
+++ b/arch/x86/kernel/vsyscall_64.c
@@ -48,7 +48,7 @@
        ({unsigned long v;              \
        extern char __vsyscall_0;       \
          asm("" : "=r" (v) : "0" (x)); \
-         ((v - VSYSCALL_FIRST_PAGE) + __pa_symbol(&__vsyscall_0)); })
+         ((v - VSYSCALL_START) + __pa_symbol(&__vsyscall_0)); })
 
 /*
  * vsyscall_gtod_data contains data that is :
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to