mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-04 16:15:11 +00:00
xprtrdma: Throw away reply when version is unrecognized
A reply with an unrecognized value in the version field means the
transport header is potentially garbled and therefore all the fields
are untrustworthy.
Fixes: 59aa1f9a3c
("xprtrdma: Properly handle RDMA_ERROR ... ")
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
This commit is contained in:
parent
2b4f8923ec
commit
61433af560
1 changed files with 8 additions and 9 deletions
|
@ -1248,6 +1248,9 @@ rpcrdma_reply_handler(struct work_struct *work)
|
|||
p++; /* credits */
|
||||
proc = *p++;
|
||||
|
||||
if (vers != rpcrdma_version)
|
||||
goto out_badversion;
|
||||
|
||||
if (rpcrdma_is_bcall(r_xprt, rep, xid, proc))
|
||||
return;
|
||||
|
||||
|
@ -1280,8 +1283,6 @@ rpcrdma_reply_handler(struct work_struct *work)
|
|||
}
|
||||
|
||||
xprt->reestablish_timeout = 0;
|
||||
if (vers != rpcrdma_version)
|
||||
goto out_badversion;
|
||||
|
||||
switch (proc) {
|
||||
case rdma_msg:
|
||||
|
@ -1321,17 +1322,15 @@ rpcrdma_reply_handler(struct work_struct *work)
|
|||
}
|
||||
return;
|
||||
|
||||
out_badversion:
|
||||
dprintk("RPC: %s: invalid version %d\n",
|
||||
__func__, be32_to_cpu(vers));
|
||||
goto repost;
|
||||
|
||||
/* If the incoming reply terminated a pending RPC, the next
|
||||
* RPC call will post a replacement receive buffer as it is
|
||||
* being marshaled.
|
||||
*/
|
||||
out_badversion:
|
||||
dprintk("RPC: %s: invalid version %d\n",
|
||||
__func__, be32_to_cpu(vers));
|
||||
status = -EIO;
|
||||
r_xprt->rx_stats.bad_reply_count++;
|
||||
goto out;
|
||||
|
||||
out_badheader:
|
||||
dprintk("RPC: %5u %s: invalid rpcrdma reply (type %u)\n",
|
||||
rqst->rq_task->tk_pid, __func__, be32_to_cpu(proc));
|
||||
|
|
Loading…
Reference in a new issue