Patch "CIFS: Fix SMB2+ interim response processing for read requests" has been added to the 3.10-stable tree
This is a note to let you know that I've just added the patch titled
CIFS: Fix SMB2+ interim response processing for read requests
to the 3.10-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
cifs-fix-smb2-interim-response-processing-for-read-requests.patch
and it can be found in the queue-3.10 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
6cc3b24235929b54acd5ecc987ef11a425bd209eMon Sep 17 00:00:00 2001
From: Pavel Shilovsky <[email protected]>
Date: Sat, 27 Feb 2016 11:58:18 +0300
Subject: CIFS: Fix SMB2+ interim response processing for read requests
From: Pavel Shilovsky <[email protected]>
commit 6cc3b24235929b54acd5ecc987ef11a425bd209e upstream.
For interim responses we only need to parse a header and update a number credits. Now it is done for all SMB2+ command except SMB2_READ which is wrong. Fix this by adding such processing.
--- fs/cifs/cifssmb.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-)
fs/cifs/cifssmb.c +18 -3
@@ -1389,11 +1389,10 @@ openRetry:* current bigbuf. */ static int -cifs_readv_discard (struct TCP_Server_Info *server,struct mid_q_entry *mid) +discard_remaining_data (struct TCP_Server_Info *server) {unsigned int rfclen =get_rfc1002_length (server->smallbuf);int remaining = rfclen +4 - server->total_read; -struct cifs_readdata *rdata = mid->callback_data;while (remaining >0 ) {int length;
@@ -1407,10 +1406,20 @@ cifs_readv_discard(struct TCP_Server_Inf remaining -= length; } -dequeue_mid (mid, rdata->result);return 0 ; } +static int +cifs_readv_discard (struct TCP_Server_Info *server,struct mid_q_entry *mid) +{ +int length; +struct cifs_readdata *rdata = mid->callback_data; + + length =discard_remaining_data (server); +dequeue_mid (mid, rdata->result); +return length; +} +int cifs_readv_receive (struct TCP_Server_Info *server,struct mid_q_entry *mid) {
@@ -1439,6 +1448,12 @@ cifs_readv_receive(struct TCP_Server_Infreturn length; server->total_read += length; +if (server->ops->is_status_pending && + server->ops->is_status_pending (buf, server,0 )) { +discard_remaining_data (server); +return -1 ; + } +/* Was the SMB read successful? */ rdata->result = server->ops->map_error (buf, false);if (rdata->result !=0 ) {
Patches currently in stable-queue which might be from [email protected] are
queue-3.10/cifs-fix-smb2-interim-response-processing-for-read-requests.patch