Skip to content

Commit

Permalink
cifs: Fix kmap_local_page() unmapping
Browse files Browse the repository at this point in the history
kmap_local_page() requires kunmap_local() to unmap the mapping.  In
addition memcpy_page() is provided to perform this common memcpy
pattern.

Replace the kmap_local_page() and broken kunmap() with memcpy_page()

Fixes: d406d26 ("cifs: skip alloc when request has no pages")
Reviewed-by: Paulo Alcantara <pc@cjr.nz>
Reviewed-by: "Fabio M. De Francesco" <fmdefrancesco@gmail.com>
Cc: linux-cifs@vger.kernel.org
Cc: samba-technical@lists.samba.org
Signed-off-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
  • Loading branch information
Ira Weiny authored and Steve French committed Jan 4, 2023
1 parent 88603b6 commit 67fcb2c
Showing 1 changed file with 2 additions and 7 deletions.
9 changes: 2 additions & 7 deletions fs/cifs/smb2ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -4488,17 +4488,12 @@ smb3_init_transform_rq(struct TCP_Server_Info *server, int num_rqst,

/* copy pages form the old */
for (j = 0; j < npages; j++) {
char *dst, *src;
unsigned int offset, len;

rqst_page_get_length(new, j, &len, &offset);

dst = kmap_local_page(new->rq_pages[j]) + offset;
src = kmap_local_page(old->rq_pages[j]) + offset;

memcpy(dst, src, len);
kunmap(new->rq_pages[j]);
kunmap(old->rq_pages[j]);
memcpy_page(new->rq_pages[j], offset,
old->rq_pages[j], offset, len);
}
}

Expand Down

0 comments on commit 67fcb2c

Please sign in to comment.