CVE-2021-47246 in Linuxinfo

Summary

by MITRE • 05/21/2024

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

net/mlx5e: Fix page reclaim for dead peer hairpin

When adding a hairpin flow, a firmware-side send queue is created for the peer net device, which claims some host memory pages for its internal ring buffer. If the peer net device is removed/unbound before the hairpin flow is deleted, then the send queue is not destroyed which leads to a stack trace on pci device remove:

[ 748.005230] mlx5_core 0000:08:00.2: wait_func:1094:(pid 12985): MANAGE_PAGES(0x108) timeout. Will cause a leak of a command resource
[ 748.005231] mlx5_core 0000:08:00.2: reclaim_pages:514:(pid 12985): failed reclaiming pages: err -110
[ 748.001835] mlx5_core 0000:08:00.2: mlx5_reclaim_root_pages:653:(pid 12985): failed reclaiming pages (-110) for func id 0x0
[ 748.002171] ------------[ cut here ]------------
[ 748.001177] FW pages counter is 4 after reclaiming all pages
[ 748.001186] WARNING: CPU: 1 PID: 12985 at drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c:685 mlx5_reclaim_startup_pages+0x34b/0x460 [mlx5_core] [ +0.002771] Modules linked in: cls_flower mlx5_ib mlx5_core ptp pps_core act_mirred sch_ingress openvswitch nsh xt_conntrack xt_MASQUERADE nf_conntrack_netlink nfnetlink xt_addrtype iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 br_netfilter rpcrdma rdma_ucm ib_iser libiscsi scsi_transport_iscsi rdma_cm ib_umad ib_ipoib iw_cm ib_cm ib_uverbs ib_core overlay fuse [last unloaded: pps_core]
[ 748.007225] CPU: 1 PID: 12985 Comm: tee Not tainted 5.12.0+ #1
[ 748.001376] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
[ 748.002315] RIP: 0010:mlx5_reclaim_startup_pages+0x34b/0x460 [mlx5_core]
[ 748.001679] Code: 28 00 00 00 0f 85 22 01 00 00 48 81 c4 b0 00 00 00 31 c0 5b 5d 41 5c 41 5d 41 5e 41 5f c3 48 c7 c7 40 cc 19 a1 e8 9f 71 0e e2 0b e9 30 ff ff ff 48 c7 c7 a0 cc 19 a1 e8 8c 71 0e e2 0f 0b e9
[ 748.003781] RSP: 0018:ffff88815220faf8 EFLAGS: 00010286
[ 748.001149] RAX: 0000000000000000 RBX: ffff8881b4900280 RCX: 0000000000000000
[ 748.001445] RDX: 0000000000000027 RSI: 0000000000000004 RDI: ffffed102a441f51
[ 748.001614] RBP: 00000000000032b9 R08: 0000000000000001 R09: ffffed1054a15ee8
[ 748.001446] R10: ffff8882a50af73b R11: ffffed1054a15ee7 R12: fffffbfff07c1e30
[ 748.001447] R13: dffffc0000000000 R14: ffff8881b492cba8 R15: 0000000000000000
[ 748.001429] FS: 00007f58bd08b580(0000) GS:ffff8882a5080000(0000) knlGS:0000000000000000
[ 748.001695] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 748.001309] CR2: 000055a026351740 CR3: 00000001d3b48006 CR4: 0000000000370ea0
[ 748.001506] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 748.001483] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[ 748.001654] Call Trace:
[ 748.000576] ? mlx5_satisfy_startup_pages+0x290/0x290 [mlx5_core]
[ 748.001416] ? mlx5_cmd_teardown_hca+0xa2/0xd0 [mlx5_core]
[ 748.001354] ? mlx5_cmd_init_hca+0x280/0x280 [mlx5_core]
[ 748.001203] mlx5_function_teardown+0x30/0x60 [mlx5_core]
[ 748.001275] mlx5_uninit_one+0xa7/0xc0 [mlx5_core]
[ 748.001200] remove_one+0x5f/0xc0 [mlx5_core]
[ 748.001075] pci_device_remove+0x9f/0x1d0
[ 748.000833] device_release_driver_internal+0x1e0/0x490
[ 748.001207] unbind_store+0x19f/0x200
[ 748.000942] ? sysfs_file_ops+0x170/0x170
[ 748.001000] kernfs_fop_write_iter+0x2bc/0x450
[ 748.000970] new_sync_write+0x373/0x610
[ 748.001124] ? new_sync_read+0x600/0x600
[ 748.001057] ? lock_acquire+0x4d6/0x700
[ 748.000908] ? lockdep_hardirqs_on_prepare+0x400/0x400
[ 748.001126] ? fd_install+0x1c9/0x4d0
[ 748.000951] vfs_write+0x4d0/0x800
[ 748.000804] ksys_write+0xf9/0x1d0
[ 748.000868] ? __x64_sys_read+0xb0/0xb0
[ 748.000811] ? filp_open+0x50/0x50
[ 748.000919] ? syscall_enter_from_user_mode+0x1d/0x50
[ 748.001223] do_syscall_64+0x3f/0x80
[ 748.000892] entry_SYSCALL_64_after_hwframe+0x44/0xae
[ 748.00
---truncated---

If you want to get best quality of vulnerability data, you may have to visit VulDB.

Analysis

by VulDB Data Team • 04/30/2025

The vulnerability identified as CVE-2021-47246 affects the Linux kernel's Mellanox 5th Generation Ethernet (mlx5) driver, specifically within the mlx5e module responsible for managing network interfaces. This flaw arises during the handling of hairpin flows, which are network communication patterns where packets are sent from one network interface to another on the same physical device. When a hairpin flow is established, the driver creates a firmware-side send queue for the peer network device, which consumes host memory pages for its internal ring buffer operations. The issue occurs when the peer network device is removed or unbound before the hairpin flow is properly deleted, leading to an incomplete cleanup process.

The technical root cause of this vulnerability lies in the improper management of memory resources allocated for firmware queues. When the peer device is removed, the driver fails to destroy the associated send queue, resulting in memory page leaks and resource exhaustion. The kernel logs show specific error codes such as -110, which corresponds to the ETIMEDOUT error, indicating that the firmware page reclaiming process has timed out. This timeout condition manifests as a stack trace indicating that firmware pages counter remains at 4 even after attempting to reclaim all pages, suggesting that the cleanup mechanism has failed to properly release memory resources. The vulnerability is classified under CWE-404, which deals with improper resource release or unbalanced resource management, and aligns with ATT&CK technique T1490, involving data destruction through resource exhaustion.

The operational impact of this vulnerability is significant for systems relying on Mellanox network adapters and hairpin networking capabilities. The memory page leaks can accumulate over time, leading to system instability, performance degradation, and potential system crashes when memory resources become exhausted. This is particularly concerning in high-throughput environments such as data centers, virtualized platforms, and containerized deployments where hairpin flows are commonly used for inter-container communication. The vulnerability can be triggered during normal device removal operations, making it a persistent risk that can affect system availability and reliability. The affected systems include those using Mellanox ConnectX-5 and newer network adapters with the mlx5_core kernel module, particularly in configurations where dynamic network interface management occurs.

Mitigation strategies for CVE-2021-47246 involve applying the kernel patch that resolves the improper resource cleanup in the mlx5e driver. System administrators should ensure their Linux kernels are updated to versions containing the fix, typically kernel versions 5.13 and later. The patch implements proper cleanup procedures that ensure firmware send queues are destroyed even when peer network devices are removed prematurely. Additionally, monitoring systems should be implemented to track memory usage patterns and detect potential resource leaks. In environments where immediate kernel updates are not feasible, administrators can implement workarounds such as avoiding dynamic unbinding of peer network devices during active hairpin flows or implementing more frequent memory management operations. The vulnerability demonstrates the importance of proper resource lifecycle management in kernel drivers and highlights the need for comprehensive testing of device removal scenarios in network stack implementations.

Reservation

04/10/2024

Disclosure

05/21/2024

Moderation

accepted

CPE

ready

EPSS

0.00225

KEV

no

Activities

very low

Sources

Do you know our Splunk app?

Download it now for free!