CVE-2024-41050

cachefiles: cyclic allocation of msg_id to avoid reuse

published July 29, 2024

CVSS
—
EPSS
0%
Percentile
19.7
In the wild
Unconfirmed
What it is

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.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00282 · 19.7th percentile
Published
2024-07-29T14:32Z
EPSS history
Timeline
  • 29 JUL 14:32Z
    cachefiles: cyclic allocation of msg_id to avoid reuse
    cvelistv5