Subject: CVE-2024-27414: rtnetlink: fix error logic of IFLA_BRIDGE_FLAGS writing back

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

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

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

rtnetlink: fix error logic of IFLA_BRIDGE_FLAGS writing back

In the commit d73ef2d69c0d ("rtnetlink: let rtnl_bridge_setlink checks
IFLA_BRIDGE_MODE length"), an adjustment was made to the old loop logic
in the function `rtnl_bridge_setlink` to enable the loop to also check
the length of the IFLA_BRIDGE_MODE attribute. However, this adjustment
removed the `break` statement and led to an error logic of the flags
writing back at the end of this function.

if (have_flags)
    memcpy(nla_data(attr), &flags, sizeof(flags));
    // attr should point to IFLA_BRIDGE_FLAGS NLA !!!

Before the mentioned commit, the `attr` is granted to be IFLA_BRIDGE_FLAGS.
However, this is not necessarily true fow now as the updated loop will let
the attr point to the last NLA, even an invalid NLA which could cause
overflow writes.

This patch introduces a new variable `br_flag` to save the NLA pointer
that points to IFLA_BRIDGE_FLAGS and uses it to resolve the mentioned
error logic.

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

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

	Issue introduced in 5.4.253 with commit ad46d4861ed3 and fixed in 5.4.271 with commit b9fbc44159df
	Issue introduced in 5.10.190 with commit abb0172fa8dc and fixed in 5.10.212 with commit 882a51a10ecf
	Issue introduced in 5.15.126 with commit 047508edd602 and fixed in 5.15.151 with commit a1227b27fccc
	Issue introduced in 6.1.45 with commit 8dfac8071d58 and fixed in 6.1.81 with commit f2261eb994aa
	Issue introduced in 6.5 with commit d73ef2d69c0d and fixed in 6.6.21 with commit 167d8642daa6
	Issue introduced in 6.5 with commit d73ef2d69c0d and fixed in 6.7.9 with commit 831bc2728fb4
	Issue introduced in 6.5 with commit d73ef2d69c0d and fixed in 6.8 with commit 743ad091fb46
	Issue introduced in 6.4.10 with commit 00757f58e37b

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-27414
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:
	net/core/rtnetlink.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/b9fbc44159dfc3e9a7073032752d9e03f5194a6f
	https://git.kernel.org/stable/c/882a51a10ecf24ce135d573afa0872aef02c5125
	https://git.kernel.org/stable/c/a1227b27fcccc99dc44f912b479e01a17e2d7d31
	https://git.kernel.org/stable/c/f2261eb994aa5757c1da046b78e3229a3ece0ad9
	https://git.kernel.org/stable/c/167d8642daa6a44b51de17f8ff0f584e1e762db7
	https://git.kernel.org/stable/c/831bc2728fb48a8957a824cba8c264b30dca1425
	https://git.kernel.org/stable/c/743ad091fb46e622f1b690385bb15e3cd3daf874