cifs: do not include page data when checking signature
commit 30b2b2196d upstream.
On async reads, page data is allocated before sending. When the
response is received but it has no data to fill (e.g.
STATUS_END_OF_FILE), __calc_signature() will still include the pages in
its computation, leading to an invalid signature check.
This patch fixes this by not setting the async read smb_rqst page data
(zeroed by default) if its got_bytes is 0.
This can be reproduced/verified with xfstests generic/465.
Cc: <stable@vger.kernel.org>
Signed-off-by: Enzo Matsumiya <ematsumiya@suse.de>
Reviewed-by: Paulo Alcantara (SUSE) <pc@cjr.nz>
Signed-off-by: Steve French <stfrench@microsoft.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
3bd4337485
commit
531268a875
1 changed files with 9 additions and 6 deletions
|
|
@ -3925,12 +3925,15 @@ smb2_readv_callback(struct mid_q_entry *mid)
|
|||
(struct smb2_sync_hdr *)rdata->iov[0].iov_base;
|
||||
struct cifs_credits credits = { .value = 0, .instance = 0 };
|
||||
struct smb_rqst rqst = { .rq_iov = &rdata->iov[1],
|
||||
.rq_nvec = 1,
|
||||
.rq_pages = rdata->pages,
|
||||
.rq_offset = rdata->page_offset,
|
||||
.rq_npages = rdata->nr_pages,
|
||||
.rq_pagesz = rdata->pagesz,
|
||||
.rq_tailsz = rdata->tailsz };
|
||||
.rq_nvec = 1, };
|
||||
|
||||
if (rdata->got_bytes) {
|
||||
rqst.rq_pages = rdata->pages;
|
||||
rqst.rq_offset = rdata->page_offset;
|
||||
rqst.rq_npages = rdata->nr_pages;
|
||||
rqst.rq_pagesz = rdata->pagesz;
|
||||
rqst.rq_tailsz = rdata->tailsz;
|
||||
}
|
||||
|
||||
WARN_ONCE(rdata->server != mid->server,
|
||||
"rdata server %p != mid server %p",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue