<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <id>https://db.gcve.eu/rss/recent/all/10</id>
  <title>Most recent entries from all</title>
  <updated>2026-10-30T13:20:58.882225+00:00</updated>
  <author>
    <name>Vulnerability-Lookup</name>
    <email>info@gcve.eu</email>
  </author>
  <link href="https://db.gcve.eu" rel="alternate"/>
  <generator uri="https://lkiesow.github.io/python-feedgen" version="1.0.0">python-feedgen</generator>
  <subtitle>Contains only the most 10 recent entries.</subtitle>
  <entry>
    <id>https://db.gcve.eu/vuln/cve-2026-115916</id>
    <title>CVE-2026-115916 — vLLM: Out-of-vocabulary prompt token id passes input validation and triggers a CUDA device-side assert (engine crash /…</title>
    <updated>2026-10-30T13:20:58.900852+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> vllm-project vllm</p>
<p>vLLM is an inference and serving engine for large language models. Prior to 0.32.0, vllm/tokenizers/hf.py computes max_token_id with an off-by-one upper bound, allowing a pre-tokenized prompt ID equal to the vocabulary size to pass validation. For a tensor-parallel size of one and an exact multiple-of-64 vocabulary, VocabParallelEmbedding.forward does not mask that value before F.embedding uses it, causing a CUDA device-side assertion and terminating the engine. This issue is fixed in version 0.32.0.</p></div>
    </content>
    <link href="https://db.gcve.eu/vuln/cve-2026-115916"/>
  </entry>
  <entry>
    <id>https://db.gcve.eu/vuln/ghsa-q97c-p368-75c4</id>
    <title>GHSA-q97c-p368-75c4 — vLLM: Out-of-vocabulary prompt token id passes input validation and triggers a CUDA device-side assert (engine crash /…</title>
    <updated>2026-10-30T13:20:58.900949+00:00</updated>
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml"><p><strong>Affected:</strong> PyPI: vllm</p>
<p>For a model whose vocabulary size is an exact multiple of the embedding padding size (64) — e.g. any Llama-2-family model, vocab 32000 — a single request carrying a pre-tokenized prompt with token id equal to the vocab size (32000) passes vLLM's input-id validation but is one past the last embedding row. At tensor-parallel size 1 the embedding lookup does not mask indices, so the id reaches `F.embedding` out of range and raises a CUDA device-side assert, which poisons the engine's CUDA context and takes the engine down. Any client that can send pre-tokenized input (`/v1/completions` with `prompt` as token ids, `/tokenize`-fed flows, or the `kv_transfer_params["prompt_token_ids"]` reuse path) can trigger it.</p>
<p>## Root cause
`vllm/v1/engine/input_processor.py` accepts a token id when `id &lt;= max(tokenizer.max_token_id, model_config.get_vocab_size() - 1)`.
`vllm/tokenizers/hf.py` computes `max_token_id = max(max(vocab.values()), tokenizer.vocab_size)`. For Llama-2 tokenizers `max(vocab.values()) = 31999` but `tokenizer.vocab_size = 32000`, so `max_token_id = 32000` — one greater than the largest valid id.
The engine bound therefore becomes `max(32000, 31999) = 32000`, and id 32000 is accepted.
The model's embedding has `pad_vocab_size(32000, 64) = 32000` rows (no padding), valid indices 0..31999. At `VocabParallelEmbedding.forward` with `tp_size == 1` there is no masking, so index 32000 hits `F.embedding` out of range.</p>
<p>## Affected
- tp=1 (single GPU per model — common per-copy l…</p></div>
    </content>
    <link href="https://db.gcve.eu/vuln/ghsa-q97c-p368-75c4"/>
  </entry>
</feed>
