• Johannes Berg's avatar
    debugfs: fix automount d_fsdata usage · 0ed04a18
    Johannes Berg authored
    debugfs_create_automount() stores a function pointer in d_fsdata,
    but since commit 7c8d4698 ("debugfs: add support for more
    elaborate ->d_fsdata") debugfs_release_dentry() will free it, now
    conditionally on DEBUGFS_FSDATA_IS_REAL_FOPS_BIT, but that's not
    set for the function pointer in automount. As a result, removing
    an automount dentry would attempt to free the function pointer.
    Luckily, the only user of this (tracing) never removes it.
    
    Nevertheless, it's safer if we just handle the fsdata in one way,
    namely either DEBUGFS_FSDATA_IS_REAL_FOPS_BIT or allocated. Thus,
    change the automount to allocate it, and use the real_fops in the
    data to indicate whether or not automount is filled, rather than
    adding a type tag. At least for now this isn't actually needed,
    but the next changes will require it.
    
    Also check in debugfs_file_get() that it gets only called
    on regular files, just to make things clearer.
    Acked-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    0ed04a18
inode.c 26.2 KB