In the Linux kernel, the following vulnerability has been resolved:
nilfs2: fix sysfs interface lifetime
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 nilfssysfscreatedevicegroup that creates those attributes is executed before the inodes for these metadata files are loaded, and nilfssysfsdeletedevicegroup 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 nilfssysfscreatedevicegroup() is made during the locking period of the semaphore "nssem" of nilfs object, so the shrinker call caused by the memory allocation for the sysfs entries, may derive lock dependencies "nssem" -> (shrinker) -> "locks acquired in nilfsevictinode()".
Since nilfs2 may acquire "nssem" deep in the call stack holding other locks via its error handler _nilfserror(), this causes lockdep to report circular locking. This is a false positive and no circular locking actually occurs as no inodes exist yet when nilfssysfscreatedevicegroup() is called. Fortunately, the lockdep warnings can be resolved by simply moving the call to nilfssysfscreatedevicegroup() out of "nssem".
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.