The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=d7d4da91de201841c57a6b8f89b450754b9b8696
commit d7d4da91de201841c57a6b8f89b450754b9b8696 Author: Mark Johnston <[email protected]> AuthorDate: 2026-02-24 15:14:39 +0000 Commit: Mark Johnston <[email protected]> CommitDate: 2026-02-24 15:14:39 +0000 bhyve: Fix truncate_iov() The implementation was simply wrong. It would always just return the first entry in the iovec, even if the requested length is larger than that first entry. Note, this function will be removed soon, see D53468. Reported by: Vinod p n <[email protected]> Reviewed by: des, emaste, Hans Rosenfeld <[email protected]> MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D55438 --- usr.sbin/bhyve/iov.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/usr.sbin/bhyve/iov.c b/usr.sbin/bhyve/iov.c index 5ebc426227a6..2bad55267ff3 100644 --- a/usr.sbin/bhyve/iov.c +++ b/usr.sbin/bhyve/iov.c @@ -81,19 +81,14 @@ count_iov(const struct iovec *iov, int niov) void truncate_iov(struct iovec *iov, int *niov, size_t length) { - size_t done = 0; int i; - for (i = 0; i < *niov; i++) { - size_t toseek = MIN(length - done, iov[i].iov_len); - done += toseek; - - if (toseek <= iov[i].iov_len) { - iov[i].iov_len = toseek; - *niov = i + 1; - return; - } + for (i = 0; i < *niov && length > 0; i++) { + if (length < iov[i].iov_len) + iov[i].iov_len = length; + length -= iov[i].iov_len; } + *niov = i; } ssize_t
