blob: a109b3c3ba8c6266ab2c1ca92875196b9d31605f [file] [log] [blame]
From bippy-5f407fcff5a0 Mon Sep 17 00:00:00 2001
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: <linux-cve-announce@vger.kernel.org>
Reply-to: <cve@kernel.org>, <linux-kernel@vger.kernel.org>
Subject: CVE-2024-27414: rtnetlink: fix error logic of IFLA_BRIDGE_FLAGS writing back
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 ad46d4861ed36315d3d9e838723ba3e367ecc042 and fixed in 5.4.271 with commit b9fbc44159dfc3e9a7073032752d9e03f5194a6f
Issue introduced in 5.10.190 with commit abb0172fa8dc4a4ec51aa992b7269ed65959f310 and fixed in 5.10.212 with commit 882a51a10ecf24ce135d573afa0872aef02c5125
Issue introduced in 5.15.126 with commit 047508edd602921ee8bb0f2aa2100aa2e9bedc75 and fixed in 5.15.151 with commit a1227b27fcccc99dc44f912b479e01a17e2d7d31
Issue introduced in 6.1.45 with commit 8dfac8071d58447e5cace4c4c6fe493ce2f615f6 and fixed in 6.1.81 with commit f2261eb994aa5757c1da046b78e3229a3ece0ad9
Issue introduced in 6.5 with commit d73ef2d69c0dba5f5a1cb9600045c873bab1fb7f and fixed in 6.6.21 with commit 167d8642daa6a44b51de17f8ff0f584e1e762db7
Issue introduced in 6.5 with commit d73ef2d69c0dba5f5a1cb9600045c873bab1fb7f and fixed in 6.7.9 with commit 831bc2728fb48a8957a824cba8c264b30dca1425
Issue introduced in 6.5 with commit d73ef2d69c0dba5f5a1cb9600045c873bab1fb7f and fixed in 6.8 with commit 743ad091fb46e622f1b690385bb15e3cd3daf874
Issue introduced in 6.4.10 with commit 00757f58e37b2d9a6f99e15be484712390cd2bab
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