All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH V4] xdrstdio_create buffers do not output encoded values on ppc
@ 2018-07-11 15:25 Steve Dickson
  2018-07-11 16:05 ` Steve Dickson
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Steve Dickson @ 2018-07-11 15:25 UTC (permalink / raw)
  To: Libtirpc-devel Mailing List; +Cc: Linux NFS Mailing list

The cause is that the xdr_putlong uses a long to store the
converted value, then passes it to fwrite as a byte buffer.
Only the first 4 bytes are written, which is okay for a LE
system after byteswapping, but writes all zeroes on BE systems.

Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1261738

Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
---
v4: Use UINT32_MAX instead of INT32_MAX in boundary check.

v3: Reworked the bounds checking

v2: Added bounds checking
    Changed from unsigned to signed

 src/xdr_stdio.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/xdr_stdio.c b/src/xdr_stdio.c
index 4410262..846c7bf 100644
--- a/src/xdr_stdio.c
+++ b/src/xdr_stdio.c
@@ -38,6 +38,7 @@
  */
 
 #include <stdio.h>
+#include <stdint.h>
 
 #include <arpa/inet.h>
 #include <rpc/types.h>
@@ -103,10 +104,12 @@ xdrstdio_getlong(xdrs, lp)
 	XDR *xdrs;
 	long *lp;
 {
+	int32_t mycopy;
 
-	if (fread(lp, sizeof(int32_t), 1, (FILE *)xdrs->x_private) != 1)
+	if (fread(&mycopy, sizeof(int32_t), 1, (FILE *)xdrs->x_private) != 1)
 		return (FALSE);
-	*lp = (long)ntohl((u_int32_t)*lp);
+
+	*lp = (long)ntohl(mycopy);
 	return (TRUE);
 }
 
@@ -115,8 +118,14 @@ xdrstdio_putlong(xdrs, lp)
 	XDR *xdrs;
 	const long *lp;
 {
-	long mycopy = (long)htonl((u_int32_t)*lp);
+	int32_t mycopy;
+
+#if defined(_LP64)
+	if ((*lp > UINT32_MAX) || (*lp < INT32_MIN))
+		return (FALSE);
+#endif
 
+	mycopy = (int32_t)htonl((int32_t)*lp);
 	if (fwrite(&mycopy, sizeof(int32_t), 1, (FILE *)xdrs->x_private) != 1)
 		return (FALSE);
 	return (TRUE);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2018-07-23 21:36 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-11 15:25 [PATCH V4] xdrstdio_create buffers do not output encoded values on ppc Steve Dickson
2018-07-11 16:05 ` Steve Dickson
2018-07-11 16:38   ` Trond Myklebust
2018-07-11 18:06     ` [Libtirpc-devel] " Chuck Lever
2018-07-11 18:19       ` Trond Myklebust
2018-07-11 20:42         ` Chuck Lever
2018-07-11 20:58           ` Trond Myklebust
2018-07-18 18:32 ` Steve Dickson
2018-07-23 18:43 ` Marc Eshel
2018-07-23 20:33   ` your mail Bruce Fields
     [not found] ` <OFA232E502.EADD3A82-ON882582D3.00667F9D-882582D3.0066E08D@LocalDomain>
2018-07-23 18:45   ` IETF RFC 8276 - File System Extended Attributes in NFSv4 Marc Eshel

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.