CVE-2023-52854

padata: Fix refcnt handling in padata_free_shell()

State
Published
Severity
Not scored
Published
May 21, 2024
Updated
May 23, 2026
Reserved
May 21, 2024

Read the record on cve.org

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`.

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 07928d9bfc81640bab36f5190e8725894d93b659 to before 41aad9d6953984d134fc50f631f24ef476875d4dAffected
  • 07928d9bfc81640bab36f5190e8725894d93b659 to before 0dd34a7ad395dbcf6ae60e48e9786050e25b9bc5Affected
  • 07928d9bfc81640bab36f5190e8725894d93b659 to before c7c26d0ef5d20f00dbb2ae3befcabbe0efa77275Affected
  • 07928d9bfc81640bab36f5190e8725894d93b659 to before 1e901bcb8af19416b65f5063a4af7996e5a51d7fAffected
  • 07928d9bfc81640bab36f5190e8725894d93b659 to before 1734a79e951914f1db2c65e635012a35db1c674bAffected
  • 07928d9bfc81640bab36f5190e8725894d93b659 to before 7ddc21e317b360c3444de3023bcc83b85fabae2fAffected
  • 13721e447acc2b82c19cf72e9e6c4291c77693edAffected
  • 7a2ccb65f90168edc2348495bb56093c466ffa39Affected
  • 928cf3d733c4efc221e1a78b14cb2ee066627260Affected
  • c9da8ee1491719001a444f4af688b75e72b58418Affected
  • dc34710a7aba5207e7cb99d11588c04535b3c53dAffected
  • 5fefc9b3e3584a1ce98da27c38e1b8dda1939d74Affected
  • 26daf8e6515c2dcd25d235468420b9f46e0acdacAffected
  • 3.16.84 to before 3.17Affected
  • 4.4.215 to before 4.5Affected
  • 4.9.215 to before 4.10Affected
  • 4.14.172 to before 4.15Affected
  • 4.19.103 to before 4.20Affected
  • 5.4.19 to before 5.5Affected
  • 5.5.3 to before 5.6Affected
LinuxLinux
  • 5.6Affected
  • before 5.6Not affected
  • 5.10.201 through 5.10.*Not affected
  • 5.15.139 through 5.15.*Not affected
  • 6.1.63 through 6.1.*Not affected
  • 6.5.12 through 6.5.*Not affected
  • 6.6.2 through 6.6.*Not affected
  • 6.7 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.