{"id":6787,"date":"2026-09-04T18:49:17","date_gmt":"2026-09-04T10:49:17","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72121"},"modified":"2026-09-04T18:49:17","modified_gmt":"2026-09-04T10:49:17","slug":"cve-2026-72121","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-72121","title":{"rendered":"CVE-2026-72121 [HIGH] &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\ncan: bcm: add locking"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>can: bcm: add locking when updating filter and timer values<\/p>\n<p>KCSAN detected a simultaneous access to timer values that can be<br \/>\noverwritten in bcm_rx_setup() when updating timer and filter content<br \/>\nwhile bcm_rx_handler(), bcm_rx_timeout_handler() or bcm_rx_thr_handler()<br \/>\nrun concurrently on incoming CAN traffic.<\/p>\n<p>Protect the timer (ival1\/ival2\/kt_ival1\/kt_ival2\/kt_lastmsg) and filter<br \/>\n(nframes\/flags\/frames\/last_frames) updates in bcm_rx_setup() with a new<br \/>\nper-op bcm_rx_update_lock, taken with the matching scope in the RX<br \/>\nhandlers. memcpy_from_msg() is staged into a temporary buffer before the<br \/>\nlock is taken, since it can sleep and must not run under a spinlock.<\/p>\n<p>hrtimer_cancel() is always called without bcm_rx_update_lock held, since<br \/>\nbcm_rx_timeout_handler()\/bcm_rx_thr_handler() take the same lock and a<br \/>\nrunning callback would otherwise deadlock against the canceller.<\/p>\n<p>Also close a related race: bcm_rx_setup() cleared the RTR flag in the<br \/>\nstored reply frame&#8217;s can_id as a separate, unprotected step after the<br \/>\nframe content was already installed, so a concurrent bcm_rx_handler()<br \/>\ncould transmit a stale reply with CAN_RTR_FLAG still set. Fold that<br \/>\nnormalization into the initial frame preparation instead (on the staged<br \/>\nbuffer for updates, directly on op-&gt;frames pre-registration for new<br \/>\nops), so the installed frame is always atomically self-consistent.<\/p>\n<p>bcm_rx_handler()&#8217;s RX_RTR_FRAME check now takes a lock-protected<br \/>\nsnapshot of op-&gt;flags before deciding whether to call bcm_can_tx(),<br \/>\nbut does not hold the lock across that call.<\/p>\n<p>Also take a lock-protected snapshot of the currframe in bcm_can_tx()<br \/>\nto avoid partly overwrites by content updates in bcm_tx_setup().<br \/>\nFinally check if a TX_RESET_MULTI_IDX\/SETTIMER might have reset<br \/>\nop-&gt;currframe between the two locked sections in bcm_can_tx().<\/p>\n<p>Omit calling hrtimer_forward() with zero interval in bcm_rx_thr_handler().<br \/>\nkt_ival2 may have been concurrently cleared by bcm_rx_setup() before it<br \/>\ncancels this timer, so check kt_ival2 inside the bcm_rx_update_lock.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>can: bcm: add locking when updating filter and timer values<\/p>\n<p>KCSAN detected a simultaneous access to timer values that can be<br \/>\noverw<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-6787","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/6787","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=6787"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=6787"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=6787"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}