changeset 23877:28fe0f57abf4

13353 loader: 13345 did miss byte and nvlist array Reviewed by: Andy Fiddaman <andy@omnios.org> Approved by: Robert Mustacchi <rm@fingolfin.org>
author Toomas Soome <tsoome@me.com>
date Mon, 07 Dec 2020 13:11:22 +0200
parents d3b17b1cf245
children 03b38e24bfd3
files usr/src/boot/Makefile.version usr/src/boot/lib/libstand/zfs/nvlist.c
diffstat 2 files changed, 13 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/boot/Makefile.version	Sat Dec 05 22:37:28 2020 +0200
+++ b/usr/src/boot/Makefile.version	Mon Dec 07 13:11:22 2020 +0200
@@ -34,4 +34,4 @@
 # Use date like formatting here, YYYY.MM.DD.XX, without leading zeroes.
 # The version is processed from left to right, the version number can only
 # be increased.
-BOOT_VERSION = $(LOADER_VERSION)-2020.12.05.0
+BOOT_VERSION = $(LOADER_VERSION)-2020.12.07.1
--- a/usr/src/boot/lib/libstand/zfs/nvlist.c	Sat Dec 05 22:37:28 2020 +0200
+++ b/usr/src/boot/lib/libstand/zfs/nvlist.c	Mon Dec 07 13:11:22 2020 +0200
@@ -1222,10 +1222,9 @@
 		break;
 
 	case DATA_TYPE_BYTE_ARRAY:
-		*(unsigned *)nvl->nv_idx = encoded_size;
-		nvl->nv_idx += sizeof (unsigned);
-		bcopy(data, nvl->nv_idx, nelem);
-		nvl->nv_idx += encoded_size;
+		xdr.xdr_idx += xdr.xdr_putuint(&xdr, encoded_size);
+		bcopy(data, xdr.xdr_idx, nelem);
+		xdr.xdr_idx += NV_ALIGN4(encoded_size);
 		break;
 
 	case DATA_TYPE_STRING:
@@ -1311,20 +1310,20 @@
 		break;
 
 	case DATA_TYPE_NVLIST_ARRAY: {
-		uint8_t *buf = nvl->nv_idx;
 		size_t size;
-		xdr_t xdr;
+		xdr_t xdr_nv;
 
 		for (uint32_t i = 0; i < nelem; i++) {
-			xdr.xdr_idx = ((nvlist_t **)data)[i]->nv_data;
-			xdr.xdr_buf = xdr.xdr_idx;
-			xdr.xdr_buf_size = ((nvlist_t **)data)[i]->nv_size;
+			xdr_nv.xdr_idx = ((nvlist_t **)data)[i]->nv_data;
+			xdr_nv.xdr_buf = xdr_nv.xdr_idx;
+			xdr_nv.xdr_buf_size = ((nvlist_t **)data)[i]->nv_size;
 
-			if (!nvlist_size_native(&xdr, &size))
+			if (!nvlist_size_native(&xdr_nv, &size))
 				return (EINVAL);
 
-			bcopy(((nvlist_t **)data)[i]->nv_data, buf, size);
-			buf += size;
+			bcopy(((nvlist_t **)data)[i]->nv_data, xdr.xdr_idx,
+			    size);
+			xdr.xdr_idx += size;
 		}
 		break;
 	}
@@ -1617,6 +1616,7 @@
 	case DATA_TYPE_INT64_ARRAY:
 	case DATA_TYPE_UINT64_ARRAY: {
 		uint64_t *u;
+
 		if (xdr_array(&xdr, nvp_data->nv_nelem,
 		    (xdrproc_t)xdr_uint64)) {
 			u = (uint64_t *)(nvp_data->nv_data + sizeof (unsigned));