• Linus Torvalds's avatar
    Merge tag 'pull-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs · 1a8d05a7
    Linus Torvalds authored
    Pull VM_FAULT_RETRY fixes from Al Viro:
     "Some of the page fault handlers do not deal with the following case
      correctly:
    
       - handle_mm_fault() has returned VM_FAULT_RETRY
    
       - there is a pending fatal signal
    
       - fault had happened in kernel mode
    
      Correct action in such case is not "return unconditionally" - fatal
      signals are handled only upon return to userland and something like
      copy_to_user() would end up retrying the faulting instruction and
      triggering the same fault again and again.
    
      What we need to do in such case is to make the caller to treat that as
      failed uaccess attempt - handle exception if there is an exception
      handler for faulting instruction or oops if there isn't one.
    
      Over the years some architectures had been fixed and now are handling
      that case properly; some still do not. This series should fix the
      remaining ones.
    
      Status:
    
       - m68k, riscv, hexagon, parisc: tested/acked by maintainers.
    
       - alpha, sparc32, sparc64: tested locally - bug has been reproduced
         on the unpatched kernel and verified to be fixed by this series.
    
       - ia64, microblaze, nios2, openrisc: build, but otherwise completely
         untested"
    
    * tag 'pull-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
      openrisc: fix livelock in uaccess
      nios2: fix livelock in uaccess
      microblaze: fix livelock in uaccess
      ia64: fix livelock in uaccess
      sparc: fix livelock in uaccess
      alpha: fix livelock in uaccess
      parisc: fix livelock in uaccess
      hexagon: fix livelock in uaccess
      riscv: fix livelock in uaccess
      m68k: fix livelock in uaccess
    1a8d05a7
fault.c 8.37 KB