{"id":6969,"date":"2026-09-04T18:49:22","date_gmt":"2026-09-04T10:49:22","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72342"},"modified":"2026-09-04T18:49:22","modified_gmt":"2026-09-04T10:49:22","slug":"cve-2026-72342","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72342","title":{"rendered":"CVE-2026-72342 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnet\/mlx5e: Fix HV VHC"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net\/mlx5e: Fix HV VHCA stats agent registration race<\/p>\n<p>mlx5e_hv_vhca_stats_create() registers the stats agent through<br \/>\nmlx5_hv_vhca_agent_create(). The helper publishes the agent in<br \/>\nhv_vhca-&gt;agents[type] under agents_lock and immediately schedules an<br \/>\nasynchronous control invalidation on the HV VHCA workqueue before<br \/>\nreturning to mlx5e.<\/p>\n<p>The asynchronous invalidation invokes the control agent&#8217;s invalidate<br \/>\ncallback, which reads the hypervisor control block and forwards the<br \/>\ncommand to mlx5e_hv_vhca_stats_control(). That callback may either:<\/p>\n<p>  &#8211; call cancel_delayed_work_sync(&amp;priv-&gt;stats_agent.work), or<br \/>\n  &#8211; call queue_delayed_work(priv-&gt;wq, &amp;sagent-&gt;work, sagent-&gt;delay).<\/p>\n<p>However, the delayed_work and priv-&gt;stats_agent.agent are only<br \/>\ninitialized after mlx5_hv_vhca_agent_create() returns to mlx5e:<\/p>\n<p>    agent = mlx5_hv_vhca_agent_create(&#8230;);   \/* publish + invalidate *\/<br \/>\n    &#8230;<br \/>\n    priv-&gt;stats_agent.agent = agent;          \/* too late *\/<br \/>\n    INIT_DELAYED_WORK(&amp;priv-&gt;stats_agent.work, &#8230;); \/* too late *\/<\/p>\n<p>If the asynchronous control path runs before the two assignments<br \/>\nabove, it can:<\/p>\n<p>  &#8211; Operate on an uninitialized delayed_work whose timer.function is<br \/>\n    NULL. queue_delayed_work() calls add_timer() unconditionally, so<br \/>\n    when the timer expires the timer softirq invokes a NULL function<br \/>\n    pointer.<br \/>\n  &#8211; Re-initialize the timer later through INIT_DELAYED_WORK() while<br \/>\n    the timer is already enqueued in the timer wheel, corrupting the<br \/>\n    hlist (entry.pprev cleared while the previous bucket node still<br \/>\n    points at this entry).<br \/>\n  &#8211; When the worker eventually runs, mlx5e_hv_vhca_stats_work() reads<br \/>\n    sagent-&gt;agent (NULL) and dereferences it inside<br \/>\n    mlx5_hv_vhca_agent_write().<\/p>\n<p>Fix this by:<\/p>\n<p>  &#8211; Initializing priv-&gt;stats_agent.work before invoking<br \/>\n    mlx5_hv_vhca_agent_create(), so the work is always in a valid<br \/>\n    state when the control callback observes it.<br \/>\n  &#8211; Adding a struct mlx5_hv_vhca_agent **ctx_update out-parameter<br \/>\n    to mlx5_hv_vhca_agent_create(). The helper writes the agent<br \/>\n    pointer to *ctx_update before publishing into hv_vhca-&gt;agents[]<br \/>\n    and triggering the agents_update flow, so any callback<br \/>\n    subsequently invoked from that flow already sees a valid<br \/>\n    priv-&gt;stats_agent.agent. This avoids having the control<br \/>\n    callback participate in agent initialization.<\/p>\n<p>While at it, access priv-&gt;stats_agent.agent with<br \/>\nREAD_ONCE()\/WRITE_ONCE() for the cross-CPU access with the worker, and<br \/>\nclear priv-&gt;stats_agent.buf on the agent_create() failure path.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>net\/mlx5e: Fix HV VHCA stats agent registration race<\/p>\n<p>mlx5e_hv_vhca_stats_create() registers the stats agent through<br \/>\nmlx5_hv_vhca_a<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-6969","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/6969","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6969"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6969"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6969"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}