lkml.org 
[lkml]   [2020]   [Feb]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [kernel-hardening] [PATCH 09/38] usercopy: Mark kmalloc caches as usercopy caches
    On Sat, Feb 01, 2020 at 08:27:49PM +0100, Jann Horn wrote:
    > FWIW, as far as I understand, usercopy doesn't actually have any
    > effect on drivers that use the modern, proper APIs, since those don't
    > use the slab allocator at all - as I pointed out in my last mail, the
    > dma-kmalloc* slabs are used very rarely. (Which is good, because
    > putting objects from less-than-page-size slabs into iommu entries is a
    > terrible idea from a security and reliability perspective because it
    > gives the hardware access to completely unrelated memory.) Instead,
    > they get pages from the page allocator, and these pages may e.g. be
    > allocated from the DMA, DMA32 or NORMAL zones depending on the
    > restrictions imposed by hardware. So I think the usercopy restriction
    > only affects a few oddball drivers (like this s390 stuff), which is
    > why you're not seeing more bug reports caused by this.

    Getting pages from the page allocator is true for dma_alloc_coherent()
    and friends. But it's not true for streaming DMA mappings (dma_map_*)
    for which the memory usually comes from kmalloc(). If this is something
    we want to fix (and I have an awful feeling we're going to regret it
    if we say "no, we trust the hardware"), we're going to have to come up
    with a new memory allocation API for these cases. Or bounce bugger the
    memory for devices we don't trust.

    The problem with the dma_map_* API is that memory might end up being
    allocated once and then used multiple times by different drivers. eg if
    I allocate an NFS packet, it might get sent first to eth0, then (when the
    route fails) sent to eth1. Similarly in storage, a RAID-5 driver might
    map the same memory several times to send to different disk controllers.

    \
     
     \ /
      Last update: 2020-02-03 08:47    [W:4.262 / U:0.400 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site