Bug 2300423 (CVE-2024-41050) - CVE-2024-41050 kernel: cachefiles: cyclic allocation of msg_id to avoid reuse
Summary: CVE-2024-41050 kernel: cachefiles: cyclic allocation of msg_id to avoid reuse
Keywords:
Status: NEW
Alias: CVE-2024-41050
Product: Security Response
Classification: Other
Component: vulnerability
Version: unspecified
Hardware: All
OS: Linux
low
low
Target Milestone: ---
Assignee: Product Security DevOps Team
QA Contact:
URL:
Whiteboard:
Depends On: 2301582
Blocks:
TreeView+ depends on / blocked
 
Reported: 2024-07-29 15:40 UTC by OSIDB Bzimport
Modified: 2024-07-31 04:18 UTC (History)
4 users (show)

Fixed In Version: kernel 6.1.100, kernel 6.6.41, kernel 6.9.10, kernel 6.10
Clone Of:
Environment:
Last Closed:
Embargoed:


Attachments (Terms of Use)

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

cachefiles: cyclic allocation of msg_id to avoid reuse

Reusing the msg_id after a maliciously completed reopen request may cause
a read request to remain unprocessed and result in a hung, as shown below:

       t1       |      t2       |      t3
-------------------------------------------------
cachefiles_ondemand_select_req
 cachefiles_ondemand_object_is_close(A)
 cachefiles_ondemand_set_object_reopening(A)
 queue_work(fscache_object_wq, &info->work)
                ondemand_object_worker
                 cachefiles_ondemand_init_object(A)
                  cachefiles_ondemand_send_req(OPEN)
                    // get msg_id 6
                    wait_for_completion(&req_A->done)
cachefiles_ondemand_daemon_read
 // read msg_id 6 req_A
 cachefiles_ondemand_get_fd
 copy_to_user
                                // Malicious completion msg_id 6
                                copen 6,-1
                                cachefiles_ondemand_copen
                                 complete(&req_A->done)
                                 // will not set the object to close
                                 // because ondemand_id && fd is valid.

                // ondemand_object_worker() is done
                // but the object is still reopening.

                                // new open req_B
                                cachefiles_ondemand_init_object(B)
                                 cachefiles_ondemand_send_req(OPEN)
                                 // reuse msg_id 6
process_open_req
 copen 6,A.size
 // The expected failed copen was executed successfully

Expect copen to fail, and when it does, it closes fd, which sets the
object to close, and then close triggers reopen again. However, due to
msg_id reuse resulting in a successful copen, the anonymous fd is not
closed until the daemon exits. Therefore read requests waiting for reopen
to complete may trigger hung task.

To avoid this issue, allocate the msg_id cyclically to avoid reusing the
msg_id for a very short duration of time.

Comment 1 Mauro Matteo Cascella 2024-07-30 10:26:18 UTC
Upstream advisory:
https://lore.kernel.org/linux-cve-announce/2024072927-CVE-2024-41050-f3ff@gregkh/T

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

Affects: fedora-all [bug 2301582]


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