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).
{ "vanir_signatures": [ { "signature_version": "v1", "signature_type": "Function", "target": { "file": "drivers/net/ethernet/intel/idpf/idpf_lib.c", "function": "idpf_vport_open" }, "deprecated": false, "digest": { "length": 2686.0, "function_hash": "36563425255359596594997645580294420389" }, "id": "CVE-2024-44932-28c66752", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@290f1c033281c1a502a3cd1c53c3a549259c491f" }, { "signature_version": "v1", "signature_type": "Line", "target": { "file": "drivers/net/ethernet/intel/idpf/idpf_lib.c" }, "deprecated": false, "digest": { "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" ], "threshold": 0.9 }, "id": "CVE-2024-44932-299eaa79", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@290f1c033281c1a502a3cd1c53c3a549259c491f" }, { "signature_version": "v1", "signature_type": "Line", "target": { "file": "drivers/net/ethernet/intel/idpf/idpf_txrx.c" }, "deprecated": false, "digest": { "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" ], "threshold": 0.9 }, "id": "CVE-2024-44932-2ccc1bce", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3cde714b0e77206ed1b5cf31f28c18ba9ae946fd" }, { "signature_version": "v1", "signature_type": "Function", "target": { "file": "drivers/net/ethernet/intel/idpf/idpf_txrx.c", "function": "idpf_vport_intr_rel" }, "deprecated": false, "digest": { "length": 1059.0, "function_hash": "125014287349615134962031316022138943902" }, "id": "CVE-2024-44932-449e26a0", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3cde714b0e77206ed1b5cf31f28c18ba9ae946fd" }, { "signature_version": "v1", "signature_type": "Function", "target": { "file": "drivers/net/ethernet/intel/idpf/idpf_txrx.c", "function": "idpf_vport_intr_rel" }, "deprecated": false, "digest": { "length": 1147.0, "function_hash": "33308143778918552139592988825183058150" }, "id": "CVE-2024-44932-489d864d", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@290f1c033281c1a502a3cd1c53c3a549259c491f" }, { "signature_version": "v1", "signature_type": "Line", "target": { "file": "drivers/net/ethernet/intel/idpf/idpf_lib.c" }, "deprecated": false, "digest": { "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" ], "threshold": 0.9 }, "id": "CVE-2024-44932-77451faf", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3cde714b0e77206ed1b5cf31f28c18ba9ae946fd" }, { "signature_version": "v1", "signature_type": "Line", "target": { "file": "drivers/net/ethernet/intel/idpf/idpf_txrx.c" }, "deprecated": false, "digest": { "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" ], "threshold": 0.9 }, "id": "CVE-2024-44932-d3480500", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@290f1c033281c1a502a3cd1c53c3a549259c491f" }, { "signature_version": "v1", "signature_type": "Function", "target": { "file": "drivers/net/ethernet/intel/idpf/idpf_lib.c", "function": "idpf_vport_open" }, "deprecated": false, "digest": { "length": 2686.0, "function_hash": "36563425255359596594997645580294420389" }, "id": "CVE-2024-44932-f4aead61", "source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3cde714b0e77206ed1b5cf31f28c18ba9ae946fd" } ] }