CVE-2021-47555CWE-191

CVE-2021-47555

High · published May 24, 2024

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

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

net: vlan: fix underflow for the real_dev refcnt

Inject error before dev_hold(real_dev) in register_vlan_dev(),

and execute the following testcase:

ip link add dev dummy1 type dummy

ip link add name dummy1.100 link dummy1 type vlan id 100

ip link del dev dummy1

When the dummy netdevice is removed, we will get a WARNING as following:

=======================================================================

refcount_t: decrement hit 0; leaking memory.

WARNING: CPU: 2 PID: 0 at lib/refcount.c:31 refcount_warn_saturate+0xbf/0x1e0

and an endless loop of:

=======================================================================

unregister_netdevice: waiting for dummy1 to become free. Usage count = -1073741824

That is because dev_put(real_dev) in vlan_dev_free() be called without

dev_hold(real_dev) in register_vlan_dev(). It makes the refcnt of real_dev

underflow.

Move the dev_hold(real_dev) to vlan_dev_init() which is the call-back of

ndo_init(). That makes dev_hold() and dev_put() for vlan's real_dev

symmetrical.

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.00221 · 11.9th percentile
Weakness
CWE-191 · Integer Underflow (Wrap or Wraparound)
Published
2024-05-24T19:15Z
Affected products (6)
ProductVersionsFixed in
linux/linux_kernel≥ 5.4.160, < 5.4.1635.4.163
linux/linux_kernel≥ 5.10.80, < 5.10.835.10.83
linux/linux_kernel≥ 5.14.19, < 5.155.15
linux/linux_kernel≥ 5.15.3, < 5.15.65.15.6
linux/linux_kernelall versions—
linux/linux_kernelall versions—
References (8)
EPSS history
Timeline
  • 24 MAY 15:09Z
    net: vlan: fix underflow for the real_dev refcnt
    cvelistv5