[Midnightbsd-cvs] src [9894] trunk/sys/xdr: sync with FreeBSD 10-stable

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Thu May 24 18:23:19 EDT 2018


Revision: 9894
          http://svnweb.midnightbsd.org/src/?rev=9894
Author:   laffer1
Date:     2018-05-24 18:23:18 -0400 (Thu, 24 May 2018)
Log Message:
-----------
sync with FreeBSD 10-stable

Modified Paths:
--------------
    trunk/sys/xdr/xdr.c
    trunk/sys/xdr/xdr_mbuf.c
    trunk/sys/xdr/xdr_mem.c

Modified: trunk/sys/xdr/xdr.c
===================================================================
--- trunk/sys/xdr/xdr.c	2018-05-24 22:21:53 UTC (rev 9893)
+++ trunk/sys/xdr/xdr.c	2018-05-24 22:23:18 UTC (rev 9894)
@@ -51,6 +51,8 @@
 #include <sys/kernel.h>
 #include <sys/malloc.h>
 
+#include <rpc/rpc.h>
+#include <rpc/rpc_com.h>
 #include <rpc/types.h>
 #include <rpc/xdr.h>
 
@@ -62,7 +64,6 @@
  */
 #define XDR_FALSE	((long) 0)
 #define XDR_TRUE	((long) 1)
-#define LASTUNSIGNED	((u_int) 0-1)
 
 /*
  * for unit alignment
@@ -503,6 +504,7 @@
 {
 	char *sp = *cpp;  /* sp is the actual string pointer */
 	u_int nodesize;
+	bool_t ret, allocated = FALSE;
 
 	/*
 	 * first deal with the length since xdr bytes are counted
@@ -526,6 +528,7 @@
 		}
 		if (sp == NULL) {
 			*cpp = sp = mem_alloc(nodesize);
+			allocated = TRUE;
 		}
 		if (sp == NULL) {
 			printf("xdr_bytes: out of memory");
@@ -534,7 +537,14 @@
 		/* FALLTHROUGH */
 
 	case XDR_ENCODE:
-		return (xdr_opaque(xdrs, sp, nodesize));
+		ret = xdr_opaque(xdrs, sp, nodesize);
+		if ((xdrs->x_op == XDR_DECODE) && (ret == FALSE)) {
+			if (allocated == TRUE) {
+				mem_free(sp, nodesize);
+				*cpp = NULL;
+			}
+		}
+		return (ret);
 
 	case XDR_FREE:
 		if (sp != NULL) {
@@ -622,6 +632,7 @@
 	char *sp = *cpp;  /* sp is the actual string pointer */
 	u_int size;
 	u_int nodesize;
+	bool_t ret, allocated = FALSE;
 
 	/*
 	 * first deal with the length since xdr strings are counted-strings
@@ -655,8 +666,10 @@
 		if (nodesize == 0) {
 			return (TRUE);
 		}
-		if (sp == NULL)
+		if (sp == NULL) {
 			*cpp = sp = mem_alloc(nodesize);
+			allocated = TRUE;
+		}
 		if (sp == NULL) {
 			printf("xdr_string: out of memory");
 			return (FALSE);
@@ -665,7 +678,14 @@
 		/* FALLTHROUGH */
 
 	case XDR_ENCODE:
-		return (xdr_opaque(xdrs, sp, size));
+		ret = xdr_opaque(xdrs, sp, size);
+		if ((xdrs->x_op == XDR_DECODE) && (ret == FALSE)) {
+			if (allocated == TRUE) {
+				mem_free(sp, nodesize);
+				*cpp = NULL;
+			}
+		}
+		return (ret);
 
 	case XDR_FREE:
 		mem_free(sp, nodesize);
@@ -683,7 +703,7 @@
 bool_t
 xdr_wrapstring(XDR *xdrs, char **cpp)
 {
-	return xdr_string(xdrs, cpp, LASTUNSIGNED);
+	return xdr_string(xdrs, cpp, RPC_MAXDATASIZE);
 }
 
 /*

Modified: trunk/sys/xdr/xdr_mbuf.c
===================================================================
--- trunk/sys/xdr/xdr_mbuf.c	2018-05-24 22:21:53 UTC (rev 9893)
+++ trunk/sys/xdr/xdr_mbuf.c	2018-05-24 22:23:18 UTC (rev 9894)
@@ -123,7 +123,7 @@
 	if (m)
 		m_adj(m, xdrs->x_handy);
 	else
-		MGET(m, M_WAITOK, MT_DATA);
+		m = m_get(M_WAITOK, MT_DATA);
 	return (m);
 }
 
@@ -228,9 +228,10 @@
 
 		if (xdrs->x_handy == m->m_len && M_TRAILINGSPACE(m) == 0) {
 			if (!m->m_next) {
-				MGET(n, M_TRYWAIT, m->m_type);
 				if (m->m_flags & M_EXT)
-					MCLGET(n, M_TRYWAIT);
+					n = m_getcl(M_WAITOK, m->m_type, 0);
+				else
+					n = m_get(M_WAITOK, m->m_type);
 				m->m_next = n;
 			}
 			m = m->m_next;

Modified: trunk/sys/xdr/xdr_mem.c
===================================================================
--- trunk/sys/xdr/xdr_mem.c	2018-05-24 22:21:53 UTC (rev 9893)
+++ trunk/sys/xdr/xdr_mem.c	2018-05-24 22:23:18 UTC (rev 9894)
@@ -214,7 +214,7 @@
 static int32_t *
 xdrmem_inline_aligned(XDR *xdrs, u_int len)
 {
-	int32_t *buf = 0;
+	int32_t *buf = NULL;
 
 	if (xdrs->x_handy >= len) {
 		xdrs->x_handy -= len;



More information about the Midnightbsd-cvs mailing list