Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 04 Mar 2026 15:58:41 +0000
From:      Ed Maste <emaste@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Cc:        Mark Johnston <markj@FreeBSD.org>
Subject:   git: 119bdea35792 - stable/15 - bhyve: Fix truncate_iov()
Message-ID:  <69a856b1.363e1.7a39dc8a@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch stable/15 has been updated by emaste:

URL: https://cgit.FreeBSD.org/src/commit/?id=119bdea35792006cd0cce3c864d5007f092a10c1

commit 119bdea35792006cd0cce3c864d5007f092a10c1
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2026-02-24 15:14:39 +0000
Commit:     Ed Maste <emaste@FreeBSD.org>
CommitDate: 2026-03-04 15:58:05 +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 <vinod272@gmail.com>
    Reviewed by:    des, emaste, Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org>
    MFC after:      3 days
    Differential Revision:  https://reviews.freebsd.org/D55438
    
    (cherry picked from commit d7d4da91de201841c57a6b8f89b450754b9b8696)
---
 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


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69a856b1.363e1.7a39dc8a>