{"id":"CVE-2026-98556","kind":"vulnerability","aliases":["CVE-2026-98556"],"related":[],"title":"Linux gve driver: out-of-range TSO MSS can make the device send malformed packets","description":"In the Linux kernel, the following vulnerability has been resolved:\n\ngve: DQO: reject TSO packets with an out of range MSS\n\ngve_prep_tso() notes that the device requires the MSS to be <= 9728,\nbut does not enforce it, assuming the 9K MTU enforced by the hypervisor\nand the 64KB limit on TSO sizes are enough.\n\nThis does not hold for packets that were not generated locally.\nA guest behind a tap, or any packet socket user, can provide an\narbitrary gso_size in virtio_net_hdr. Layer 2 forwarding does not check\nthe MTU for GSO packets (is_skb_forwardable()), and gso_features_check()\nonly bounds skb->len and gso_segs, never gso_size.\n\nSuch a packet reaches gve_tx_fill_tso_ctx_desc(), which puts gso_size\ninto the mss field of the TSO context descriptor. This field is 14 bits\nwide, so a gso_size of 16384 is silently turned into an MSS of zero.\n\nDrop these packets from gve_prep_tso(), and make sure that\ngve_features_check_dqo() leaves their GSO bits alone: skb_segment()\nsplits at gso_size regardless of the MTU, so falling back to software\nsegmentation would give the device non TSO packets bigger than the\n9728 bytes it supports.\n\nNote that the device can still be given oversized non TSO packets when\nthe stack segments in software for other reasons, for instance after\nTSO has been disabled with ethtool. This is a generic issue, because\nthe MTU check is skipped for GSO packets in the forwarding path, and\nis addressed separately.","summary":"The Google gve network driver in the Linux kernel does not reject TSO packets whose segment size exceeds what the device supports, so a crafted gso_size becomes a zero MSS in the hardware descriptor. The sources describe the packet mangling but do not state a confirmed code execution or data exposure impact.","severity":"unknown","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["google-cloud","gve","gvnic","infrastructure","linux-kernel"],"not_affected_if":["no-gve-hardware"],"how_to_check":"- unknown","fix":"- Update the Linux kernel to a release that includes the upstream gve fix rejecting out-of-range TSO MSS values (exact version not given in the sources).","status":"open","published_at":"2026-10-18T16:17:07+00:00","first_seen_at":"2026-10-23T21:57:15+00:00","triaged_at":"2026-10-25T05:23:26+00:00","updated_at":"2026-10-25T05:23:26+00:00","category":"infrastructure","confidence":0.4,"triage":{"at":"2026-10-25T05:23:26Z","model":"claude-haiku-5-5","output":{"fix":"- Update the Linux kernel to a release that includes the upstream gve fix rejecting out-of-range TSO MSS values (exact version not given in the sources).","reach":"local","title":"Linux gve driver: out-of-range TSO MSS can make the device send malformed packets","impact":"low","summary":"The Google gve network driver in the Linux kernel does not reject TSO packets whose segment size exceeds what the device supports, so a crafted gso_size becomes a zero MSS in the hardware descriptor. The sources describe the packet mangling but do not state a confirmed code execution or data exposure impact.","category":"infrastructure","nicknames":[],"who_cares":["linux-kernel","gve","google-cloud","gvnic"],"confidence":0.4,"needs_auth":"unknown","worst_case":"unknown, sources do not state the impact beyond malformed TSO descriptors","analyst_note":"Find the upstream kernel commit and fixed stable versions for the gve TSO MSS check, and whether the flaw leads to anything beyond a bad descriptor.","how_to_check":"- unknown","needs_analyst":true,"not_affected_if":["no-gve-hardware"],"who_is_affected":"Systems running Linux kernels with the gve driver on Google Compute Engine or gVNIC hardware that forward or receive packets from guests or packet sockets. The sources do not say which kernel versions are affected or whether hosts without a tap or packet socket path are exposed.","user_interaction":"no","needs_special_setup":"unknown","severity_if_unknown":"unknown"},"cost_usd":0.000647,"input_tokens":3754,"output_tokens":543,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-2026':18A,21A '-98556':19A,22A '14':226C '16384':234C '2':173C '64kb':134C '9728':118C,289C '9k':126C 'address':343C 'alon':262C 'arbitrari':165C 'assum':124C 'back':275C 'becom':59B 'behind':154C 'bigger':286C 'bit':227C,261C 'bound':191C 'byte':290C 'check':177C,189C,256C,331C 'cloud':25B 'code':79B 'confirm':78B 'context':221C 'craft':56B 'ctx':208C 'cve':17A,20A 'data':82B 'desc':209C 'describ':69B 'descriptor':66B,222C 'devic':13A,52B,112C,282C,296C 'disabl':320C 'dqo':96C,257C 'driver':3A,36B 'drop':243C 'enforc':122C,128C 'enough':140C 'ethtool':322C 'exceed':49B 'execut':80B 'exposur':83B 'fall':274C 'featur':188C,255C 'field':217C,224C 'fill':206C 'follow':90C 'forward':174C,185C,339C 'generat':150C 'generic':326C 'give':280C 'given':300C 'googl':24B,33B 'google-cloud':23B 'gso':57B,166C,181C,187C,195C,198C,212C,231C,260C,267C,335C 'guest':153C 'gve':2A,26B,34B,95C,106C,204C,247C,254C 'gvnic':27B 'hardwar':65B 'hdr':171C 'hold':144C 'hypervisor':131C 'impact':84B 'infrastructur':28B 'instanc':315C 'issu':327C 'kernel':31B,40B,88C 'layer':172C 'leav':258C 'len':193C 'limit':135C 'linux':1A,30B,39B,87C 'linux-kernel':29B 'local':151C 'make':11A,251C 'malform':15A 'mangl':72B 'mss':9A,62B,105C,115C,216C,240C 'mtu':127C,179C,272C,330C 'net':170C 'network':35B 'never':197C 'non':283C,302C 'note':109C,293C 'out-of-rang':4A 'overs':301C 'packet':16A,45B,71B,99C,146C,159C,182C,202C,245C,285C,304C,336C 'path':340C 'prep':107C,248C 'provid':163C 'put':211C 'rang':7A,104C 'reach':203C 'reason':313C 'regardless':269C 'reject':43B,97C 'requir':113C 'resolv':94C 'seg':196C 'segment':47B,264C,278C,308C 'send':14A 'separ':344C 'silent':236C 'size':48B,58B,138C,167C,199C,213C,232C,268C 'skb':184C,192C,263C 'skip':333C 'socket':160C 'softwar':277C,310C 'sourc':68B 'split':265C 'stack':307C 'state':76B 'still':298C 'support':53B,292C 'sure':252C 'tap':156C 'tso':8A,44B,98C,108C,137C,207C,220C,249C,284C,303C,317C 'turn':237C 'tx':205C 'user':161C 'virtio':169C 'vulner':91C 'whose':46B 'wide':228C 'would':279C 'zero':61B,242C","nicknames":[],"mitigations":[],"who_affected":"Systems running Linux kernels with the gve driver on Google Compute Engine or gVNIC hardware that forward or receive packets from guests or packet sockets. The sources do not say which kernel versions are affected or whether hosts without a tap or packet socket path are exposed.","tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-18T16:17:07+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-98556","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-98556","severity":null,"published_at":"2026-10-18T16:17:07+00:00","modified_at":"2026-10-19T10:19:12+00:00","first_seen_at":"2026-10-23T21:57:15+00:00","fetched_at":"2026-10-23T22:28:56+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"}