CVE-2021-47222: net: bridge: fix vlan tunnel dst refcnt when egressing

Published May 21, 2024
·
Updated

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

net: bridge: fix vlan tunnel dst refcnt when egressing

The egress tunnel code uses dstclone() and directly sets the result which is wrong because the entry might have 0 refcnt or be already deleted, causing number of problems. It also triggers the WARNON() in dsthold()[1] when a refcnt couldn't be taken. Fix it by using dstholdsafe() and checking if a reference was actually taken before setting the dst.

[1] dmesg WARNON log and following refcnt errors WARNING: CPU: 5 PID: 38 at include/net/dst.h:230 brhandleegressvlantunnel+0x10b/0x134 [bridge] Modules linked in: 8021q garp mrp bridge stp llc bonding ipv6 virtionet CPU: 5 PID: 38 Comm: ksoftirqd/5 Kdump: loaded Tainted: G W 5.13.0-rc3+ #360 Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.14.0-1.fc33 04/01/2014 RIP: 0010:brhandleegressvlantunnel+0x10b/0x134 [bridge] Code: e8 85 bc 01 e1 45 84 f6 74 90 45 31 f6 85 db 48 c7 c7 a0 02 19 a0 41 0f 94 c6 31 c9 31 d2 44 89 f6 e8 64 bc 01 e1 85 db 75 02 <0f> 0b 31 c9 31 d2 44 89 f6 48 c7 c7 70 02 19 a0 e8 4b bc 01 e1 49 RSP: 0018:ffff8881003d39e8 EFLAGS: 00010246 RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000001 RDI: ffffffffa01902a0 RBP: ffff8881040c6700 R08: 0000000000000000 R09: 0000000000000001 R10: 2ce93d0054fe0d00 R11: 54fe0d00000e0000 R12: ffff888109515000 R13: 0000000000000000 R14: 0000000000000001 R15: 0000000000000401 FS: 0000000000000000(0000) GS:ffff88822bf40000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f42ba70f030 CR3: 0000000109926000 CR4: 00000000000006e0 Call Trace: brhandlevlan+0xbc/0xca [bridge] brforward+0x23/0x164 [bridge] deliverclone+0x41/0x48 [bridge] brhandleframefinish+0x36f/0x3aa [bridge] ? skbdst+0x2e/0x38 [bridge] ? brhandleingressvlantunnel+0x3e/0x1c8 [bridge] ? brhandleframefinish+0x3aa/0x3aa [bridge] brhandleframe+0x2c3/0x377 [bridge] ? skbpull+0x33/0x51 ? vlandoreceive+0x4f/0x36a ? brhandleframefinish+0x3aa/0x3aa [bridge] netifreceiveskbcore+0x539/0x7c6 ? listdelentryvalid+0x16e/0x1c2 netifreceiveskblistcore+0x6d/0xd6 netifreceiveskblistinternal+0x1d9/0x1fa gronormallist+0x22/0x3e devgroreceive+0x55b/0x600 ? detachbufsplit+0x58/0x140 napigroreceive+0x94/0x12e virtnetpoll+0x15d/0x315 [virtionet] napipoll+0x2c/0x1c9 netrxaction+0xe6/0x1fb dosoftirq+0x115/0x2d8 runksoftirqd+0x18/0x20 smpbootthreadfn+0x183/0x19c ? smpbootunregisterpercputhread+0x66/0x66 kthread+0x10a/0x10f ? kthreadmoddelayedwork+0xb6/0xb6 retfromfork+0x22/0x30 ---[ end trace 49f61b07f775fd2b ]--- dstrelease: dst:00000000c02d677a refcnt:-1 dstrelease underflow

Affected Software

12 affected components
Linux Foundation Linux Kernel>=5.13.0-rc3
Linux Linux kernel>=4.11<4.14.238
Linux Linux kernel>=4.15<4.19.196
Linux Linux kernel>=4.20<5.4.128
Linux Linux kernel>=5.5<5.10.46
Linux Linux kernel>=5.11<5.12.13
Linux Linux kernel=5.13-rc1
Linux Linux kernel=5.13-rc2
Linux Linux kernel=5.13-rc3
Linux Linux kernel=5.13-rc4
Linux Linux kernel=5.13-rc5
Linux Linux kernel=5.13-rc6

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade Linux kernel to a version that resolves this vulnerability.

    Fixed in 5.13.0-rc3+ #360
  2. Configuration

    Modify the bridge VLAN tunnel egress path (br_handle_egress_vlan_tunnel) to use dst_hold_safe() rather than dst_clone(), avoiding WARN_ON() in dst_hold() and preventing dst_release underflow when no refcount can be taken.

    Linux kernel bridge (br_handle_egress_vlan_tunnel) dst_clone() replaced with dst_hold_safe() when egressing VLAN tunnel = use dst_hold_safe() instead of dst_clone() and directly setting the result

Event History

May 21, 2024
CVE Published
via MITRE·02:19 PM
Data Sourced
via MITRE·02:19 PM
DescriptionSeverity
Data Sourced
via NVD·03:15 PM
RemedyDescriptionSeverityWeaknessAffected Software

Frequently Asked Questions

1

What is the severity of CVE-2021-47222?

CVE-2021-47222 is classified as a medium severity vulnerability affecting the Linux kernel.

2

How do I fix CVE-2021-47222?

To fix CVE-2021-47222, you should update your Linux kernel to the latest version that addresses this vulnerability.

3

What versions of Linux Kernel are affected by CVE-2021-47222?

CVE-2021-47222 affects Linux Kernel versions starting from 5.13.0-rc3.

4

What is the nature of CVE-2021-47222?

CVE-2021-47222 involves a vulnerability in the egress tunnel code of the Linux kernel related to improper handling of destination reference counts.

5

Is CVE-2021-47222 exploitable?

Yes, CVE-2021-47222 can potentially be exploited, leading to stability issues in the affected systems.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203