• Christoph Hellwig's avatar
    riscv: disable SUM in the exception handler · fe9b842f
    Christoph Hellwig authored
    The SUM bit is enabled at the beginning of the copy_{to,from}_user and
    {get,put}_user routines, and cleared before they return.  But these user
    copy helper can be interrupted by exceptions, in which case the SUM bit
    will remain set, which leads to elevated privileges for the code running
    in exception context, as that can now access userspace address space
    unconditionally.  This frequently happens when the user copy routines
    access freshly allocated user memory that hasn't been faulted in, and a
    pagefault needs to be taken before the user copy routines can continue.
    
    Fix this by unconditionally clearing SUM when the exception handler is
    called - the restore code will automatically restore it based on the
    saved value.
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    Signed-off-by: default avatarPalmer Dabbelt <palmer@sifive.com>
    fe9b842f
entry.S 11.5 KB