• Mateusz Guzik's avatar
    prctl: take mmap sem for writing to protect against others · 92d4a198
    Mateusz Guzik authored
    [ Upstream commit ddf1d398 ]
    
    An unprivileged user can trigger an oops on a kernel with
    CONFIG_CHECKPOINT_RESTORE.
    
    proc_pid_cmdline_read takes mmap_sem for reading and obtains args + env
    start/end values. These get sanity checked as follows:
            BUG_ON(arg_start > arg_end);
            BUG_ON(env_start > env_end);
    
    These can be changed by prctl_set_mm. Turns out also takes the semaphore for
    reading, effectively rendering it useless. This results in:
    
      kernel BUG at fs/proc/base.c:240!
      invalid opcode: 0000 [#1] SMP
      Modules linked in: virtio_net
      CPU: 0 PID: 925 Comm: a.out Not tainted 4.4.0-rc8-next-20160105dupa+ #71
      Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
      task: ffff880077a68000 ti: ffff8800784d0000 task.ti: ffff8800784d0000
      RIP: proc_pid_cmdline_read+0x520/0x530
      RSP: 0018:ffff8800784d3db8  EFLAGS: 00010206
      RAX: ffff880077c5b6b0 RBX: ffff8800784d3f18 RCX: 0000000000000000
      RDX: 00000000000...
    92d4a198
sys.c 56.7 KB