mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +00:00
85e833cd72
In ondemand mode, when the daemon is processing an open request, if the
kernel flags the cache as CACHEFILES_DEAD, the cachefiles_daemon_write()
will always return -EIO, so the daemon can't pass the copen to the kernel.
Then the kernel process that is waiting for the copen triggers a hung_task.
Since the DEAD state is irreversible, it can only be exited by closing
/dev/cachefiles. Therefore, after calling cachefiles_io_error() to mark
the cache as CACHEFILES_DEAD, if in ondemand mode, flush all requests to
avoid the above hungtask. We may still be able to read some of the cached
data before closing the fd of /dev/cachefiles.
Note that this relies on the patch that adds reference counting to the req,
otherwise it may UAF.
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 |