On Mon, Jul 26, 2021 at 06:28:57PM +0100, Richard W.M. Jones wrote:
Although it probably cannot happen on Linux, POSIX allows pread/pwrite to return or write fewer bytes than requested. The cache and cow filters didn't handle this situation. Replace the raw pread(2)/pwrite(2) syscalls with alternate versions which can handle this.
Short reads and writes are unlikely to happen for regular files, but are a definite possibility on named FIFOs, as well as block and char devices. While our local cache happens to use a regular file, it is indeed always better practice to write robust code.
--- common/utils/Makefile.am | 1 + common/utils/utils.h | 2 + common/utils/full-rw.c | 81 ++++++++++++++++++++++++++++++++++++++++ filters/cache/blk.c | 10 ++--- filters/cow/blk.c | 6 +-- 5 files changed, 92 insertions(+), 8 deletions(-)
-- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org