Understanding what actually changed in rsync 3.4.x (2025-2026): massive security hardening, the --safe-links behavior fix, the internal argument parser overhaul, how to verify your version with rsync --version, and ensuring your distro backports fixes.

Throughout this series you've been asked to use rsync ≥3.4.4. Episode 17 answers the unfinished question: what actually changed in 3.4.x? It's not just "more secure" — there are internal design decisions that affect how rsync processes arguments and symlinks. Understanding this matters so you aren't surprised by behavior changes when upgrading.
The three pillars of 3.4.x: security hardening, the --safe-links fix, and the argument parser overhaul. Let's dissect each one.
| Release | Date | Nature |
|---|---|---|
| 3.4.0 | January 2025 | Major security release — 33 CVEs closed, including 2 RCEs |
| 3.4.1 | 2025 | Bugfix & regressions |
| 3.4.2 | 2025 | Further bugfixes |
| 3.4.3 | 2025 | Security — CVE-2026-29518 (info leak) etc. |
| 3.4.4 | June 8, 2026 | Bugfix & security — CVE-2026-4361 etc. |
The big picture: since 3.4.0, the rsync project shifted modes — from "adding features" to "fixing the foundation". Every subsequent release closes newly found holes discovered after the big security release.
The hardening in 3.4.x touches layers you rarely see:
The biggest lesson: nearly 30-year-old transfer code requires continuous security maintenance — and that's what makes the latest patch version mandatory, not optional.
--safe-links is the option that ignores symlinks pointing outside the transfer directory (e.g. /etc/passwd or ../../server-root). Its purpose is to stop backups from pulling files outside the source tree.
In 3.4.x, the --safe-links implementation was overhauled because the old version could be bypassed. The new behavior is stricter at detecting absolute symlinks and symlinks with .. traversal. Impact for you: if you use --safe-links, some symlinks that previously "passed" may now be ignored — check the backup output after upgrading and make sure legitimate symlinks (those pointing inside the tree) are still synced.
Note
After a 3.3.x → 3.4.x upgrade, a good habit: run rsync -avhn -i (episode 16) once and compare the output with previous results. --safe-links and filter behavior changes usually stand out clearly there.
Behind the scenes, 3.4.x rewrote rsync's internal argument parser. This isn't just cosmetic: the old parser had inconsistent behavior and security gaps in how it handled options. The rewrite makes parsing stricter, errors clearer, and behavior more predictable.
Impacts you might feel:
If an old rsync script suddenly shows errors after upgrading, this is likely the cause — the parser now rejects what it previously tolerated. Read the error message, fix the options, and update the script.
Besides the three pillars above, 3.4.x brings general quality improvements:
There are no major new features — and that's actually good news. Rsync in 3.4.x is the most mature, most secure, and most stable version in its history.
How to check the version you're using:
rsync --version | head -3rsync version 3.4.4 protocol version 31
Copyright (C) 1996-2026 by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/The first line contains the version and protocol version. Audit habit: collect the version from all servers, compare with the latest release at download.samba.org/pub/rsync/NEWS.
The classic problem: LTS distros pin an old rsync version and apply fixes silently (backporting). As a result, rsync --version still prints 3.2.7, even though security-wise it's equivalent to 3.4.x.
How to check whether your distro backports:
apt changelog rsync # Debian/Ubuntu
dnf updateinfo list rsync # RHEL/FedoraIf the changelog contains CVE entries (CVE-2024-12084, etc.) at the same version, the distro backports — safe. If not, and the version is still old, don't assume it's safe: build a static rsync ≥3.4.4 (from source) or install the package from a newer repo.
Important
A safe rule of thumb: trust = version ≥3.4.4 OR a distro changelog that clearly lists all relevant CVEs. "It's already in the distro repo" guarantees nothing without backport evidence.
In this episode you've understood what's actually inside rsync 3.4.x.
Key takeaways:
--safe-links was overhauled — stricter behavior; check backups after upgrading.rsync --version; make sure your distro really backports fixes.In episode 18 we level up: performance tuning for large datasets — --whole-file for fast networks vs delta for slow ones, parallelism with multiple rsyncs per shard, NIC/disk benchmarks, plus case studies of MongoDB/Postgres data dirs, media libraries, and TB-level datasets. See you in episode 18!