mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-12 05:48:39 +08:00
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 <longli@microsoft.com> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
4c0d2a5a64
commit
d5f07fb3ef
@ -2189,9 +2189,10 @@ init_sg(struct smb_rqst *rqst, u8 *sign)
|
||||
smb2_sg_set_buf(&sg[i], rqst->rq_iov[i+1].iov_base,
|
||||
rqst->rq_iov[i+1].iov_len);
|
||||
for (j = 0; i < sg_len - 1; i++, j++) {
|
||||
unsigned int len = (j < rqst->rq_npages - 1) ? rqst->rq_pagesz
|
||||
: rqst->rq_tailsz;
|
||||
sg_set_page(&sg[i], rqst->rq_pages[j], len, 0);
|
||||
unsigned int len, offset;
|
||||
|
||||
rqst_page_get_length(rqst, j, &len, &offset);
|
||||
sg_set_page(&sg[i], rqst->rq_pages[j], len, offset);
|
||||
}
|
||||
smb2_sg_set_buf(&sg[sg_len - 1], sign, SMB2_SIGNATURE_SIZE);
|
||||
return sg;
|
||||
@ -2338,6 +2339,7 @@ smb3_init_transform_rq(struct TCP_Server_Info *server, struct smb_rqst *new_rq,
|
||||
return rc;
|
||||
|
||||
new_rq->rq_pages = pages;
|
||||
new_rq->rq_offset = old_rq->rq_offset;
|
||||
new_rq->rq_npages = old_rq->rq_npages;
|
||||
new_rq->rq_pagesz = old_rq->rq_pagesz;
|
||||
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,
|
||||
|
||||
/* copy pages form the old */
|
||||
for (i = 0; i < npages; i++) {
|
||||
char *dst = kmap(new_rq->rq_pages[i]);
|
||||
char *src = kmap(old_rq->rq_pages[i]);
|
||||
unsigned int len = (i < npages - 1) ? new_rq->rq_pagesz :
|
||||
new_rq->rq_tailsz;
|
||||
char *dst, *src;
|
||||
unsigned int offset, len;
|
||||
|
||||
rqst_page_get_length(new_rq, i, &len, &offset);
|
||||
|
||||
dst = (char *) kmap(new_rq->rq_pages[i]) + offset;
|
||||
src = (char *) kmap(old_rq->rq_pages[i]) + offset;
|
||||
|
||||
memcpy(dst, src, len);
|
||||
kunmap(new_rq->rq_pages[i]);
|
||||
kunmap(old_rq->rq_pages[i]);
|
||||
|
Loading…
Reference in New Issue
Block a user