rsync v3.5.2 released
By SecBurg
rsync is the go-to Unix tool for fast, incremental file transfers - backups, mirrors and deployments over SSH or the rsync daemon.
v3.5.2 fixes CVE-2026-119741 (bounded strong-checksum work against a malicious receiver) and a long list of other bugs found since 3.5.1. It also adds process-priority controls via the new –nice option.
BUG FIXES:
- Fixed interrupted `--append` and `--inplace` transfers writing the final
256 KiB buffer twice. An interrupted destination now remains a clean prefix
which the next transfer can resume or repair.
- Fixed uploads through `rrsync` when the destination file already exists.
Existing files are now reached beneath a pinned parent directory instead of
being passed as an unwritable `/proc/self/fd/N` destination.
- Fixed poor matching performance on large sparse and repeated-block files
when duplicate checksum chains exhausted the search limit. Valid basis
blocks are no longer hidden behind duplicate entries.
- Bounded strong-checksum work when a malicious receiver supplies weak
checksums that collide with consecutive rolling windows
(CVE-2026-119741).
- Prevented the `--inplace` matcher from advancing its aligned basis index
beyond the available checksum entries. This avoids signed overflow on large
source files when the peer supplies a small block count.
- Recovered from failed hard-link creation without aborting or hanging the
generator. Remaining members fall back to a fresh hard-link group when the
original destination inode cannot accept another link.
- Prevented an out-of-bounds write while invalidating a sender checksum after
a file read error when the negotiated checksum length is zero.
- Fixed a daemon receiver stack overflow when queued deletion output reached
`--max-alloc`. Quiet daemon transfers no longer queue deletion messages
unless the client requested them.
- Fixed a `--files-from` pull from a subdirectory of a daemon module, which
read each listed file from the module root instead. It could send, and with
`--remove-source-files` delete, a same-named file the module's filter
excludes.
- Fixed password files whose first line is empty. The parser no longer skips
the empty line and uses a later password.
- Escaped terminal control characters in filenames and diagnostics written to
standard output, standard error and log files while preserving printable
text in the active locale.
- Preserved Cygwin and MSYS2 UNC roots during ownership-checked path walks.
- Restored daemon startup from accepted named Unix sockets on standard input,
including filesystem and Linux abstract sockets used for socket activation.
Unnamed local socket pairs remain non-daemon channels.
- Fixed forward-DNS hostname entries in daemon `hosts allow` and `hosts deny`
lists for IPv6 peers. Address comparison is now binary and family-aware.
- Preserved Unix symlink permissions on systems which require `fchmodat()` to
change the mode of a symlink rather than its target.
- Restored builds on systems without `O_CLOEXEC` or `O_DIRECTORY`, including
Solaris 10.
ENHANCEMENTS:
- Added `--nice` to adjust CPU and I/O scheduling priorities for local and
remote rsync processes. Daemon clients and rrsync cannot raise server-side
priorities.
- Human-readable output now uses dynamic precision to show three significant
digits and appends `i` to binary unit suffixes. `--progress` uses the same
formatter for transfer rates and labels byte counts and rates with `B` and
`B/s`. Example output includes `46.7M`, `48.8Mi`, `782,448B` and
`113,295B/s`. File-list, created-directory and skipped-deletion counts also
use thousands separators.
- Added `--delay-symlinks` to defer creating new and changed symlinks until
other transferred files are in place. It implies `--no-inc-recursive` and
requires protocol 29 or newer with support on the receiving side. It cannot
be combined with `--remove-source-files`, `--hard-links`, `--compare-dest`,
`--copy-dest` or `--link-dest`.
Full changelog: NEWS file
Happy syncing! :-)