[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