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
{ "vanir_signatures": [ { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bf8781ede7bd9a37c0fcabca78976e61300b5a1a", "signature_type": "Line", "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", "target": { "file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c" }, "deprecated": false, "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bf8781ede7bd9a37c0fcabca78976e61300b5a1a", "signature_type": "Function", "digest": { "function_hash": "121846609874856236202854435173792836231", "length": 1507.0 }, "id": "CVE-2024-42073-162f2446", "target": { "file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c", "function": "mlxsw_sp_sb_occ_snapshot" }, "deprecated": false, "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bfa86a96912faa0b6142a918db88cc0c738a769e", "signature_type": "Function", "digest": { "function_hash": "140631445355890531809385535789935150999", "length": 1359.0 }, "id": "CVE-2024-42073-3c55c3b1", "target": { "file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c", "function": "mlxsw_sp_sb_occ_max_clear" }, "deprecated": false, "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bfa86a96912faa0b6142a918db88cc0c738a769e", "signature_type": "Line", "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", "target": { "file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c" }, "deprecated": false, "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c28947de2bed40217cf256c5d0d16880054fcf13", "signature_type": "Line", "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", "target": { "file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c" }, "deprecated": false, "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c28947de2bed40217cf256c5d0d16880054fcf13", "signature_type": "Function", "digest": { "function_hash": "121846609874856236202854435173792836231", "length": 1507.0 }, "id": "CVE-2024-42073-a069e666", "target": { "file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c", "function": "mlxsw_sp_sb_occ_snapshot" }, "deprecated": false, "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bf8781ede7bd9a37c0fcabca78976e61300b5a1a", "signature_type": "Function", "digest": { "function_hash": "140631445355890531809385535789935150999", "length": 1359.0 }, "id": "CVE-2024-42073-ad9f61ad", "target": { "file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c", "function": "mlxsw_sp_sb_occ_max_clear" }, "deprecated": false, "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@bfa86a96912faa0b6142a918db88cc0c738a769e", "signature_type": "Function", "digest": { "function_hash": "121846609874856236202854435173792836231", "length": 1507.0 }, "id": "CVE-2024-42073-db1c2e28", "target": { "file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c", "function": "mlxsw_sp_sb_occ_snapshot" }, "deprecated": false, "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@942901e0fc74ad4b7992ef7ca9336e68d5fd6d36", "signature_type": "Line", "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", "target": { "file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c" }, "deprecated": false, "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@942901e0fc74ad4b7992ef7ca9336e68d5fd6d36", "signature_type": "Function", "digest": { "function_hash": "121846609874856236202854435173792836231", "length": 1507.0 }, "id": "CVE-2024-42073-e9dace71", "target": { "file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c", "function": "mlxsw_sp_sb_occ_snapshot" }, "deprecated": false, "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@c28947de2bed40217cf256c5d0d16880054fcf13", "signature_type": "Function", "digest": { "function_hash": "140631445355890531809385535789935150999", "length": 1359.0 }, "id": "CVE-2024-42073-f3df3c5a", "target": { "file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c", "function": "mlxsw_sp_sb_occ_max_clear" }, "deprecated": false, "signature_version": "v1" }, { "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@942901e0fc74ad4b7992ef7ca9336e68d5fd6d36", "signature_type": "Function", "digest": { "function_hash": "140631445355890531809385535789935150999", "length": 1359.0 }, "id": "CVE-2024-42073-fb1ac815", "target": { "file": "drivers/net/ethernet/mellanox/mlxsw/spectrum_buffers.c", "function": "mlxsw_sp_sb_occ_max_clear" }, "deprecated": false, "signature_version": "v1" } ] }