CVE-2023-52854

Source
https://cve.org/CVERecord?id=CVE-2023-52854
Import Source
https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2023-52854.json
JSON Data
https://api.test.osv.dev/v1/vulns/CVE-2023-52854
Downstream
Related
Published
2024-05-21T15:31:49.235Z
Modified
2026-04-11T12:46:37.333522Z
Summary
padata: Fix refcnt handling in padata_free_shell()
Details

In the Linux kernel, the following vulnerability has been resolved:

padata: Fix refcnt handling in padatafreeshell()

In a high-load arm64 environment, the pcryptaead01 test in LTP can lead to system UAF (Use-After-Free) issues. Due to the lengthy analysis of the pcryptaead01 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:

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:

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.

Database specific
{
    "cna_assigner": "Linux",
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2023/52xxx/CVE-2023-52854.json"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
07928d9bfc81640bab36f5190e8725894d93b659
Fixed
41aad9d6953984d134fc50f631f24ef476875d4d
Fixed
0dd34a7ad395dbcf6ae60e48e9786050e25b9bc5
Fixed
c7c26d0ef5d20f00dbb2ae3befcabbe0efa77275
Fixed
1e901bcb8af19416b65f5063a4af7996e5a51d7f
Fixed
1734a79e951914f1db2c65e635012a35db1c674b
Fixed
7ddc21e317b360c3444de3023bcc83b85fabae2f
Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
0 Unknown introduced commit / All previous commits are affected
Last affected
13721e447acc2b82c19cf72e9e6c4291c77693ed
Last affected
7a2ccb65f90168edc2348495bb56093c466ffa39
Last affected
928cf3d733c4efc221e1a78b14cb2ee066627260
Last affected
c9da8ee1491719001a444f4af688b75e72b58418
Last affected
dc34710a7aba5207e7cb99d11588c04535b3c53d
Last affected
5fefc9b3e3584a1ce98da27c38e1b8dda1939d74
Last affected
26daf8e6515c2dcd25d235468420b9f46e0acdac

Database specific

source
"https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2023-52854.json"

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
5.6.0
Fixed
5.10.201
Type
ECOSYSTEM
Events
Introduced
5.11.0
Fixed
5.15.139
Type
ECOSYSTEM
Events
Introduced
5.16.0
Fixed
6.1.63
Type
ECOSYSTEM
Events
Introduced
6.2.0
Fixed
6.5.12
Type
ECOSYSTEM
Events
Introduced
6.6.0
Fixed
6.6.2

Database specific

source
"https://storage.googleapis.com/osv-test-cve-osv-conversion/osv-output/CVE-2023-52854.json"