lkml.org 
[lkml]   [2018]   [Apr]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH] kvmalloc: always use vmalloc if CONFIG_DEBUG_VM
    On Thu, Apr 19, 2018 at 12:12:38PM -0400, Mikulas Patocka wrote:
    > Unfortunatelly, some kernel code has bugs - it uses kvmalloc and then
    > uses DMA-API on the returned memory or frees it with kfree. Such bugs were
    > found in the virtio-net driver, dm-integrity or RHEL7 powerpc-specific
    > code.

    Maybe it's time to have the SG code handle vmalloced pages? This is
    becoming more and more common with vmapped stacks (and some of our
    workarounds are hideous -- allocate 4 bytes with kmalloc because we can't
    DMA onto the stack any more?). We already have a few places which do
    handle sgs of vmalloced addresses, such as the nx crypto driver:

    if (is_vmalloc_addr(start_addr))
    sg_addr = page_to_phys(vmalloc_to_page(start_addr))
    + offset_in_page(sg_addr);
    else
    sg_addr = __pa(sg_addr);

    and videobuf:

    pg = vmalloc_to_page(virt);
    if (NULL == pg)
    goto err;
    BUG_ON(page_to_pfn(pg) >= (1 << (32 - PAGE_SHIFT)));
    sg_set_page(&sglist[i], pg, PAGE_SIZE, 0);

    Yes, there's the potential that we have to produce two SG entries for a
    virtually contiguous region if it crosses a page boundary, and our APIs
    aren't set up right to make it happen. But this is something we should
    consider fixing ... otherwise we'll end up with dozens of driver hacks.
    The videobuf implementation was already copy-and-pasted into the saa7146
    driver, for example.

    \
     
     \ /
      Last update: 2018-04-20 13:47    [W:4.587 / U:0.516 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site