dissect-image: fix wrong errno on pread failure
In acquire_sig_for_roothash() the pread() failure branch returns
-ENOMEM, which is copy-pasted from the malloc() check immediately
above it:
_cleanup_free_ char *buf = new(char, partition_size+1);
if (!buf)
return -ENOMEM;
ssize_t n = pread(fd, buf, partition_size, partition_offset);
if (n < 0)
return -ENOMEM;
pread() sets errno to the actual I/O failure (EIO, EINTR, EBADF,
...). Aliasing those to -ENOMEM misleads dissect_log_error() and
any caller that branches on the returned code; verity signature
lookup failures get reported as out-of-memory.
Fix by returning -errno from the pread() failure branch. The
malloc() branch above is correct and unchanged.
Fixes: 98ca65c36a ("dissect: check that roothash in signature matches before selecting partition")
Assisted-by: kres (claude-opus-4-7)
Signed-off-by: Chris Mason <clm@meta.com>
This commit is contained in:
committed by
Lennart Poettering
parent
f134bca68b
commit
fa0cd9b79f
@@ -717,7 +717,7 @@ static int acquire_sig_for_roothash(
|
||||
|
||||
ssize_t n = pread(fd, buf, partition_size, partition_offset);
|
||||
if (n < 0)
|
||||
return -ENOMEM;
|
||||
return -errno;
|
||||
if ((uint64_t) n != partition_size)
|
||||
return -EIO;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user