summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStefano Garzarella <sgarzare@redhat.com>2019-09-03 10:54:11 -0400
committerSteve Dickson <steved@redhat.com>2019-09-03 11:01:58 -0400
commitd1208b5de7b52172a34e3a7262e96f99830c9770 (patch)
tree46176eefc9ce7d093909d18c6688e71d27e4f48b /src
parente51590d6c4ab61f1a22a2f47104053fe2966ecdd (diff)
downloadti-rpc-d1208b5de7b52172a34e3a7262e96f99830c9770.tar.gz
xdr: add a defensive mask in xdr_int64_t() and xdr_u_int64_t()
In order to be more defensive, we should mask bits of u_int64_t value if we want to use only the first 32bit. Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'src')
-rw-r--r--src/xdr.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/xdr.c b/src/xdr.c
index b9a1558..28d1382 100644
--- a/src/xdr.c
+++ b/src/xdr.c
@@ -877,7 +877,8 @@ xdr_int64_t(xdrs, llp)
if (XDR_GETLONG(xdrs, (long *)&ul[1]) == FALSE)
return (FALSE);
*llp = (int64_t)
- (((u_int64_t)ul[0] << 32) | ((u_int64_t)ul[1]));
+ (((u_int64_t)ul[0] << 32) |
+ ((u_int64_t)(ul[1]) & 0xffffffff));
return (TRUE);
case XDR_FREE:
return (TRUE);
@@ -910,7 +911,8 @@ xdr_u_int64_t(xdrs, ullp)
if (XDR_GETLONG(xdrs, (long *)&ul[1]) == FALSE)
return (FALSE);
*ullp = (u_int64_t)
- (((u_int64_t)ul[0] << 32) | ((u_int64_t)ul[1]));
+ (((u_int64_t)ul[0] << 32) |
+ ((u_int64_t)(ul[1]) & 0xffffffff));
return (TRUE);
case XDR_FREE:
return (TRUE);