Valkey patches five release lines at once: 9.1, 9.0, 8.1, 8.0, and 7.2. On 26 and 27 October 2026 every one of them shipped a release marked "Upgrade urgency SECURITY" for a cluster Pub/Sub heap overflow, GHSA-f4q9-j22m-xqq9. That advisory has no CVE ID, so a scanner that matches CVEs does not flag it. The support dates differ by branch in a way that is easy to misread. Valkey 9.0 and 8.0 get no extended security window: their support simply stops in 2028 and 2027. And since September 2026, some security-relevant fixes ship as ordinary bug fixes with no advisory at all. This post gives the support window for each branch, the minimum patch to run on each as of November 2026, the advisories each floor closes, and how to roll a patch out and keep up with the next one.
- As of November 2026, the minimum safe patches are 9.1.3, 9.0.7, 8.1.11, 8.0.12, and 7.2.15. Each fixes GHSA-f4q9-j22m-xqq9 and every earlier advisory on its branch.
- Valkey 8.0 support ends on 15 September 2027 and 9.0 support ends on 21 October 2028, with no security-only period after either. 7.2, 8.1, and 9.1 get security fixes until 2029, 2030, and 2031.
- Read
valkey_versionfromINFO server, notredis_version, which reports 7.2.4 on every Valkey release. - Several ACL bypass fixes shipped as plain bug fixes, and patch releases also change behavior: strict CRLF parsing,
LSETerrors, and a newnodes.conf.lockfile. - Valkey 8.0.8 was revoked. A build from that tag reports version 255.255.255; replace it with 8.0.12.
Scope and review date: November 2026. This post covers self-managed Valkey 7.2, 8.0, 8.1, 9.0, and 9.1, plus a note on the 9.2 release candidates. Dates, versions, and advisories were checked against valkey.io, the Valkey GitHub releases and security advisories, and Docker Hub on 10 November 2026. The commands were checked against the documentation and source, not run in a lab, so rehearse them on staging.
Which Valkey versions are supported, and until when?
The Valkey releases and versioning page sets two windows. Maintenance support, meaning "patch releases for bug fixes and all security fixes", lasts 3 years from a minor version's first release. Extended security support lasts 5 years, but only for the latest minor version of each major. The page adds that the project "will only patch security issues we believe to be possible to exploit", at the discretion of the Technical Steering Committee (TSC).
That second rule is why the table has two short lines. 8.1 is the last 8.x minor, so 8.0 gets no extended period. 9.0 is not the last 9.x minor, so it stops at its maintenance date.
| Branch | First release | Maintenance ends | Security support ends | Minimum safe patch | Released |
|---|---|---|---|---|---|
| 9.1 | 19 May 2026 | 19 May 2029 | 19 May 2031 | 9.1.3 | 26 October 2026 |
| 9.0 | 21 October 2025 | 21 October 2028 | 21 October 2028 | 9.0.7 | 27 October 2026 |
| 8.1 | 31 March 2025 | 31 March 2028 | 31 March 2030 | 8.1.11 | 26 October 2026 |
| 8.0 | 15 September 2024 | 15 September 2027 | 15 September 2027 | 8.0.12 | 26 October 2026 |
| 7.2 | 16 April 2024 | 16 April 2027 | 16 April 2029 | 7.2.15 | 26 October 2026 |
Support dates come from the releases page. The patch floor is the newest release on each branch, listed on the Valkey download page and in the GitHub release notes.
What each Valkey branch receives over time
Switch dates to see which branches lose bug fixes and which lose everything
November 2026
| Branch | Fixes received |
|---|---|
| 9.1 | Bug and security fixes |
| 9.0 | Bug and security fixes |
| 8.1 | Bug and security fixes |
| 8.0 | Bug and security fixes |
| 7.2 | Bug and security fixes |
October 2027
| Branch | Fixes received |
|---|---|
| 9.1 | Bug and security fixes |
| 9.0 | Bug and security fixes |
| 8.1 | Bug and security fixes |
| 8.0 | None: support ended 15 September 2027 |
| 7.2 | Security fixes only, until 16 April 2029 |
November 2028
| Branch | Fixes received |
|---|---|
| 9.1 | Bug and security fixes |
| 9.0 | None: support ended 21 October 2028 |
| 8.1 | Security fixes only, until 31 March 2030 |
| 8.0 | None: support ended 15 September 2027 |
| 7.2 | Security fixes only, until 16 April 2029 |
No soft landing: 8.0 and 9.0 go straight from full maintenance to no fixes. Plan their minor upgrades to 8.1 and 9.1 before those dates, not after.
The policy says the minor that gets extended security support "will be decided once the next major version has been launched". 9.2 is a 9.x minor in release candidate now. Our reading is that if 9.2 becomes the last 9.x minor, it may take the 5-year window from 9.1. Check the table again when 9.2 and 10.0 ship.
Which advisories does each patch floor close?
Every advisory published in 2026 is fixed at or below the floor on each affected branch. The matrix lists the first fixed release per branch, from the Valkey security advisories and the GitHub release notes. A dash means the advisory does not list that branch as affected.
| Advisory | Issue | 9.1 | 9.0 | 8.1 | 8.0 | 7.2 |
|---|---|---|---|---|---|---|
| CVE-2025-67733 | RESP protocol injection through a Lua error_reply | - | 9.0.3 | 8.1.6 | 8.0.7 | 7.2.12 |
| CVE-2026-21863 | Malformed cluster bus message causes a remote crash (medium) | - | 9.0.3 | 8.1.6 | 8.0.7 | 7.2.12 |
| CVE-2026-27623 | Pre-authentication crash from a malformed request | - | 9.0.3 | - | - | - |
| CVE-2026-23479, CVE-2026-25243, CVE-2026-23631 | Use-after-free in the unblock flow, invalid memory access in RESTORE, use-after-free during a full sync in a yielding script | 9.1.0 | 9.0.4 | 8.1.7 | 8.0.9 | 7.2.13 |
| CVE-2026-56684 | TLS use-after-free reachable through CLIENT KILL; TLS only | 9.1.1 | 9.0.5 | 8.1.9 | 8.0.10 | 7.2.14 |
| CVE-2026-63639 | Crafted stream RESTORE payload causes a use-after-free | 9.1.1 | 9.0.5 | 8.1.9 | 8.0.10 | 7.2.14 |
| GHSA-jcj7-v34w-v9vv | RDMA use-after-free; RDMA builds with an RDMA listener only | 9.1.2 | 9.0.6 | 8.1.10 | 8.0.11 | - |
| GHSA-fq2f-crmw-q97r | Use-after-free of the Lua interpreter state in the script debugger | 9.1.2 | - | - | - | - |
| GHSA-f4q9-j22m-xqq9 | Heap overflow building cluster Pub/Sub messages over 4 GiB; cluster mode only | 9.1.3 | 9.0.7 | 8.1.11 | 8.0.12 | 7.2.15 |
Three 2026 advisories had no CVE ID on 10 November 2026: GHSA-jcj7-v34w-v9vv, GHSA-fq2f-crmw-q97r, and GHSA-f4q9-j22m-xqq9. The May CVEs have no Valkey repository advisory and appear only in release notes, and 7.2.14 lists one more zipmap RESTORE fix under CVE-2026-25243. Track by GHSA ID and release version, not by CVE alone. One small discrepancy: the CVE-2025-67733 advisory lists 9.0.2 as patched, while the fix appears in the 9.0.3 notes. The 9.0 floor covers both.
# List Valkey advisories with their CVE (if any) and patched versions
gh api "repos/valkey-io/valkey/security-advisories?per_page=100" \
--jq '.[] | [.ghsa_id, (.cve_id // "no CVE"), .severity,
([.vulnerabilities[].patched_versions] | join(" "))] | @tsv'Interpretation: each line pairs a GHSA ID with its CVE, or "no CVE", and the patched versions per branch. Feed the GHSA IDs, not just CVEs, into your vulnerability tracker. On a release older than 2026, the 2025 Lua advisories (CVE-2025-49844 and three related CVEs, fixed in 8.1.4, 8.0.6, and 7.2.11) also apply; the floor fixes those as well.
If you cannot patch this week
The GHSA-f4q9-j22m-xqq9 advisory notes that building a message over 4 GiB needs a script, because the default proto-max-bulk-len of 512 MB blocks large client arguments. Its mitigation is to deny scripting commands to users who do not need them and to keep that limit at its default.
valkey-cli CONFIG GET proto-max-bulk-len
valkey-cli ACL SETUSER reporting -@scripting
valkey-cli ACL GETUSER reportingInterpretation: 536870912 is the 512 MB default. -@scripting removes EVAL, FCALL, FUNCTION, and the other scripting commands from that user. This narrows exposure for one advisory; it is not a substitute for the floor.
Which security fixes shipped without an advisory?
In a 17 September 2026 post, the maintainers changed what gets an advisory: Valkey "stopped issuing advisories for availability-only bugs that require an authenticated attacker", and fixes them as ordinary bugs. A pre-authentication crash, an out-of-bounds read, or "any action beyond granted permissions" still gets one. The same post counts seven advisories in the first eight months of 2026 and "almost three dozen security-adjacent fixes".
In practice several permission fixes appear only in the "Bug Fixes" list of a release:
| Fix (pull request) | What it closed | Fixed in |
|---|---|---|
| GEORADIUS duplicate STORE (#3971) | A second STORE or STOREDIST wrote keys outside the user's key patterns | 9.1.2, 9.0.6, 8.1.10, 8.0.11, 7.2.15 |
| HGETEX permission (#4576) | Read-only users could change field TTLs or delete fields | 9.1.2, 9.0.6 |
| TLS certificate CN (#4577) | An embedded NUL in a certificate CN could impersonate another ACL user | 9.1.2, 9.0.6 |
| Database ACLs (#3801, #3806, #4155) | COPY, CLUSTER FLUSHSLOT, and MOVE reached databases outside a user's db= rule | 9.1.1 and 9.1.2 |
| Cluster bus lengths (#3972) | Forged PUBLISH or MODULE packets crashed nodes | 9.1.2, 9.0.6, 8.1.10, 8.0.11, 7.2.15 |
| Config injection (#3847, #3848) | Control characters in SENTINEL SET values, cluster AUX fields, or cluster-announce-ip wrote into config files | 9.1.1, 9.0.5, 8.1.8 or 8.1.9, 8.0.10, 7.2.14 |
Note the 7.2 dates. The GEORADIUS and cluster bus fixes reached 8.x and 9.x on 31 August and 1 September 2026, but 7.2 only in 7.2.15, eight weeks later. The same thing can happen to any branch in its security-only period, which receives security fixes but not ordinary bug fixes. Our reading of the September policy is that authenticated crash bugs may then not reach it at all.
# Every fix between your running patch and the floor, ACL items first
gh release view 9.0.7 --repo valkey-io/valkey | grep -iE "acl|permission|tls|inject"
gh release view 9.0.6 --repo valkey-io/valkey | grep -iE "acl|permission|tls|inject"Interpretation: run it for every release between your current patch and the floor, because release notes list only the changes since the previous patch. Each hit is a permission or input-validation fix that a CVE feed will not show.
What else changes when you apply a Valkey security patch?
The releases page says patch versions carry backward-compatible bug fixes and that upgrading between them "should be safe". The fixes still change behavior that applications and scripts can see. These are the ones most likely to surface in testing:
- Strict CRLF parsing (#2872). Requests without proper line endings now get a protocol error instead of being misparsed. In 9.0.5, 8.1.8, 8.0.10, and 7.2.14; in 9.1 since 9.1.0-rc1. Hand-written health checks are the usual casualty.
COMMAND INFOin RESP3 (#3939). The subcommands field is now an array, not a set. In 9.1.1, 9.0.5, 8.1.9, 8.0.10, and 7.2.14.lua-enable-insecure-api(#3548). Ayesset in the config file now takes effect at startup; before, it was ignored. In 8.1.9, 8.0.10, and 7.2.14. Check the file before you patch.- AOF replay and dump validation (#3984, #3721). Replaying the AOF no longer applies ACL checks, and
sanitize-dump-payloadbecame a no-op with deep validation always on. In 9.1.2, 9.0.6, 8.1.10, 8.0.11, and 7.2.15. - Hash field commands (#4576, #4300).
HGETEXneeds write permission, andHPERSIST,HTTL,HPTTL,HEXPIRETIME, andHPEXPIRETIMEreturn a syntax error withoutFIELDS. In 9.1.2 and 9.0.6. - The October wave.
LSETwith an out-of-range index returns an error instead of changing the wrong element (all five branches). A negative sorted setLIMIToffset returns an empty result (all but 7.2). The cluster startup lock moved to a separatenodes.conf.lockfile (all five), andPUBLISHover the cluster bus size limit now returns an error.
# Find code paths that hit the commands whose replies changed
grep -rnE "HGETEX|HPERSIST|HTTL|HPTTL|HEXPIRETIME|LSET|COMMAND INFO" ./src
# Check whether the config file asks for the insecure Lua API
grep -n "lua-enable-insecure-api" /etc/valkey/valkey.confInterpretation: any hit is a test to run on staging against the target patch. If the second command prints lua-enable-insecure-api yes, decide whether you still want it before the patch makes it real. Backup and file-sync tools that copy the data directory should expect nodes.conf.lock on cluster nodes.
How do you check which Valkey version is actually running?
Ask the server. Package versions, image tags, and the Redis compatibility field all mislead. Every Valkey release reports redis_version:7.2.4 in INFO server, hard-coded as a compatibility value that "should never exceed 7.2.x" in version.h. The real version is in valkey_version.
INFO server on a Valkey 9.0 node, then a fleet check
Illustrative output: field names match the 9.0.7 source, the hosts and versions are examples
Ignore redis_version: it reads 7.2.4 on 7.2, 8.x, and 9.x alike, so any inventory or scanner keyed on it reports every Valkey node as the same version.
With extended-redis-compatibility yes, the HELLO reply also claims to be Redis 7.2.4, per networking.c at 9.1.3. INFO server keeps both fields either way. Off the server, the binary reports its own version:
valkey-server --version
docker run --rm valkey/valkey:8 valkey-server --versionInterpretation: the output starts with Valkey server v= and the version. On 10 November 2026 the floating valkey/valkey:8 tag had the same digest as 8.1.11, and latest matched 9.1.3. A team that reads :8 as "the 8.0 line" is running 8.1. Pin the full patch tag. Bundles number separately: the valkey-bundle 9.1.4 Dockerfile builds on Valkey 9.1.3.
The revoked 8.0.8 release
Valkey 8.0.8 appeared on 6 May 2026 with the other May security releases. Its release, now titled "8.0.8 (revoked)", says: "The 8.0.8 tag was placed on a commit that is not part of the 8.0 release branch. Users should upgrade to 8.0.9 instead." 8.0.9 followed the same day with the three May CVE fixes. GitHub's compare view shows the 8.0.8 tag 1,292 commits ahead of 8.0.7 and diverged from it. The tagged version.h carries the development placeholder version, so a server built from it reports:
valkey-cli INFO server | grep -E "valkey_version|valkey_release_stage"
# valkey_version:255.255.255 means a development build, such as the 8.0.8 tagInterpretation: 255.255.255 is the version string of Valkey's unstable branch. Any node reporting it is not running an 8.0 release. Docker Hub has no 8.0.8 tag, so the risk is in source builds and internal mirrors. Rebuild those nodes from 8.0.12.
Should you patch in place or move to a newer branch?
Do both, in that order. A patch on the same branch is the smallest change: the releases page says it should be safe to run "a primary-replica pair or a Valkey cluster with servers running on different patch versions". Moving branch is a minor or major upgrade, and the same page says it is "not recommended to run a Valkey cluster with servers running on different minor versions", so that rollout needs a shorter, planned window.
Patch in place, then decide whether to move branch
Step 2 is always a same-branch patch; steps 3 and 4 depend on how long your branch has left
Order matters: patch to the floor first. A branch upgrade takes weeks to plan, and the floor closes the open advisories now.
Some branch-specific notes for step 3. From 9.0, go straight to 9.1.3 or later: earlier 9.1 releases had a listpack incompatibility that broke RDB loads and replication with 9.0 for some entry sizes (#4819). The Valkey 9.1 upgrade guide covers that path and its rollback limits. From 7.2, a move to 8.1 keeps the same RDB format: rdb.h describes RDB 11 as "used by Valkey 7.x and 8.x", while 9.x writes version 80.
# How long does each branch you run have left? (GNU date)
for d in 2027-09-15 2028-10-21; do
echo "$d: $(( ( $(date -d "$d" +%s) - $(date +%s) ) / 86400 )) days"
doneInterpretation: the two dates are the support ends for 8.0 and 9.0. If the count is shorter than your usual lead time for a tested upgrade, step 3 belongs in this quarter's plan.
How do you roll a Valkey patch through replicas and the primary?
The releases page says to "always upgrade replicas before upgrading primaries". For a patch release, each node is a stop, binary swap, and start. The only write interruption is the controlled failover.
Rolling patch runbook: replicas first, then the primary
Eight steps per shard; step 6 is the brief write interruption
-
Record version and role on every node
Keep the output in the change ticket as the before state.
valkey-cli -h cache-02 INFO server | grep valkey_version valkey-cli -h cache-02 INFO replication | grep role -
Read every release note up to the floor
Check the behavior changes against your application and config before touching a node.
gh release view 9.0.7 --repo valkey-io/valkey -
Take a fresh snapshot
Wait for the save to finish and copy the RDB off the host.
valkey-cli -h cache-01 BGSAVE valkey-cli -h cache-01 LASTSAVE -
Patch one replica
Stop it, install the new binary or image, and start it with the same config.
sudo systemctl stop valkey sudo systemctl start valkey -
Wait for it to resync
Continue only when the link is up and no sync is in progress, then repeat steps 4 and 5 for each replica.
valkey-cli -h cache-02 INFO replication \ | grep -E "master_link_status|sync_in_progress" -
Fail over to a patched replica
Write pauseWith Sentinel, ask Sentinel. In cluster mode, run CLUSTER FAILOVER on the patched replica.
valkey-cli -p 26379 SENTINEL FAILOVER mymaster valkey-cli -h cache-02 CLUSTER FAILOVER -
Patch the old primary
It is now a replica. Swap its binary the same way and wait for the resync.
-
Verify and watch for new denials
Every node must report the floor version. New ACL LOG entries usually point to a tightened permission such as HGETEX.
valkey-cli -h cache-02 ACL LOG 10
Rollback point: until step 6, the primary still runs the old patch. Because patch releases of one branch can replicate to each other, rolling back is the same swap in reverse.
On managed services such as Amazon ElastiCache or Google Cloud Memorystore, the provider builds and schedules engine versions. Check which Valkey patch your engine version corresponds to in the provider's own release notes rather than assuming the open source floor applies.
How do you track new Valkey releases and advisories?
Valkey ships most security fixes to every supported branch within a day, so one feed covers all of them. Three sources are enough:
- GitHub watch. On the valkey-io/valkey repository, choose Watch, then Custom, then Releases. GitHub's notification settings documentation describes the custom options.
- The release feed. Release notes carry an "Upgrade urgency" line: LOW, MODERATE, HIGH, or SECURITY. Alert on SECURITY and HIGH.
- The advisories API. Poll it on a schedule and diff against the last run, so advisories without a CVE are not missed.
# Newest releases, then the urgency line of one release
curl -s https://github.com/valkey-io/valkey/releases.atom | grep -o "<title>[^<]*" | head -8
gh release list --repo valkey-io/valkey --limit 10
gh release view 9.1.3 --repo valkey-io/valkey | grep "Upgrade urgency"Interpretation: the Atom feed and gh release list show the newest tags, including release candidates such as 9.2.0-rc2 from 4 November 2026. The download page states that release candidates "are not supported for production use", so leave them out of the floor. The urgency line tells you how fast to act.
In 2026 the security releases landed in February, May, July, late August, and October. An alert on the SECURITY urgency line catches each wave when it ships, and a monthly review of the feed covers the HIGH and MODERATE releases between them.
Frequently asked questions
Which Valkey versions are still supported?
As of November 2026, Valkey 9.1, 9.0, 8.1, 8.0, and 7.2 all receive bug and security fixes. Valkey 8.0 support ends on 15 September 2027 and 9.0 support ends on 21 October 2028, with no security-only period. Valkey 7.2, 8.1, and 9.1 receive security fixes until 16 April 2029, 31 March 2030, and 19 May 2031.
What is the minimum safe Valkey version in November 2026?
Run at least 9.1.3, 9.0.7, 8.1.11, 8.0.12, or 7.2.15, depending on your branch. These October 2026 releases fix GHSA-f4q9-j22m-xqq9, a cluster Pub/Sub heap overflow, and include every earlier 2026 security fix for their branch. Check the GitHub releases page for newer patches before you schedule the work.
Why does Valkey report redis_version 7.2.4?
It is a fixed compatibility value for tools that expect Redis. Valkey's version.h sets it to 7.2.4 on every release, including 8.x and 9.x. The real server version is the valkey_version field in INFO server, or the v= value from valkey-server --version. Inventory and vulnerability scanners should read valkey_version.
Was Valkey 8.0.8 a bad release?
Valkey 8.0.8, published on 6 May 2026, was revoked because its tag pointed at a commit outside the 8.0 release branch. Valkey 8.0.9 replaced it the same day with the intended security fixes. A server built from the 8.0.8 tag reports valkey_version 255.255.255. Move any such node to 8.0.12.
Do Valkey security patches change behavior?
Sometimes. Patches in 2026 made RESP parsing reject malformed line endings, required write permission for HGETEX, made LSET return an error for out-of-range indexes, and moved the cluster startup lock to nodes.conf.lock. Read the release notes between your version and the target, and test on staging first.
Key takeaways
- Patch every branch to the November 2026 floor: 9.1.3, 9.0.7, 8.1.11, 8.0.12, or 7.2.15.
- Plan the minor upgrades off 8.0 before 15 September 2027 and off 9.0 before 21 October 2028; neither gets a security-only period.
- Track GHSA IDs and release-note fixes, not only CVEs: three 2026 advisories have no CVE, and authenticated crash bugs now ship as plain bug fixes.
- Inventory by
valkey_version, pin full image tags, and rebuild anything reporting 255.255.255. - Test the behavior changes in each patch, then roll replicas first and fail over once per shard.
Keep your Valkey fleet patched with JusDB
JusDB's Valkey support team can review the versions running across your nodes against the current patch floor, check the release notes between each version and its target for behavior changes, and plan or run the rolling upgrades, including the 8.0 and 9.0 branch moves.
Bring your node list, current versions, topology (standalone, Sentinel, or cluster), and maintenance windows. Your team approves every production change.