• Siddha, Suresh B's avatar
    x86, vsyscall: fix the oops crash with __pa_vsymbol() · 957ff882
    Siddha, Suresh B authored
    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: default avatarYanmin Zhang <yanmin.zhang@intel.com>
    Signed-off-by: default avatarSuresh Siddha <suresh.b.siddha@intel.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    957ff882
vsyscall_64.c 9.35 KB