Bug 2300424 (CVE-2024-41051) - CVE-2024-41051 kernel: cachefiles: wait for ondemand_object_worker to finish when dropping object
Summary: CVE-2024-41051 kernel: cachefiles: wait for ondemand_object_worker to finish ...
Keywords:
Status: NEW
Alias: CVE-2024-41051
Product: Security Response
Classification: Other
Component: vulnerability
Version: unspecified
Hardware: All
OS: Linux
medium
medium
Target Milestone: ---
Assignee: Product Security DevOps Team
QA Contact:
URL:
Whiteboard:
Depends On: 2301583
Blocks:
TreeView+ depends on / blocked
 
Reported: 2024-07-29 15:40 UTC by OSIDB Bzimport
Modified: 2024-09-19 14:26 UTC (History)
4 users (show)

Fixed In Version: kernel 6.1.100, kernel 6.6.41, kernel 6.9.10, kernel 6.10
Doc Type: If docs needed, set a value
Doc Text:
A use-after-free vulnerability was identified in the Linux kernel's cachefiles subsystem. When an object was freed, there was a risk that a queued worker (ondemand_object_worker()) could still attempt to access this freed object, leading to potential undefined behavior and security issues.
Clone Of:
Environment:
Last Closed:
Embargoed:


Attachments (Terms of Use)

Description OSIDB Bzimport 2024-07-29 15:40:42 UTC
In the Linux kernel, the following vulnerability has been resolved:

cachefiles: wait for ondemand_object_worker to finish when dropping object

When queuing ondemand_object_worker() to re-open the object,
cachefiles_object is not pinned. The cachefiles_object may be freed when
the pending read request is completed intentionally and the related
erofs is umounted. If ondemand_object_worker() runs after the object is
freed, it will incur use-after-free problem as shown below.

process A  processs B  process C  process D

cachefiles_ondemand_send_req()
// send a read req X
// wait for its completion

           // close ondemand fd
           cachefiles_ondemand_fd_release()
           // set object as CLOSE

                       cachefiles_ondemand_daemon_read()
                       // set object as REOPENING
                       queue_work(fscache_wq, &info->ondemand_work)

                                // close /dev/cachefiles
                                cachefiles_daemon_release
                                cachefiles_flush_reqs
                                complete(&req->done)

// read req X is completed
// umount the erofs fs
cachefiles_put_object()
// object will be freed
cachefiles_ondemand_deinit_obj_info()
kmem_cache_free(object)
                       // both info and object are freed
                       ondemand_object_worker()

When dropping an object, it is no longer necessary to reopen the object,
so use cancel_work_sync() to cancel or wait for ondemand_object_worker()
to finish.

Comment 1 Mauro Matteo Cascella 2024-07-30 10:29:28 UTC
Upstream advisory:
https://lore.kernel.org/linux-cve-announce/2024072927-CVE-2024-41051-f511@gregkh/T

Comment 2 Mauro Matteo Cascella 2024-07-30 10:29:48 UTC
Created kernel tracking bugs for this issue:

Affects: fedora-all [bug 2301583]


Note You need to log in before you can comment on or make changes to this bug.