In the Linux kernel, the following vulnerability has been resolved:
mlxsw: spectrum_buffers: Fix memory corruptions on Spectrum-4 systems
The following two shared buffer operations make use of the Shared Buffer Status Register (SBSR):
# devlink sb occupancy snapshot pci/0000:01:00.0 # devlink sb occupancy clearmax pci/0000:01:00.0
The register has two masks of 256 bits to denote on which ingress / egress ports the register should operate on. Spectrum-4 has more than 256 ports, so the register was extended by cited commit with a new 'port_page' field.
However, when filling the register's payload, the driver specifies the ports as absolute numbers and not relative to the first port of the port page, resulting in memory corruptions [1].
Fix by specifying the ports relative to the first port of the port page.
[1] BUG: KASAN: slab-use-after-free in mlxswspsboccsnapshot+0xb6d/0xbc0 Read of size 1 at addr ffff8881068cb00f by task devlink/1566 [...] Call Trace: <TASK> dumpstacklvl+0xc6/0x120 printreport+0xce/0x670 kasanreport+0xd7/0x110 mlxswspsboccsnapshot+0xb6d/0xbc0 mlxswdevlinksboccsnapshot+0x75/0xb0 devlinknlsboccsnapshotdoit+0x1f9/0x2a0 genlfamilyrcvmsgdoit+0x20c/0x300 genlrcvmsg+0x567/0x800 netlinkrcvskb+0x170/0x450 genlrcv+0x2d/0x40 netlinkunicast+0x547/0x830 netlinksendmsg+0x8d4/0xdb0 _syssendto+0x49b/0x510 _x64syssendto+0xe5/0x1c0 dosyscall64+0xc1/0x1d0 entrySYSCALL64afterhwframe+0x77/0x7f [...] Allocated by task 1: kasansavestack+0x33/0x60 kasansavetrack+0x14/0x30 _kasankmalloc+0x8f/0xa0 copyverifierstate+0xbc2/0xfb0 docheckcommon+0x2c51/0xc7e0 bpfcheck+0x5107/0x9960 bpfprogload+0xf0e/0x2690 _sysbpf+0x1a61/0x49d0 _x64sysbpf+0x7d/0xc0 dosyscall64+0xc1/0x1d0 entrySYSCALL64after_hwframe+0x77/0x7f
Freed by task 1: kasansavestack+0x33/0x60 kasansavetrack+0x14/0x30 kasansavefreeinfo+0x3b/0x60 poisonslabobject+0x109/0x170 _kasanslabfree+0x14/0x30 kfree+0xca/0x2b0 freeverifierstate+0xce/0x270 docheckcommon+0x4828/0xc7e0 bpfcheck+0x5107/0x9960 bpfprogload+0xf0e/0x2690 _sysbpf+0x1a61/0x49d0 _x64sysbpf+0x7d/0xc0 dosyscall64+0xc1/0x1d0 entrySYSCALL64afterhwframe+0x77/0x7f
[
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"165688361880750824408705860827472865995",
"26937718096808198193549141841293037039",
"52133251221378664218152231671291203997",
"176915631182903591465040375591919259246",
"48392601370673866128974558431011968566",
"243008863311696535302036218949831156151",
"26914975977354881268469832354862708557",
"110727778907292464747587548564159055117",
"85896044089255145995898072968393665410",
"52189224959443718174827586114776241056",
"132885359001889819116310865131695629354",
"19570784793969227899600676908135723546",
"309961660469345553732773836712376986180",
"288067170658814156793883825275075673920",
"177087437258319352566871225027547545596",
"318572335045382568037085666441592376075",
"12635676559791073554132273426984858202",
"209114031641244071074558143172482233859",
"106218662652893058242863236231897441835",
"57406832468633586335113515452802905528",
"269234933442753588458474354741257826979",
"19407883712375783899537274393171344774",
"109460049847815817592633856735222550714",
"52189224959443718174827586114776241056",
"132885359001889819116310865131695629354",
"19570784793969227899600676908135723546",
"309961660469345553732773836712376986180",
"288067170658814156793883825275075673920",
"290230680216910762817055435726333273962",
"39096103370015893115608228662903144629"
]
},
"id": "CVE-2024-42073-0e2d43e5",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bf8781ede7bd9a37c0fcabca78976e61300b5a1a",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c",
"function": "mlxsw_sp_sb_occ_snapshot"
},
"digest": {
"length": 1507.0,
"function_hash": "121846609874856236202854435173792836231"
},
"id": "CVE-2024-42073-162f2446",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bf8781ede7bd9a37c0fcabca78976e61300b5a1a",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c",
"function": "mlxsw_sp_sb_occ_max_clear"
},
"digest": {
"length": 1359.0,
"function_hash": "140631445355890531809385535789935150999"
},
"id": "CVE-2024-42073-3c55c3b1",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bfa86a96912faa0b6142a918db88cc0c738a769e",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"165688361880750824408705860827472865995",
"26937718096808198193549141841293037039",
"52133251221378664218152231671291203997",
"176915631182903591465040375591919259246",
"48392601370673866128974558431011968566",
"243008863311696535302036218949831156151",
"26914975977354881268469832354862708557",
"110727778907292464747587548564159055117",
"85896044089255145995898072968393665410",
"52189224959443718174827586114776241056",
"132885359001889819116310865131695629354",
"19570784793969227899600676908135723546",
"309961660469345553732773836712376986180",
"288067170658814156793883825275075673920",
"177087437258319352566871225027547545596",
"318572335045382568037085666441592376075",
"12635676559791073554132273426984858202",
"209114031641244071074558143172482233859",
"106218662652893058242863236231897441835",
"57406832468633586335113515452802905528",
"269234933442753588458474354741257826979",
"19407883712375783899537274393171344774",
"109460049847815817592633856735222550714",
"52189224959443718174827586114776241056",
"132885359001889819116310865131695629354",
"19570784793969227899600676908135723546",
"309961660469345553732773836712376986180",
"288067170658814156793883825275075673920",
"290230680216910762817055435726333273962",
"39096103370015893115608228662903144629"
]
},
"id": "CVE-2024-42073-57f8d54a",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bfa86a96912faa0b6142a918db88cc0c738a769e",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"165688361880750824408705860827472865995",
"26937718096808198193549141841293037039",
"52133251221378664218152231671291203997",
"176915631182903591465040375591919259246",
"48392601370673866128974558431011968566",
"243008863311696535302036218949831156151",
"26914975977354881268469832354862708557",
"110727778907292464747587548564159055117",
"85896044089255145995898072968393665410",
"52189224959443718174827586114776241056",
"132885359001889819116310865131695629354",
"19570784793969227899600676908135723546",
"309961660469345553732773836712376986180",
"288067170658814156793883825275075673920",
"177087437258319352566871225027547545596",
"318572335045382568037085666441592376075",
"12635676559791073554132273426984858202",
"209114031641244071074558143172482233859",
"106218662652893058242863236231897441835",
"57406832468633586335113515452802905528",
"269234933442753588458474354741257826979",
"19407883712375783899537274393171344774",
"109460049847815817592633856735222550714",
"52189224959443718174827586114776241056",
"132885359001889819116310865131695629354",
"19570784793969227899600676908135723546",
"309961660469345553732773836712376986180",
"288067170658814156793883825275075673920",
"290230680216910762817055435726333273962",
"39096103370015893115608228662903144629"
]
},
"id": "CVE-2024-42073-8e0d458e",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c28947de2bed40217cf256c5d0d16880054fcf13",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c",
"function": "mlxsw_sp_sb_occ_snapshot"
},
"digest": {
"length": 1507.0,
"function_hash": "121846609874856236202854435173792836231"
},
"id": "CVE-2024-42073-a069e666",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c28947de2bed40217cf256c5d0d16880054fcf13",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c",
"function": "mlxsw_sp_sb_occ_max_clear"
},
"digest": {
"length": 1359.0,
"function_hash": "140631445355890531809385535789935150999"
},
"id": "CVE-2024-42073-ad9f61ad",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bf8781ede7bd9a37c0fcabca78976e61300b5a1a",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c",
"function": "mlxsw_sp_sb_occ_snapshot"
},
"digest": {
"length": 1507.0,
"function_hash": "121846609874856236202854435173792836231"
},
"id": "CVE-2024-42073-db1c2e28",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bfa86a96912faa0b6142a918db88cc0c738a769e",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"165688361880750824408705860827472865995",
"26937718096808198193549141841293037039",
"52133251221378664218152231671291203997",
"176915631182903591465040375591919259246",
"48392601370673866128974558431011968566",
"243008863311696535302036218949831156151",
"26914975977354881268469832354862708557",
"110727778907292464747587548564159055117",
"85896044089255145995898072968393665410",
"52189224959443718174827586114776241056",
"132885359001889819116310865131695629354",
"19570784793969227899600676908135723546",
"309961660469345553732773836712376986180",
"288067170658814156793883825275075673920",
"177087437258319352566871225027547545596",
"318572335045382568037085666441592376075",
"12635676559791073554132273426984858202",
"209114031641244071074558143172482233859",
"106218662652893058242863236231897441835",
"57406832468633586335113515452802905528",
"269234933442753588458474354741257826979",
"19407883712375783899537274393171344774",
"109460049847815817592633856735222550714",
"52189224959443718174827586114776241056",
"132885359001889819116310865131695629354",
"19570784793969227899600676908135723546",
"309961660469345553732773836712376986180",
"288067170658814156793883825275075673920",
"290230680216910762817055435726333273962",
"39096103370015893115608228662903144629"
]
},
"id": "CVE-2024-42073-e21ad983",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@942901e0fc74ad4b7992ef7ca9336e68d5fd6d36",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c",
"function": "mlxsw_sp_sb_occ_snapshot"
},
"digest": {
"length": 1507.0,
"function_hash": "121846609874856236202854435173792836231"
},
"id": "CVE-2024-42073-e9dace71",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@942901e0fc74ad4b7992ef7ca9336e68d5fd6d36",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c",
"function": "mlxsw_sp_sb_occ_max_clear"
},
"digest": {
"length": 1359.0,
"function_hash": "140631445355890531809385535789935150999"
},
"id": "CVE-2024-42073-f3df3c5a",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c28947de2bed40217cf256c5d0d16880054fcf13",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c",
"function": "mlxsw_sp_sb_occ_max_clear"
},
"digest": {
"length": 1359.0,
"function_hash": "140631445355890531809385535789935150999"
},
"id": "CVE-2024-42073-fb1ac815",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@942901e0fc74ad4b7992ef7ca9336e68d5fd6d36",
"signature_version": "v1"
}
]