• Chuck Lever's avatar
    xprtrdma: Replace use of xdr_stream_pos in rpcrdma_marshal_req · 1310051c
    Chuck Lever authored
    This is a latent bug. xdr_stream_pos works by subtracting
    xdr_stream::nwords from xdr_buf::len. But xdr_stream::nwords is not
    initialized by xdr_init_encode().
    
    It works today only because all fields in rpcrdma_req::rl_stream
    are initialized to zero by rpcrdma_req_create, making the
    subtraction in xdr_stream_pos always a no-op.
    
    I found this issue via code inspection. It was introduced by commit
    39f4cd9e ("xprtrdma: Harden chunk list encoding against send
    buffer overflow"), but the code has changed enough since then that
    this fix can't be automatically applied to stable.
    Signed-off-by: default avatarChuck Lever <chuck.lever@oracle.com>
    Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
    1310051c
rpcrdma.h 34.8 KB