Skip to content
  • Jeff Layton's avatar
    cifs: fix potential races in cifs_revalidate_mapping · 4f73c7d3
    Jeff Layton authored
    
    
    The handling of the CIFS_INO_INVALID_MAPPING flag is racy. It's possible
    for two tasks to attempt to revalidate the mapping at the same time. The
    first sees that CIFS_INO_INVALID_MAPPING is set. It clears the flag and
    then calls invalidate_inode_pages2 to start shooting down the pagecache.
    
    While that's going on, another task checks the flag and sees that it's
    clear. It then ends up trusting the pagecache to satisfy a read when it
    shouldn't.
    
    Fix this by adding a bitlock to ensure that the clearing of the flag is
    atomic with respect to the actual cache invalidation. Also, move the
    other existing users of cifs_invalidate_mapping to use a new
    cifs_zap_mapping() function that just sets the INVALID_MAPPING bit and
    then uses the standard codepath to handle the invalidation.
    
    Signed-off-by: default avatarJeff Layton <jlayton@poochiereds.net>
    Signed-off-by: default avatarSteve French <smfrench@gmail.com>
    4f73c7d3