mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 11:31:31 +00:00
31ad74b202
At present, the object->file has the NULL pointer dereference problem in
ondemand-mode. The root cause is that the allocated fd and object->file
lifetime are inconsistent, and the user-space invocation to anon_fd uses
object->file. Following is the process that triggers the issue:
[write fd] [umount]
cachefiles_ondemand_fd_write_iter
fscache_cookie_state_machine
cachefiles_withdraw_cookie
if (!file) return -ENOBUFS
cachefiles_clean_up_object
cachefiles_unmark_inode_in_use
fput(object->file)
object->file = NULL
// file NULL pointer dereference!
__cachefiles_write(..., file, ...)
Fix this issue by add an additional reference count to the object->file
before write/llseek, and decrement after it finished.
Fixes:
|
||
---|---|---|
.. | ||
cache.c | ||
daemon.c | ||
error_inject.c | ||
interface.c | ||
internal.h | ||
io.c | ||
Kconfig | ||
key.c | ||
main.c | ||
Makefile | ||
namei.c | ||
ondemand.c | ||
security.c | ||
volume.c | ||
xattr.c |