{"id":"CVE-2026-98724","kind":"vulnerability","aliases":["CVE-2026-98724"],"related":[],"title":"Linux kernel NVMe target: short SGL segment reads memory out of bounds","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nnvmet: pci-epf: reject too-short SGL segments\n\nThe host controls an SGL segment's length. A nonzero length smaller than\none SGL descriptor makes nr_descs zero, so\nnvmet_pci_epf_get_sgl_segment() reads the type byte of sgls[-1] outside\nthe allocated buffer. If that byte contains a segment descriptor type,\nthe function also copies the preceding 16 bytes and returns a negative\ndescriptor count.\n\nThe read was reproduced in 3/3 KASAN boots with only the host transfer\nmocked by a KUnit test:\n\n  BUG: KASAN: slab-out-of-bounds in nvmet_pci_epf_get_sgl_segment\n  Read of size 1 by task kunit_try_catch\n  Call Trace:\n   nvmet_pci_epf_get_sgl_segment\n   nvmet_pci_epf_short_sgl_test\n  Kernel panic - not syncing: KASAN: panic_on_warn set ...\n\nReject segments that cannot hold one descriptor before allocating or\ntransferring their contents.","summary":"The Linux kernel's NVMe PCI endpoint target driver (nvmet pci-epf) does not reject SGL segments whose length is smaller than one descriptor. A host can send such a segment to trigger an out-of-bounds read of kernel memory and a negative descriptor count.","severity":"unknown","cvss":null,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["kernel","linux","nvme","pci-epf","runtime"],"not_affected_if":["default-config"],"how_to_check":"- unknown","fix":"- unknown","status":"open","published_at":"2026-10-18T16:17:26+00:00","first_seen_at":"2026-10-23T21:57:16+00:00","triaged_at":"2026-10-25T05:17:19+00:00","updated_at":"2026-10-25T05:17:19+00:00","category":"runtime","confidence":0.5,"triage":{"at":"2026-10-25T05:17:19Z","model":"claude-haiku-5-5","output":{"fix":"- unknown","reach":"local","title":"Linux kernel NVMe target: short SGL segment reads memory out of bounds","impact":"medium","summary":"The Linux kernel's NVMe PCI endpoint target driver (nvmet pci-epf) does not reject SGL segments whose length is smaller than one descriptor. A host can send such a segment to trigger an out-of-bounds read of kernel memory and a negative descriptor count.","category":"runtime","nicknames":[],"who_cares":["linux","kernel","nvme","pci-epf"],"confidence":0.5,"needs_auth":"unknown","worst_case":"kernel memory read out of bounds, possible kernel panic","analyst_note":"Check the upstream kernel commit and NVD entry for the affected kernel version ranges and fixed stable releases; sources give no versions.","how_to_check":"- unknown","needs_analyst":true,"not_affected_if":["default-config"],"who_is_affected":"unknown. The sources describe the nvmet pci-epf driver, which is used when a Linux machine acts as an NVMe PCI endpoint target; systems that do not run this target driver are not described as exposed.","user_interaction":"no","needs_special_setup":"yes","severity_if_unknown":"unknown"},"cost_usd":0.00058,"input_tokens":3601,"output_tokens":440,"severity_before":"unknown"},"analyst_status":null,"analyst_note":null,"search":"'-1':127C '-2026':14A,17A '-98724':15A,18A '1':189C '16':146C '3/3':159C 'alloc':130C,226C 'also':142C 'boot':161C 'bound':12A,64B,178C 'buffer':131C 'bug':172C 'byte':124C,134C,147C 'call':195C 'cannot':221C 'catch':194C 'contain':135C 'content':230C 'control':96C 'copi':143C 'count':73B,153C 'cve':13A,16A 'desc':112C 'descriptor':50B,72B,109C,138C,152C,224C 'driver':34B 'endpoint':32B 'epf':24B,38B,87C,117C,182C,199C,205C 'follow':79C 'function':141C 'get':118C,183C,200C 'hold':222C 'host':52B,95C,165C 'kasan':160C,173C,213C 'kernel':2A,19B,28B,67B,77C,209C 'kunit':170C,192C 'length':45B,101C,104C 'linux':1A,20B,27B,76C 'make':110C 'memori':9A,68B 'mock':167C 'negat':71B,151C 'nonzero':103C 'nr':111C 'nvme':3A,21B,30B 'nvmet':35B,84C,115C,180C,197C,203C 'one':49B,107C,223C 'out-of-bound':61B 'outsid':128C 'panic':210C,214C 'pci':23B,31B,37B,86C,116C,181C,198C,204C 'pci-epf':22B,36B,85C 'preced':145C 'read':8A,65B,121C,155C,186C 'reject':41B,88C,218C 'reproduc':157C 'resolv':83C 'return':149C 'runtim':25B 'segment':7A,43B,57B,93C,99C,120C,137C,185C,202C,219C 'send':54B 'set':217C 'sgl':6A,42B,92C,98C,108C,119C,184C,201C,207C 'sgls':126C 'short':5A,91C,206C 'size':188C 'slab':175C 'slab-out-of-bound':174C 'smaller':47B,105C 'sync':212C 'target':4A,33B 'task':191C 'test':171C,208C 'too-short':89C 'trace':196C 'transfer':166C,228C 'tri':193C 'trigger':59B 'type':123C,139C 'vulner':80C 'warn':216C 'whose':44B 'zero':113C","nicknames":[],"mitigations":[],"who_affected":null,"tier":"C","verified":{},"analyst_revisit_at":null,"first_public_at":"2026-10-18T16:17:26+00:00","kev":null,"cvss_vector":null,"cvss_by":null,"poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-98724","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-98724","severity":null,"published_at":"2026-10-18T16:17:26+00:00","modified_at":"2026-10-19T10:19:36+00:00","first_seen_at":"2026-10-23T21:57:16+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"}