Mercurial > illumos > git > illumos-omnios
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));