Subject: CVE-2024-50041: i40e: Fix macvlan leak by synchronizing access to mac_filter_hash

From: Greg Kroah-Hartman <[email-masked]>

Description
===========

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

i40e: Fix macvlan leak by synchronizing access to mac_filter_hash

This patch addresses a macvlan leak issue in the i40e driver caused by
concurrent access to vsi->mac_filter_hash. The leak occurs when multiple
threads attempt to modify the mac_filter_hash simultaneously, leading to
inconsistent state and potential memory leaks.

To fix this, we now wrap the calls to i40e_del_mac_filter() and zeroing
vf->default_lan_addr.addr with spin_lock/unlock_bh(&vsi->mac_filter_hash_lock),
ensuring atomic operations and preventing concurrent access.

Additionally, we add lockdep_assert_held(&vsi->mac_filter_hash_lock) in
i40e_add_mac_filter() to help catch similar issues in the future.

Reproduction steps:
1. Spawn VFs and configure port vlan on them.
2. Trigger concurrent macvlan operations (e.g., adding and deleting
	portvlan and/or mac filters).
3. Observe the potential memory leak and inconsistent state in the
	mac_filter_hash.

This synchronization ensures the integrity of the mac_filter_hash and prevents
the described leak.

The Linux kernel CVE team has assigned CVE-2024-50041 to this issue.

Affected and fixed versions
===========================

	Issue introduced in 5.15.54 with commit ddec6cbbe227 and fixed in 5.15.168 with commit 9db6ce9e2738
	Issue introduced in 5.19 with commit fed0d9f13266 and fixed in 6.1.113 with commit 9a9747288ba0
	Issue introduced in 5.19 with commit fed0d9f13266 and fixed in 6.6.57 with commit 703c4d820b31
	Issue introduced in 5.19 with commit fed0d9f13266 and fixed in 6.11.4 with commit 8831abff1bd5
	Issue introduced in 5.19 with commit fed0d9f13266 and fixed in 6.12-rc3 with commit dac6c7b3d337
	Issue introduced in 5.18.11 with commit 8bfcbaa37969

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2024-50041
will be updated if fixes are backported, please check that for the most
up to date information about this issue.

Affected files
==============

The file(s) affected by this issue are:
	drivers/net/ethernet/intel/i40e/i40e_main.c
	drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c

Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/9db6ce9e2738b05a3672aff4d42169cf3bb5a3e3
	https://git.kernel.org/stable/c/9a9747288ba0a9ad4f5c9877f18dd245770ad64e
	https://git.kernel.org/stable/c/703c4d820b31bcadf465288d5746c53445f02a55
	https://git.kernel.org/stable/c/8831abff1bd5b6bc8224f0c0671f46fbd702b5b2
	https://git.kernel.org/stable/c/dac6c7b3d33756d6ce09f00a96ea2ecd79fae9fb