mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-16 02:14:58 +00:00
NLM: Fix svcxdr_encode_owner()
Dai Ngo reports that, since the XDR overhaul, the NLM server crashes when the TEST procedure wants to return NLM_DENIED. There is a bug in svcxdr_encode_owner() that none of our standard test cases found. Replace the open-coded function with a call to an appropriate pre-fabricated XDR helper. Reported-by: Dai Ngo <Dai.Ngo@oracle.com> Fixes: a6a63ca5652e ("lockd: Common NLM XDR helpers") Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
This commit is contained in:
parent
0c217d5066
commit
89c485c7a3
@ -134,18 +134,9 @@ svcxdr_decode_owner(struct xdr_stream *xdr, struct xdr_netobj *obj)
|
||||
static inline bool
|
||||
svcxdr_encode_owner(struct xdr_stream *xdr, const struct xdr_netobj *obj)
|
||||
{
|
||||
unsigned int quadlen = XDR_QUADLEN(obj->len);
|
||||
__be32 *p;
|
||||
|
||||
if (xdr_stream_encode_u32(xdr, obj->len) < 0)
|
||||
if (obj->len > XDR_MAX_NETOBJ)
|
||||
return false;
|
||||
p = xdr_reserve_space(xdr, obj->len);
|
||||
if (!p)
|
||||
return false;
|
||||
p[quadlen - 1] = 0; /* XDR pad */
|
||||
memcpy(p, obj->data, obj->len);
|
||||
|
||||
return true;
|
||||
return xdr_stream_encode_opaque(xdr, obj->data, obj->len) > 0;
|
||||
}
|
||||
|
||||
#endif /* _LOCKD_SVCXDR_H_ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user