Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

xdrgen: Fix return code checking in built-in XDR decoders

xdr_stream_encode_u32() returns XDR_UNIT on success.
xdr_stream_decode_u32() returns zero or -EMSGSIZE, but never
XDR_UNIT.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>

+5 -5
+2 -2
include/linux/sunrpc/xdrgen/_builtins.h
··· 184 184 __be32 *p; 185 185 u32 len; 186 186 187 - if (unlikely(xdr_stream_decode_u32(xdr, &len) != XDR_UNIT)) 187 + if (unlikely(xdr_stream_decode_u32(xdr, &len) < 0)) 188 188 return false; 189 189 if (unlikely(maxlen && len > maxlen)) 190 190 return false; ··· 215 215 __be32 *p; 216 216 u32 len; 217 217 218 - if (unlikely(xdr_stream_decode_u32(xdr, &len) != XDR_UNIT)) 218 + if (unlikely(xdr_stream_decode_u32(xdr, &len) < 0)) 219 219 return false; 220 220 if (unlikely(maxlen && len > maxlen)) 221 221 return false;
+1 -1
tools/net/sunrpc/xdrgen/templates/C/pointer/decoder/variable_length_array.j2
··· 2 2 {% if annotate %} 3 3 /* member {{ name }} (variable-length array) */ 4 4 {% endif %} 5 - if (xdr_stream_decode_u32(xdr, &ptr->{{ name }}.count) != XDR_UNIT) 5 + if (xdr_stream_decode_u32(xdr, &ptr->{{ name }}.count) < 0) 6 6 return false; 7 7 {% if maxsize != "0" %} 8 8 if (ptr->{{ name }}.count > {{ maxsize }})
+1 -1
tools/net/sunrpc/xdrgen/templates/C/struct/decoder/variable_length_array.j2
··· 2 2 {% if annotate %} 3 3 /* member {{ name }} (variable-length array) */ 4 4 {% endif %} 5 - if (xdr_stream_decode_u32(xdr, &ptr->{{ name }}.count) != XDR_UNIT) 5 + if (xdr_stream_decode_u32(xdr, &ptr->{{ name }}.count) < 0) 6 6 return false; 7 7 {% if maxsize != "0" %} 8 8 if (ptr->{{ name }}.count > {{ maxsize }})
+1 -1
tools/net/sunrpc/xdrgen/templates/C/union/decoder/variable_length_array.j2
··· 2 2 {% if annotate %} 3 3 /* member {{ name }} (variable-length array) */ 4 4 {% endif %} 5 - if (xdr_stream_decode_u32(xdr, &count) != XDR_UNIT) 5 + if (xdr_stream_decode_u32(xdr, &count) < 0) 6 6 return false; 7 7 if (count > {{ maxsize }}) 8 8 return false;