CVE-2023-52854

High

Description

In the Linux kernel, the following vulnerability has been resolved: padata: Fix refcnt handling in padata_free_shell() In a high-load arm64 environment, the pcrypt_aead01 test in LTP can lead to system UAF (Use-After-Free) issues. Due to the lengthy analysis of the pcrypt_aead01 function call, I'll describe the problem scenario using a simplified model: Suppose there's a user of padata named `user_function` that adheres to the padata requirement of calling `padata_free_shell` after `serial()` has been invoked, as demonstrated in the following code: ```c struct request { struct padata_priv padata; struct completion *done; }; void parallel(struct padata_priv *padata) { do_something(); } void serial(struct padata_priv *padata) { struct request *request = container_of(padata, struct request, padata); complete(request->done); } void user_function() { DECLARE_COMPLETION(done) padata->parallel = parallel; padata->serial = serial; padata_do_parallel(); wait_for_completion(&done); padata_free_shell(); } ``` In the corresponding padata.c file, there's the following code: ```c static void padata_serial_worker(struct work_struct *serial_work) { ... cnt = 0; while (!list_empty(&local_list)) { ... padata->serial(padata); cnt++; } local_bh_enable(); if (refcount_sub_and_test(cnt, &pd->refcnt)) padata_free_pd(pd); } ``` Because of the high system load and the accumulation of unexecuted softirq at this moment, `local_bh_enable()` in padata takes longer to execute than usual. Subsequently, when accessing `pd->refcnt`, `pd` has already been released by `padata_free_shell()`, resulting in a UAF issue with `pd->refcnt`. The fix is straightforward: add `refcount_dec_and_test` before calling `padata_free_pd` in `padata_free_shell`.

SeverityHigh
CVSS7.8
Exploit probability—
ProductLinux Kernel
PublishedMay 21, 2024
First seenMay 21, 2024

How to fix

Update
  • linux linux_kernel3.17, 4.5, 4.10, 4.15, 4.20, 5.5, 5.10.201, 5.15.139, 6.1.63, 6.5.12, 6.6.2 or later

Affected products

ProductAffected versionsFixed in
linux linux_kernel3.16.84 ≤ v < 3.17, 4.4.215 ≤ v < 4.5, 4.9.215 ≤ v < 4.10, 4.14.172 ≤ v < 4.15, 4.19.103 ≤ v < 4.20, 5.4.19 ≤ v < 5.5, 5.5.3 ≤ v < 5.10.201, 5.11 ≤ v < 5.15.139, 5.16 ≤ v < 6.1.63, 6.2 ≤ v < 6.5.12, 6.6 ≤ v < 6.6.23.17, 4.5, 4.10, 4.15, 4.20, 5.5, 5.10.201, 5.15.139, 6.1.63, 6.5.12, 6.6.2

Check your version

Choose the product and enter the version you run to see whether it falls in the affected range.

In the Intelligence 360 plan

Attack Surface Management

See the assets tied to your domains, the technologies they run and known vulnerabilities in one list.