Page MenuHomeFreeBSD

D55800.id173522.diff
No OneTemporary

D55800.id173522.diff

diff --git a/usr.sbin/bhyve/iov.h b/usr.sbin/bhyve/iov.h
--- a/usr.sbin/bhyve/iov.h
+++ b/usr.sbin/bhyve/iov.h
@@ -40,7 +40,7 @@
struct iovec *split_iov(struct iovec *, size_t *, size_t, size_t *);
size_t count_iov(const struct iovec *, size_t);
bool check_iov_len(const struct iovec *, size_t, size_t);
-ssize_t iov_to_buf(const struct iovec *, size_t, void **);
-ssize_t buf_to_iov(const void *, size_t, const struct iovec *, size_t);
+size_t iov_to_buf(const struct iovec *, size_t, void **);
+size_t buf_to_iov(const void *, size_t, const struct iovec *, size_t);
#endif /* _IOV_H_ */
diff --git a/usr.sbin/bhyve/iov.c b/usr.sbin/bhyve/iov.c
--- a/usr.sbin/bhyve/iov.c
+++ b/usr.sbin/bhyve/iov.c
@@ -110,16 +110,19 @@
return (false);
}
-ssize_t
+size_t
iov_to_buf(const struct iovec *iov, size_t niov, void **buf)
{
size_t ptr, total;
size_t i;
total = count_iov(iov, niov);
- *buf = realloc(*buf, total);
+ if (total == 0)
+ return (0);
+
+ *buf = reallocf(*buf, total);
if (*buf == NULL)
- return (-1);
+ return (0);
for (i = 0, ptr = 0; i < niov; i++) {
memcpy((uint8_t *)*buf + ptr, iov[i].iov_base, iov[i].iov_len);
@@ -129,7 +132,7 @@
return (total);
}
-ssize_t
+size_t
buf_to_iov(const void *buf, size_t buflen, const struct iovec *iov, size_t niov)
{
size_t off = 0, len;
@@ -141,5 +144,5 @@
off += len;
}
- return ((ssize_t)off);
+ return (off);
}
diff --git a/usr.sbin/bhyve/pci_virtio_scsi.c b/usr.sbin/bhyve/pci_virtio_scsi.c
--- a/usr.sbin/bhyve/pci_virtio_scsi.c
+++ b/usr.sbin/bhyve/pci_virtio_scsi.c
@@ -747,8 +747,11 @@
* This will have to change if we begin allowing config space writes
* to change sense size.
*/
- assert(iov_to_buf(req->vsr_iov_in, req->vsr_niov_in,
- (void **)&req->vsr_cmd_rd) == VTSCSI_IN_HEADER_LEN(q->vsq_sc));
+ if (iov_to_buf(req->vsr_iov_in, req->vsr_niov_in,
+ (void **)&req->vsr_cmd_rd) != VTSCSI_IN_HEADER_LEN(q->vsq_sc)) {
+ EPRINTLN("unexpected bufsize from iov_to_buf()");
+ exit(4);
+ }
/* Make sure this request addresses a valid LUN. */
if (pci_vtscsi_check_lun(req->vsr_cmd_rd->lun) == false) {

File Metadata

Mime Type
text/plain
Expires
Mon, Apr 6, 11:02 AM (8 h, 3 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30962284
Default Alt Text
D55800.id173522.diff (2 KB)

Event Timeline