Skip to content
Snippets Groups Projects
  1. Dec 21, 2021
    • Andra Paraschiv's avatar
      nitro_enclaves: Use get_user_pages_unlocked() call to handle mmap assert · 3a0152b2
      Andra Paraschiv authored
      
      After commit 5b78ed24 ("mm/pagemap: add mmap_assert_locked()
      annotations to find_vma*()"), the call to get_user_pages() will trigger
      the mmap assert.
      
      static inline void mmap_assert_locked(struct mm_struct *mm)
      {
      	lockdep_assert_held(&mm->mmap_lock);
      	VM_BUG_ON_MM(!rwsem_is_locked(&mm->mmap_lock), mm);
      }
      
      [   62.521410] kernel BUG at include/linux/mmap_lock.h:156!
      ...........................................................
      [   62.538938] RIP: 0010:find_vma+0x32/0x80
      ...........................................................
      [   62.605889] Call Trace:
      [   62.608502]  <TASK>
      [   62.610956]  ? lock_timer_base+0x61/0x80
      [   62.614106]  find_extend_vma+0x19/0x80
      [   62.617195]  __get_user_pages+0x9b/0x6a0
      [   62.620356]  __gup_longterm_locked+0x42d/0x450
      [   62.623721]  ? finish_wait+0x41/0x80
      [   62.626748]  ? __kmalloc+0x178/0x2f0
      [   62.629768]  ne_set_user_memory_region_ioctl.isra.0+0x225/0x6a0 [nitro_enclaves]
      [   62.635776]  ne_enclave_ioctl+0x1cf/0x6d7 [nitro_enclaves]
      [   62.639541]  __x64_sys_ioctl+0x82/0xb0
      [   62.642620]  do_syscall_64+0x3b/0x90
      [   62.645642]  entry_SYSCALL_64_after_hwframe+0x44/0xae
      
      Use get_user_pages_unlocked() when setting the enclave memory regions.
      That's a similar pattern as mmap_read_lock() used together with
      get_user_pages().
      
      Fixes: 5b78ed24 ("mm/pagemap: add mmap_assert_locked() annotations to find_vma*()")
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarAndra Paraschiv <andraprs@amazon.com>
      Link: https://lore.kernel.org/r/20211220195856.6549-1-andraprs@amazon.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      3a0152b2
    • Todd Kjos's avatar
      binder: fix async_free_space accounting for empty parcels · cfd0d84b
      Todd Kjos authored
      
      In 4.13, commit 74310e06 ("android: binder: Move buffer out of area shared with user space")
      fixed a kernel structure visibility issue. As part of that patch,
      sizeof(void *) was used as the buffer size for 0-length data payloads so
      the driver could detect abusive clients sending 0-length asynchronous
      transactions to a server by enforcing limits on async_free_size.
      
      Unfortunately, on the "free" side, the accounting of async_free_space
      did not add the sizeof(void *) back. The result was that up to 8-bytes of
      async_free_space were leaked on every async transaction of 8-bytes or
      less.  These small transactions are uncommon, so this accounting issue
      has gone undetected for several years.
      
      The fix is to use "buffer_size" (the allocated buffer size) instead of
      "size" (the logical buffer size) when updating the async_free_space
      during the free operation. These are the same except for this
      corner case of asynchronous transactions with payloads < 8 bytes.
      
      Fixes: 74310e06 ("android: binder: Move buffer out of area shared with user space")
      Signed-off-by: default avatarTodd Kjos <tkjos@google.com>
      Cc: stable@vger.kernel.org # 4.14+
      Link: https://lore.kernel.org/r/20211220190150.2107077-1-tkjos@google.com
      
      
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      cfd0d84b
  2. Dec 12, 2021
  3. Dec 11, 2021
Loading