• Ryusuke Konishi's avatar
    nilfs2: fix sysfs interface lifetime · 42560f9c
    Ryusuke Konishi authored
    The current nilfs2 sysfs support has issues with the timing of creation
    and deletion of sysfs entries, potentially leading to null pointer
    dereferences, use-after-free, and lockdep warnings.
    
    Some of the sysfs attributes for nilfs2 per-filesystem instance refer to
    metadata file "cpfile", "sufile", or "dat", but
    nilfs_sysfs_create_device_group that creates those attributes is executed
    before the inodes for these metadata files are loaded, and
    nilfs_sysfs_delete_device_group which deletes these sysfs entries is
    called after releasing their metadata file inodes.
    
    Therefore, access to some of these sysfs attributes may occur outside of
    the lifetime of these metadata files, resulting in inode NULL pointer
    dereferences or use-after-free.
    
    In addition, the call to nilfs_sysfs_create_device_group() is made during
    the locking period of the semaphore "ns_sem" of nilfs object, so the
    shrinker call caused by the memory allocation for the sysfs entries, may
    derive lock dependencies "ns_sem" -> (shrinker) -> "locks acquired in
    nilfs_evict_inode()".
    
    Since nilfs2 may acquire "ns_sem" deep in the call stack holding other
    locks via its error handler __nilfs_error(), this causes lockdep to report
    circular locking.  This is a false positive and no circular locking
    actually occurs as no inodes exist yet when
    nilfs_sysfs_create_device_group() is called.  Fortunately, the lockdep
    warnings can be resolved by simply moving the call to
    nilfs_sysfs_create_device_group() out of "ns_sem".
    
    This fixes these sysfs issues by revising where the device's sysfs
    interface is created/deleted and keeping its lifetime within the lifetime
    of the metadata files above.
    
    Link: https://lkml.kernel.org/r/20230330205515.6167-1-konishi.ryusuke@gmail.com
    Fixes: dd70edbd ("nilfs2: integrate sysfs support into driver")
    Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@gmail.com>
    Reported-by: syzbot+979fa7f9c0d086fdc282@syzkaller.appspotmail.com
      Link: https://lkml.kernel.org/r/0000000000003414b505f7885f7e@google.com
    Reported-by: syzbot+5b7d542076d9bddc3c6a@syzkaller.appspotmail.com
      Link: https://lkml.kernel.org/r/0000000000006ac86605f5f44eb9@google.com
    Cc: Viacheslav Dubeyko <slava@dubeyko.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    42560f9c
the_nilfs.c 22 KB