• Roland Dreier's avatar
    IB: Explicitly rule out llseek to avoid BKL in default_llseek() · bc1db9af
    Roland Dreier authored
    Several RDMA user-access drivers have file_operations structures with
    no .llseek method set.  None of the drivers actually do anything with
    f_pos, so this means llseek is essentially a NOP, instead of returning
    an error as leaving other file_operations methods unimplemented would
    do.  This is mostly harmless, except that a NULL .llseek means that
    default_llseek() is used, and this function grabs the BKL, which we
    would like to avoid.
    
    Since llseek does nothing useful on these files, we would like it to
    return an error to userspace instead of silently grabbing the BKL and
    succeeding.  For nearly all of the file types, we take the
    belt-and-suspenders approach of setting the .llseek method to
    no_llseek and also calling nonseekable_open(); the exception is the
    uverbs_event files, which are created with anon_inode_getfile(), which
    already sets f_mode the same way as nonseekable_open() would.
    
    This work is motivated by Arnd Bergmann's bkl-removal tree.
    Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
    bc1db9af
ucm.c 33.7 KB