DescriptionEugene Teo (Security Response)
2009-11-19 09:02:33 UTC
Description of problem:
fuse_direct_io() has a loop where requests are allocated in each iteration. if allocation fails, the loop is broken out and follows into an unconditional fuse_put_request() on that invalid pointer."
Upstream commit:
http://git.kernel.org/linus/f60311d5f7670d9539b424e4ed8b5c0872fc9e83
This can be triggered when the system is low on memory, and when the fuse_request_alloc() function called from fuse_get_req() fails. The fuse_put_request() function will then dereference the invalid pointer returned, resulting in a kernel oops.
This was introduced in 413ef8cb (v2.6.14-rc1) and fixed in v2.6.32-rc7.
Mitre's CVE-2009-4021 entry:
----------------------------
The fuse_direct_io function in fs/fuse/file.c in the fuse subsystem in
the Linux kernel before 2.6.32-rc7 might allow attackers to cause a
denial of service (invalid pointer dereference and OOPS) via vectors
possibly related to a memory-consumption attack.