Skip to content

Commit d5f07fb

Browse files
author
Steve French
committed
CIFS: Pass page offset for encrypting
Encryption function needs to read data starting page offset from input buffer. This doesn't affect decryption path since it allocates its own page buffers. Signed-off-by: Long Li <[email protected]> Signed-off-by: Steve French <[email protected]>
1 parent 4c0d2a5 commit d5f07fb

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

fs/cifs/smb2ops.c

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2189,9 +2189,10 @@ init_sg(struct smb_rqst *rqst, u8 *sign)
21892189
smb2_sg_set_buf(&sg[i], rqst->rq_iov[i+1].iov_base,
21902190
rqst->rq_iov[i+1].iov_len);
21912191
for (j = 0; i < sg_len - 1; i++, j++) {
2192-
unsigned int len = (j < rqst->rq_npages - 1) ? rqst->rq_pagesz
2193-
: rqst->rq_tailsz;
2194-
sg_set_page(&sg[i], rqst->rq_pages[j], len, 0);
2192+
unsigned int len, offset;
2193+
2194+
rqst_page_get_length(rqst, j, &len, &offset);
2195+
sg_set_page(&sg[i], rqst->rq_pages[j], len, offset);
21952196
}
21962197
smb2_sg_set_buf(&sg[sg_len - 1], sign, SMB2_SIGNATURE_SIZE);
21972198
return sg;
@@ -2338,6 +2339,7 @@ smb3_init_transform_rq(struct TCP_Server_Info *server, struct smb_rqst *new_rq,
23382339
return rc;
23392340

23402341
new_rq->rq_pages = pages;
2342+
new_rq->rq_offset = old_rq->rq_offset;
23412343
new_rq->rq_npages = old_rq->rq_npages;
23422344
new_rq->rq_pagesz = old_rq->rq_pagesz;
23432345
new_rq->rq_tailsz = old_rq->rq_tailsz;
@@ -2379,10 +2381,14 @@ smb3_init_transform_rq(struct TCP_Server_Info *server, struct smb_rqst *new_rq,
23792381

23802382
/* copy pages form the old */
23812383
for (i = 0; i < npages; i++) {
2382-
char *dst = kmap(new_rq->rq_pages[i]);
2383-
char *src = kmap(old_rq->rq_pages[i]);
2384-
unsigned int len = (i < npages - 1) ? new_rq->rq_pagesz :
2385-
new_rq->rq_tailsz;
2384+
char *dst, *src;
2385+
unsigned int offset, len;
2386+
2387+
rqst_page_get_length(new_rq, i, &len, &offset);
2388+
2389+
dst = (char *) kmap(new_rq->rq_pages[i]) + offset;
2390+
src = (char *) kmap(old_rq->rq_pages[i]) + offset;
2391+
23862392
memcpy(dst, src, len);
23872393
kunmap(new_rq->rq_pages[i]);
23882394
kunmap(old_rq->rq_pages[i]);

0 commit comments

Comments
 (0)