In the Linux kernel, the following vulnerability has been resolved:
idpf: fix UAFs when destroying the queues
The second tagged commit started sometimes (very rarely, but possible) throwing WARNs from net/core/pagepool.c:pagepooldisabledirectrecycling(). Turned out idpf frees interrupt vectors with embedded NAPIs *before* freeing the queues making pagepools' NAPI pointers lead to freed memory before these pools are destroyed by libeth. It's not clear whether there are other accesses to the freed vectors when destroying the queues, but anyway, we usually free queue/interrupt vectors only when the queues are destroyed and the NAPIs are guaranteed to not be referenced anywhere.
Invert the allocation and freeing logic making queue/interrupt vectors be allocated first and freed last. Vectors don't require queues to be present, so this is safe. Additionally, this change allows to remove that useless queue->q_vector pointer cleanup, as vectors are still valid when freeing the queues (+ both are freed within one function, so it's not clear why nullify the pointers at all).
[
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/intel/idpf/idpf_lib.c",
"function": "idpf_vport_open"
},
"digest": {
"length": 2686.0,
"function_hash": "36563425255359596594997645580294420389"
},
"id": "CVE-2024-44932-28c66752",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@290f1c033281c1a502a3cd1c53c3a549259c491f",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/intel/idpf/idpf_lib.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"295872647202067253590382813641949086514",
"65601058727302996810922932719495873472",
"157192107458557070938452989335796468300",
"184736190622058705728180465035056567594",
"222547098562638583029765904194089014917",
"142627339053569932191506502708248920480",
"195673668422787889403356008031242597114",
"862482697101061647123776001143411575",
"233329566787867206475393299484427837132",
"137995437800225432908927523203082822523",
"168466447570086757334858790706476276624",
"291969114033959908832451535287885428520",
"61303521773411843291803609178751988411",
"326323616656404037943233420326501403857",
"146666112580981547924107374217098781865",
"325167836178765253531938835736828477611",
"192244529648406038514568406050341416283",
"329041017967844585165897468514098899881",
"278482789571796537937199605529645980160",
"274531633592406114346432594962839688646",
"40347396389937973739770850518179401277",
"273073244553248358016059163214527058385",
"151354558343021284942029249394448836817",
"217924812915511677812060764955053206607",
"297716149051902177506011453295928201931",
"200810986254132125542763389120381113021",
"39336577310514381080081511967347303668",
"155471422002168372074683919862353657704",
"41020177449348272513405350419286856680",
"213611547372550248416447388196029776468",
"24325263712544207761948310681170527079",
"180099879507073038992423393210914722000",
"35843028237075342653609285789343118306",
"131879864846371543796703544841549679898",
"281101184682963657743509073862390959328",
"59390529677980290598502487197244488608",
"131209553116067581951869212149009334343",
"36747164327222320112963772213553007330",
"2651397222558681228131223398845552658",
"114843154077313414719570883253063117690",
"292827251067102987254990950428242967277",
"70332846653565883877264771350853876070",
"232331386048316838058453226777927018581",
"97608063869834079570108097712843781540",
"53639375456040062425980425345617240352",
"219122480015553581417184978395150982989",
"46442335541926416212507022231660097076"
]
},
"id": "CVE-2024-44932-299eaa79",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@290f1c033281c1a502a3cd1c53c3a549259c491f",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/intel/idpf/idpf_txrx.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"309481379748136551890726642875446610757",
"182660687752710408386037543155276088807",
"43513994747275479477944620402583862524",
"8680673775192263653341218025467572037",
"210845876388021792282231471629821605236",
"101066894631757908977071861068938953398",
"338803665038858152576556725746943961691",
"261444709806754224504900519134319091637",
"89750151764313838539718012841645335148",
"49229721203310441905638228074922155252",
"212598703380951299749809503125371959184",
"412989406086226739864320507328291165",
"134489526921770627546699659095800726416",
"178062460698119933579203139626692049490",
"6804984610513436087625908026090710369",
"135203961388418171766504485124933816763",
"238795962215637638374256537440500295877",
"72565962301230629364332568531202928252",
"253401056124878422326595357386493537816",
"194886076548597625618460147547758751232",
"227858445144558570742190482876687536151",
"131981795048245702890732047691820074863",
"93566295888000306521468818422738326437",
"171405116512349667481745956893271560886"
]
},
"id": "CVE-2024-44932-2ccc1bce",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3cde714b0e77206ed1b5cf31f28c18ba9ae946fd",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/intel/idpf/idpf_txrx.c",
"function": "idpf_vport_intr_rel"
},
"digest": {
"length": 1059.0,
"function_hash": "125014287349615134962031316022138943902"
},
"id": "CVE-2024-44932-449e26a0",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3cde714b0e77206ed1b5cf31f28c18ba9ae946fd",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/intel/idpf/idpf_txrx.c",
"function": "idpf_vport_intr_rel"
},
"digest": {
"length": 1147.0,
"function_hash": "33308143778918552139592988825183058150"
},
"id": "CVE-2024-44932-489d864d",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@290f1c033281c1a502a3cd1c53c3a549259c491f",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/intel/idpf/idpf_lib.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"295872647202067253590382813641949086514",
"65601058727302996810922932719495873472",
"157192107458557070938452989335796468300",
"184736190622058705728180465035056567594",
"222547098562638583029765904194089014917",
"142627339053569932191506502708248920480",
"195673668422787889403356008031242597114",
"862482697101061647123776001143411575",
"233329566787867206475393299484427837132",
"137995437800225432908927523203082822523",
"168466447570086757334858790706476276624",
"291969114033959908832451535287885428520",
"61303521773411843291803609178751988411",
"326323616656404037943233420326501403857",
"146666112580981547924107374217098781865",
"325167836178765253531938835736828477611",
"192244529648406038514568406050341416283",
"329041017967844585165897468514098899881",
"278482789571796537937199605529645980160",
"274531633592406114346432594962839688646",
"40347396389937973739770850518179401277",
"273073244553248358016059163214527058385",
"151354558343021284942029249394448836817",
"217924812915511677812060764955053206607",
"297716149051902177506011453295928201931",
"200810986254132125542763389120381113021",
"39336577310514381080081511967347303668",
"155471422002168372074683919862353657704",
"41020177449348272513405350419286856680",
"213611547372550248416447388196029776468",
"24325263712544207761948310681170527079",
"180099879507073038992423393210914722000",
"35843028237075342653609285789343118306",
"131879864846371543796703544841549679898",
"281101184682963657743509073862390959328",
"59390529677980290598502487197244488608",
"131209553116067581951869212149009334343",
"36747164327222320112963772213553007330",
"2651397222558681228131223398845552658",
"114843154077313414719570883253063117690",
"292827251067102987254990950428242967277",
"70332846653565883877264771350853876070",
"232331386048316838058453226777927018581",
"97608063869834079570108097712843781540",
"53639375456040062425980425345617240352",
"219122480015553581417184978395150982989",
"46442335541926416212507022231660097076"
]
},
"id": "CVE-2024-44932-77451faf",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3cde714b0e77206ed1b5cf31f28c18ba9ae946fd",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/intel/idpf/idpf_txrx.c"
},
"digest": {
"threshold": 0.9,
"line_hashes": [
"309481379748136551890726642875446610757",
"182660687752710408386037543155276088807",
"43513994747275479477944620402583862524",
"86436969844407146717183258578692944134",
"224430865077033526694065117636429392109",
"310230614868925293812861672156429054791",
"253713928771351097081779181306870137810",
"261444709806754224504900519134319091637",
"89750151764313838539718012841645335148",
"49229721203310441905638228074922155252",
"212598703380951299749809503125371959184",
"412989406086226739864320507328291165",
"134489526921770627546699659095800726416",
"178062460698119933579203139626692049490",
"6804984610513436087625908026090710369",
"135203961388418171766504485124933816763",
"238795962215637638374256537440500295877",
"72565962301230629364332568531202928252",
"253401056124878422326595357386493537816",
"194886076548597625618460147547758751232",
"227858445144558570742190482876687536151",
"131981795048245702890732047691820074863",
"93566295888000306521468818422738326437",
"171405116512349667481745956893271560886"
]
},
"id": "CVE-2024-44932-d3480500",
"signature_type": "Line",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@290f1c033281c1a502a3cd1c53c3a549259c491f",
"signature_version": "v1"
},
{
"deprecated": false,
"target": {
"file": "drivers/net/ethernet/intel/idpf/idpf_lib.c",
"function": "idpf_vport_open"
},
"digest": {
"length": 2686.0,
"function_hash": "36563425255359596594997645580294420389"
},
"id": "CVE-2024-44932-f4aead61",
"signature_type": "Function",
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3cde714b0e77206ed1b5cf31f28c18ba9ae946fd",
"signature_version": "v1"
}
]