• Greg Hackmann's avatar
    dma-buf: give each buffer a full-fledged inode · ed63bb1d
    Greg Hackmann authored
    By traversing /proc/*/fd and /proc/*/map_files, processes with CAP_ADMIN
    can get a lot of fine-grained data about how shmem buffers are shared
    among processes.  stat(2) on each entry gives the caller a unique
    ID (st_ino), the buffer's size (st_size), and even the number of pages
    currently charged to the buffer (st_blocks / 512).
    
    In contrast, all dma-bufs share the same anonymous inode.  So while we
    can count how many dma-buf fds or mappings a process has, we can't get
    the size of the backing buffers or tell if two entries point to the same
    dma-buf.  On systems with debugfs, we can get a per-buffer breakdown of
    size and reference count, but can't tell which processes are actually
    holding the references to each buffer.
    
    Replace the singleton inode with full-fledged inodes allocated by
    alloc_anon_inode().  This involves creating and mounting a
    mini-pseudo-filesystem for dma-buf, following the example in fs/aio.c.
    Signed-off-by: default avatarGreg Hackmann <ghackmann@google.com>
    Signed-off-by: default avatarChenbo Feng <fengc@google.com>
    Signed-off-by: default avatarSumit Semwal <sumit.semwal@linaro.org>
    Link: https://patchwork.freedesktop.org/patch/msgid/20190613223408.139221-2-fengc@google.com
    ed63bb1d
dma-buf.c 34.3 KB