{"id":"CVE-2026-98950","kind":"vulnerability","aliases":["CVE-2026-98950"],"related":[],"title":"Linux kernel: BPF flow dissector truncates header length, misreads packet offsets","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nflow_dissector: avoid u16 truncation of hlen in bpf_flow_dissect()\n\nbpf_flow_dissect() sanitizes the offsets returned by the BPF program\nwith clamp_t(u16, ..., hlen).\n\nIf hlen is bigger than 65535, the upper bound is truncated before\nthe comparison. For instance, with hlen == 65536, both nhoff and\nthoff are forced to zero, even if the program returned sane values.\n\nThis is the same class of bug as the one fixed in commit 99bda1ecbd56\n(\"flow_dissector: avoid u16 truncation of skb->len when computing\nthoff\"). That fix does not cover the BPF path, because\n__skb_flow_dissect() returns early when a BPF flow dissector\nhandles the packet.\n\nstruct bpf_flow_keys stores nhoff and thoff as u16, so cap hlen\nto U16_MAX before clamping.\n\nFound by sashiko while reviewing the commit above.","summary":"In the Linux kernel's BPF flow dissector, the header-length bound is truncated to 16 bits before clamping, so packets longer than 65535 bytes get their offsets forced to zero. The sources do not describe an attacker-controlled outcome beyond incorrect packet dissection.","severity":"unknown","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["bpf","linux-kernel","networking","runtime"],"not_affected_if":["no-bpf-flow-dissector"],"how_to_check":"- `uname -r` and compare the running kernel to the fixed upstream kernel release listed in the NVD entry\n- Check whether BPF flow dissector programs are loaded with `bpftool prog show` (unknown whether this affects your setup)","fix":"- Update the Linux kernel to a release that includes the upstream commit that caps hlen to U16_MAX (exact fixed version: unknown)","status":"open","published_at":"2026-10-23T13:17:16+00:00","first_seen_at":"2026-10-23T21:57:33+00:00","triaged_at":"2026-10-25T04:57:55+00:00","updated_at":"2026-10-25T04:57:55+00:00","category":"runtime","confidence":0.5,"triage":{"at":"2026-10-25T04:57:55Z","model":"claude-haiku-5-5","output":{"fix":"- Update the Linux kernel to a release that includes the upstream commit that caps hlen to U16_MAX (exact fixed version: unknown)","reach":"network","title":"Linux kernel: BPF flow dissector truncates header length, misreads packet offsets","impact":"low","summary":"In the Linux kernel's BPF flow dissector, the header-length bound is truncated to 16 bits before clamping, so packets longer than 65535 bytes get their offsets forced to zero. The sources do not describe an attacker-controlled outcome beyond incorrect packet dissection.","category":"runtime","nicknames":[],"who_cares":["linux-kernel","bpf","networking"],"confidence":0.5,"needs_auth":"unknown","worst_case":"packet offsets are wrong for oversized packets, possibly misdirecting flow handling","analyst_note":"Check the NVD entry and the linked upstream kernel commit for the fixed kernel versions and whether any security impact beyond incorrect dissection is confirmed.","how_to_check":"- `uname -r` and compare the running kernel to the fixed upstream kernel release listed in the NVD entry\n- Check whether BPF flow dissector programs are loaded with `bpftool prog show` (unknown whether this affects your setup)","needs_analyst":true,"not_affected_if":["no-bpf-flow-dissector"],"who_is_affected":"Systems running a Linux kernel with a BPF flow dissector program attached to packet processing, typically those using flow-dissection BPF for custom packet steering or monitoring. Systems that do not load BPF flow dissector programs are unlikely to be affected; the sources do not say more.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"low"},"cost_usd":0.000659,"input_tokens":3557,"output_tokens":607,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-2026':13A,16A '-98950':14A,17A '16':40B '65535':48B,112C '65536':125C '99bda1ecbd56':154C 'attack':63B 'attacker-control':62B 'avoid':82C,157C 'beyond':66B 'bigger':110C 'bit':41B 'bound':36B,115C 'bpf':3A,18B,29B,88C,91C,100C,172C,182C,189C 'bug':147C 'byte':49B 'cap':199C 'clamp':43B,103C,205C 'class':145C 'commit':153C,212C 'comparison':120C 'comput':164C 'control':64B 'cover':170C 'cve':12A,15A 'describ':60B 'dissect':69B,90C,93C,177C 'dissector':5A,31B,81C,156C,184C 'earli':179C 'even':134C 'fix':151C,167C 'flow':4A,30B,80C,89C,92C,155C,176C,183C,190C 'follow':75C 'forc':53B,131C 'found':206C 'get':50B 'handl':185C 'header':7A,34B 'header-length':33B 'hlen':86C,106C,108C,124C,200C 'incorrect':67B 'instanc':122C 'kernel':2A,21B,27B,73C 'key':191C 'len':162C 'length':8A,35B 'linux':1A,20B,26B,72C 'linux-kernel':19B 'longer':46B 'max':203C 'misread':9A 'network':22B 'nhoff':127C,193C 'offset':11A,52B,96C 'one':150C 'outcom':65B 'packet':10A,45B,68B,187C 'path':173C 'program':101C,137C 'resolv':79C 'return':97C,138C,178C 'review':210C 'runtim':23B 'sane':139C 'sanit':94C 'sashiko':208C 'skb':161C,175C 'sourc':57B 'store':192C 'struct':188C 'thoff':129C,165C,195C 'truncat':6A,38B,84C,117C,159C 'u16':83C,105C,158C,197C,202C 'upper':114C 'valu':140C 'vulner':76C 'zero':55B,133C","nicknames":[],"mitigations":[],"who_affected":"Systems running a Linux kernel with a BPF flow dissector program attached to packet processing, typically those using flow-dissection BPF for custom packet steering or monitoring. Systems that do not load BPF flow dissector programs are unlikely to be affected; the sources do not say more.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-23T13:17:16+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-98950","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-98950","severity":null,"published_at":"2026-10-23T13:17:16+00:00","modified_at":"2026-10-23T13:17:16+00:00","first_seen_at":"2026-10-23T21:57:33+00:00","fetched_at":"2026-10-23T22:29:03+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}