]> git.djapps.eu Git - pkg/ggml/sources/llama.cpp/commitdiff
server: fix heap-buffer-overflow from negative n_discard (CVE-2026-21869) (#22267)
authorSong Li <redacted>
Thu, 23 Apr 2026 16:39:07 +0000 (12:39 -0400)
committerGitHub <redacted>
Thu, 23 Apr 2026 16:39:07 +0000 (18:39 +0200)
* server: clamp n_discard to non-negative at JSON parse boundary (CVE-2026-21869)

A negative n_discard from client JSON causes heap-buffer-overflow in
update_slots() context-shift loop (CWE-787, CVSS 8.8). Clamp to 0 at
ingress; n_discard=0 already triggers auto-discard (n_left/2).

Ref: GHSA-8947-pfff-2f3c

* cont : cleaner

* cont : cleanerer

* cont : cleanest

---------

Co-authored-by: Georgi Gerganov <redacted>
tools/server/server-task.cpp

index 9380792c06d059c084e0f38a665e9369e621d547..4c341d7c50fbd32c9d4afb6fe2fbb8bfc73a300a 100644 (file)
@@ -270,6 +270,7 @@ task_params server_task::params_from_json_cmpl(
     params.n_indent         = json_value(data,       "n_indent",           defaults.n_indent);
     params.n_keep           = json_value(data,       "n_keep",             defaults.n_keep);
     params.n_discard        = json_value(data,       "n_discard",          defaults.n_discard);
+    params.n_discard        = std::max(0, params.n_discard);
     params.n_cmpl           = json_value(data,       "n_cmpl",             json_value(data, "n", 1));
     params.n_cache_reuse    = json_value(data,       "n_cache_reuse",      defaults.n_cache_reuse);
     //params.t_max_prompt_ms  = json_value(data,       "t_max_prompt_ms",    defaults.t_max_prompt_ms); // TODO: implement