CVS commit: src/external/cddl/osnet/dist/common/nvpair

2021-05-21 Thread Juergen Hannken-Illjes
Module Name:src
Committed By:   hannken
Date:   Fri May 21 17:32:49 UTC 2021

Modified Files:
src/external/cddl/osnet/dist/common/nvpair: nvpair.c

Log Message:
Replace the Solaris style endian check (exactly one of
_LITTLE_ENDIAN or _BIG_ENDIAN is defined) with standard check
"#if BYTE_ORDER == BIG_ENDIAN" like we do it elseware.

Should fix PR 56191 (ZFS tests fail on sparc64)


To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/external/cddl/osnet/dist/common/nvpair/nvpair.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/cddl/osnet/dist/common/nvpair/nvpair.c
diff -u src/external/cddl/osnet/dist/common/nvpair/nvpair.c:1.5 src/external/cddl/osnet/dist/common/nvpair/nvpair.c:1.6
--- src/external/cddl/osnet/dist/common/nvpair/nvpair.c:1.5	Mon Mar  2 15:45:33 2020
+++ src/external/cddl/osnet/dist/common/nvpair/nvpair.c	Fri May 21 17:32:49 2021
@@ -2255,11 +2255,11 @@ nvlist_common(nvlist_t *nvl, char *buf, 
 	int err = 0;
 	nvstream_t nvs;
 	int nvl_endian;
-#ifdef	_LITTLE_ENDIAN
-	int host_endian = 1;
-#else
+#if BYTE_ORDER == BIG_ENDIAN
 	int host_endian = 0;
-#endif	/* _LITTLE_ENDIAN */
+#else
+	int host_endian = 1;
+#endif	/* BYTE_ORDER */
 	nvs_header_t *nvh = (void *)buf;
 
 	if (buflen == NULL || nvl == NULL ||



CVS commit: src/external/cddl/osnet/dist/common/nvpair

2020-03-02 Thread Kamil Rytarowski
Module Name:src
Committed By:   kamil
Date:   Mon Mar  2 15:45:33 UTC 2020

Modified Files:
src/external/cddl/osnet/dist/common/nvpair: nvpair.c

Log Message:
Fix undefined behavior in misaligned pointer usage

Detected by UBSan and already fixed upstream.

Cherry-pick:
>From aa0218d6a12814fac50b287214f9f3b0b99e11b1 Mon Sep 17 00:00:00 2001
From: Brian Behlendorf 
Date: Tue, 7 Jan 2014 23:24:37 +0100
Subject: [PATCH] Fix nvlist 'Bus Error' for Sparc

The mis-aligned memory accesses in nvpair_native_embedded() and
nvpair_native_embedded_array() will cause a 'Bus Error' for
architectures such as Sparc which not fully byte addressible.
To avoid this issue care is taken to avoid dereferencing the
potentially mis-aligned packed nvlist_t.

Signed-off-by: Brian Behlendorf 
Signed-off-by: Ned Bass 
Signed-off-by: marku89 
Issue #1700


To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/external/cddl/osnet/dist/common/nvpair/nvpair.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/cddl/osnet/dist/common/nvpair/nvpair.c
diff -u src/external/cddl/osnet/dist/common/nvpair/nvpair.c:1.4 src/external/cddl/osnet/dist/common/nvpair/nvpair.c:1.5
--- src/external/cddl/osnet/dist/common/nvpair/nvpair.c:1.4	Mon May 28 21:05:04 2018
+++ src/external/cddl/osnet/dist/common/nvpair/nvpair.c	Mon Mar  2 15:45:33 2020
@@ -2586,7 +2586,8 @@ nvpair_native_embedded(nvstream_t *nvs, 
 		 * structure. The address may not be aligned, so we have
 		 * to use bzero.
 		 */
-		bzero(>nvl_priv, sizeof (packed->nvl_priv));
+		bzero((char *)packed + offsetof(nvlist_t, nvl_priv),
+		sizeof (uint64_t));
 	}
 
 	return (nvs_embedded(nvs, EMBEDDED_NVL(nvp)));
@@ -2614,7 +2615,8 @@ nvpair_native_embedded_array(nvstream_t 
 			 * packed structure. The address may not be aligned,
 			 * so we have to use bzero.
 			 */
-			bzero(>nvl_priv, sizeof (packed->nvl_priv));
+			bzero((char *)packed + offsetof(nvlist_t, nvl_priv),
+			sizeof (uint64_t));
 	}
 
 	return (nvs_embedded_nvl_array(nvs, nvp, NULL));



CVS commit: src/external/cddl/osnet/dist/common/nvpair

2015-04-10 Thread Taylor R Campbell
Module Name:src
Committed By:   riastradh
Date:   Fri Apr 10 22:29:35 UTC 2015

Modified Files:
src/external/cddl/osnet/dist/common/nvpair: nvpair.c

Log Message:
Initialize variables.  Don't bother supporting nv doubles.


To generate a diff of this commit:
cvs rdiff -u -r1.2 -r1.3 src/external/cddl/osnet/dist/common/nvpair/nvpair.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/cddl/osnet/dist/common/nvpair/nvpair.c
diff -u src/external/cddl/osnet/dist/common/nvpair/nvpair.c:1.2 src/external/cddl/osnet/dist/common/nvpair/nvpair.c:1.3
--- src/external/cddl/osnet/dist/common/nvpair/nvpair.c:1.2	Thu Jan  3 16:41:51 2013
+++ src/external/cddl/osnet/dist/common/nvpair/nvpair.c	Fri Apr 10 22:29:35 2015
@@ -1606,10 +1606,10 @@ nvlist_lookup_nvpair_ei_sep(nvlist_t *nv
 {
 	nvpair_t	*nvp;
 	const char	*np;
-	char		*sepp;
+	char		*sepp = NULL;
 	char		*idxp, *idxep;
 	nvlist_t	**nva;
-	long		idx;
+	long		idx = -1;
 	int		n;
 
 	if (ip)
@@ -3008,11 +3008,13 @@ nvs_xdr_nvp_op(nvstream_t *nvs, nvpair_t
 		 */
 		ret = xdr_longlong_t(xdr, (void *)buf);
 		break;
+#ifndef __NetBSD__
 #if !defined(_KERNEL)
 	case DATA_TYPE_DOUBLE:
 		ret = xdr_double(xdr, (void *)buf);
 		break;
 #endif
+#endif
 	case DATA_TYPE_STRING:
 		ret = xdr_string(xdr, buf, buflen - 1);
 		break;