CVE-2026-98641 in Linux
Tóm tắt
Bởi VulDB • 19/10/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
bpf, arm64: thiết lập con trỏ khung (frame pointer) cho callback ngoại lệ
Một chương trình đóng vai trò là ranh giới ngoại lệ sẽ lưu trữ tất cả các thanh ghi callee-saved, do đó hàm build_prologue() đi theo đường dẫn exception_cb và không bao giờ gọi push_callee_regs(). Đó là nơi duy nhất find_used_callee_regs() chạy, và cũng là nơi duy nhất ctx->fp_used được gán giá trị, vì vậy phần mở đầu (prologue) của callback không phát ra lệnh
mov x25, sp
điểm BPF_REG_FP đến khung mà callback đang thực thi. Thanh ghi x25 giữ nguyên giá trị nó đã có khi bpf_throw() được gọi. Nếu lệnh throw xuất hiện từ một subprogram sử dụng ngăn xếp (stack) riêng của chính nó, thì đó là con trỏ khung của subprogram, và vì subprogram không bao giờ trả về nên cũng không khôi phục lại x25.
Các truy cập vào ngăn-stack thông qua BPF_REG_FP được viết lại để tương đối với con trỏ ngăn-stack, do đó chúng vẫn nằm trong chính khung của callback. Tuy nhiên, việc hiện thực hóa (materializing) thanh ghi thì không: một callback truyền địa chỉ của biến cục bộ cho helper sẽ chuyển giao một địa chỉ thuộc khung của subprogram đã chết (dead). Địa chỉ này lúc đó thấp hơn con trỏ ngăn-stack của callback, và chuỗi gọi (call chain) riêng của helper bao phủ nó, do đó helper có thể ghi đè lên địa chỉ trả về của chính nó. 0x1234 bên dưới là giá trị mà helper được yêu cầu lưu trữ:
pc : 0x1234 lr : 0x1234 Call trace: 0x1234 (P) bpf_test_run+0x188/0x3e0 bpf_prog_test_run_skb+0x47c/0x998 __sys_bpf+0xbdc/0xdd8 Kernel panic - not syncing: Oops: Fatal exception in interrupt
Thiết lập ctx->fp_used trên đường dẫn callback ngoại lệ để mã hiện có ở phía dưới thiết lập x25 từ con trỏ ngăn-stack. Phần kết thúc (epilogue) sẽ khôi phục nó từ vùng lưu trữ của chương trình chính cùng với các thanh ghi callee-saved khác, như cách nó đã làm trước đây. Kiến trúc x86 đặt con trỏ khung cho callback dựa trên đối số được truyền vào, và powerpc tính toán nó từ con trỏ ngăn-stack.
If you want to get best quality of vulnerability data, you may have to visit VulDB.