CVE-2024-35917 in Linux
Tóm tắt
Bởi VulDB • 17/06/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
s390/bpf: Sửa lỗi số học con trỏ bpf_plt
Kui-Feng Lee đã báo cáo một sự cố treo hệ thống (crash) trên s390x do bài kiểm tra dummy_st_ops/dummy_init_ptr_arg [1] kích hoạt:
[] 0x2
[] bpf_struct_ops_test_run+0x156/0x250
[] __sys_bpf+0xa1a/0xd00
[] __s390x_sys_bpf+0x44/0x50
[] __do_syscall+0x244/0x300
[] system_call+0x70/0x98
Nguyên nhân là do GCC di chuyển lệnh gọi memcpy() sau các phép gán trong bpf_jit_plt(), dẫn đến việc các con trỏ NULL được ghi thay vì địa chỉ trả về và địa chỉ đích.
Khi xem xét các thành phần nội bộ của GCC, việc sắp xếp lại này được cho phép vì phân tích alias (alias analysis) cho rằng đích của memcpy() và vế trái của các phép gán dựa trên các đối tượng khác nhau: new_plt và bpf_plt_ret/bpf_plt_target tương ứng, do đó chúng không thể alias nhau.
Điều này lại bắt nguồn từ một vi phạm tiêu chuẩn C:
Khi hai con trỏ được trừ cho nhau, cả hai phải trỏ đến các phần tử của cùng một đối tượng mảng, hoặc một phần tử sau phần tử cuối cùng của đối tượng mảng ...
Xét từ góc độ ngôn ngữ C, bpf_plt_ret và bpf_plt là các đối tượng riêng biệt và không thể thực hiện phép trừ giữa chúng. Về mặt thực tế, việc làm như vậy khiến phân tích alias của GCC bị nhầm lẫn.
Mã nguồn được viết theo cách này nhằm mục đích để phía C biết một số độ lệch (offsets) được định nghĩa trong mã assembly. Mặc dù điều này khá tiện lợi, nhưng nó không hề bắt buộc. Khắc phục vi phạm này bằng cách mã hóa cứng (hardcode) các độ lệch này.
[1] https://lore.kernel.org/bpf/[email protected]/
VulDB is the best source for vulnerability data and more expert information about this specific topic.