CVE-2024-39495

greybus: Fix use-after-free bug in gb_interface_release due to race condition.

High · published July 12, 2024

CVSS v3.1
7.8
EPSS
0%
Percentile
24.3
In the wild
Unconfirmed
What it is

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

greybus: Fix use-after-free bug in gb_interface_release due to race condition.

In gb_interface_create, &intf->mode_switch_completion is bound with

gb_interface_mode_switch_work. Then it will be started by

gb_interface_request_mode_switch. Here is the relevant code.

if (!queue_work(system_long_wq, &intf->mode_switch_work)) {

...

}

If we call gb_interface_release to make cleanup, there may be an

unfinished work. This function will call kfree to free the object

"intf". However, if gb_interface_mode_switch_work is scheduled to

run after kfree, it may cause use-after-free error as

gb_interface_mode_switch_work will use the object "intf".

The possible execution flow that may lead to the issue is as follows:

CPU0 CPU1

| gb_interface_create

| gb_interface_request_mode_switch

gb_interface_release |

kfree(intf) (free) |

| gb_interface_mode_switch_work

| mutex_lock(&intf->mutex) (use)

Fix it by canceling the work before kfree.

The record
Technical detail
CVSS v3.1
7.8 · HIGH
Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS v4.0
Not supplied
EPSS
0.00325 · 24.3th percentile
Published
2024-07-12T12:20Z
EPSS history
Timeline
  • 12 JUL 12:20Z
    greybus: Fix use-after-free bug in gb_interface_release due to race condition.
    cvelistv5