{"id":41113,"date":"2026-10-19T00:32:12","date_gmt":"2026-10-18T16:32:12","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98641"},"modified":"2026-10-19T00:32:12","modified_gmt":"2026-10-18T16:32:12","slug":"cve-2026-98641","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-98641","title":{"rendered":"CVE-2026-98641 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nbpf, arm64: set up th"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>bpf, arm64: set up the frame pointer for the exception callback<\/p>\n<p>A program acting as exception boundary saves all callee-saved registers,<br \/>\nso build_prologue() takes the exception_cb path and never calls<br \/>\npush_callee_regs(). That is the only place find_used_callee_regs() runs,<br \/>\nand with it the only place ctx-&gt;fp_used is set, so the callback prologue<br \/>\ndoes not emit the<\/p>\n<p>  mov x25, sp<\/p>\n<p>that points BPF_REG_FP at the frame the callback runs on. x25 keeps<br \/>\nwhatever it held when bpf_throw() was called. If the throw came from a<br \/>\nsubprogram that uses its own BPF stack, that is the subprogram&#8217;s frame<br \/>\npointer, and since the subprogram never returns it never restores x25<br \/>\neither.<\/p>\n<p>Stack accesses through BPF_REG_FP are rewritten to be stack pointer<br \/>\nrelative, so those still land in the callback&#8217;s own frame. Materializing<br \/>\nthe register does not: a callback that passes the address of a local<br \/>\nvariable to a helper hands over an address in the dead subprogram&#8217;s<br \/>\nframe. That address is below the callback&#8217;s stack pointer by then, and<br \/>\nthe helper&#8217;s own call chain covers it, so the helper can write over its<br \/>\nown return address. 0x1234 below is the value the helper was asked to<br \/>\nstore:<\/p>\n<p>  pc : 0x1234<br \/>\n  lr : 0x1234<br \/>\n  Call trace:<br \/>\n   0x1234 (P)<br \/>\n   bpf_test_run+0x188\/0x3e0<br \/>\n   bpf_prog_test_run_skb+0x47c\/0x998<br \/>\n   __sys_bpf+0xbdc\/0xdd8<br \/>\n  Kernel panic &#8211; not syncing: Oops: Fatal exception in interrupt<\/p>\n<p>Set ctx-&gt;fp_used on the exception callback path so that the existing code<br \/>\nfurther down sets x25 from the stack pointer. The epilogue restores it<br \/>\nfrom the main program&#8217;s save area along with the other callee-saved<br \/>\nregisters, as it already does. x86 sets the frame pointer for the<br \/>\ncallback from the argument it is passed, and powerpc computes it from<br \/>\nthe stack pointer.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>bpf, arm64: set up the frame pointer for the exception callback<\/p>\n<p>A program acting as exception boundary saves all callee-saved regi<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-41113","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/41113","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=41113"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=41113"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=41113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}