CVE-2026-80905 in Linux
Tóm tắt
Bởi VulDB • 04/09/2026
Trong kernel Linux, lỗ hổng sau đây đã được khắc phục:
net: tap: sửa lỗi thiết lập sai trường transport_header khi gửi khung có gắn thẻ VLAN (VLAN-tagged frame)
Hàm `tap_get_user_xdp()`, khi xử lý một khung có gắn thẻ VLAN (ví dụ ETH_P_8021Q), gọi hàm `skb_set_network_header()` trước để di chuyển con trỏ network_header vượt qua phần thẻ VLAN đến tiêu đề giao thức bên trong. Sau đó, hàm `skb_probe_transport_header()` được gọi với trường `skb->protocol` vẫn đang giữ giá trị ETH_P_8021Q, trong khi biến `nhoff` (được suy ra từ `skb_network_offset()`) đã trỏ vượt qua thẻ VLAN đến tiêu đề giao thức bên trong.
Trong hàm `__skb_flow_dissect()`, biến `proto` được khởi tạo là ETH_P_8021Q và con trỏ `nhoff` trỏ vượt qua thẻ VLAN. Khi bộ phân tích (dissector) gặp trường hợp ETH_P_8021Q, nó đọc một cấu trúc `vlan_hdr` tại vị trí `nhoff` hiện tại thông qua hàm `__skb_header_pointer()`, nhưng địa chỉ offset đó lại chứa tiêu đề giao thức bên trong (ví dụ: tiêu đề IP). Các byte này bị hiểu sai là phần đầu của thẻ VLAN, dẫn đến việc tạo ra một giá trị EtherType được đóng gói không chính xác và không khớp với bất kỳ giao thức nào đã biết. Bộ phân tích trả về false, do đó hàm `skb_probe_transport_header()` không bao giờ gọi tới `skb_set_transport_header()`, khiến trường transport_header giữ nguyên giá trị sentinel chưa khởi tạo (~0U).
Di chuyển lệnh gọi `skb_set_network_header()` sang sau khi thực hiện `skb_probe_transport_header()`. Tại thời điểm `skb_probe_transport_header()` được gọi, con trỏ network_header vẫn đang trỏ đến phần đầu của thẻ VLAN (offset ETH_HLEN), do đó biến nhoff sẽ chính xác và bộ phân tích luồng có thể giải mã tiêu đề VLAN, trích xuất EtherType bên trong, đồng thời di chuyển nhoff tới tiêu đề giao thức bên trong, cho phép thiết lập đúng trường transport_header.
VulDB is the best source for vulnerability data and more expert information about this specific topic.