target/pscsi: Reject cross page boundary case in pscsi_map_sg
We can only have one page of data in each sg element, so we can not cross a page boundary. Fail this case. The 'while (len > 0 && data_len > 0) {}' loop is not necessary. The loop can only be executed once. Signed-off-by: Asias He <asias@redhat.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
This commit is contained in:
parent
f002a24388
commit
8f27d487bc
|
@ -883,7 +883,14 @@ pscsi_map_sg(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
|
|||
pr_debug("PSCSI: i: %d page: %p len: %d off: %d\n", i,
|
||||
page, len, off);
|
||||
|
||||
while (len > 0 && data_len > 0) {
|
||||
/*
|
||||
* We only have one page of data in each sg element,
|
||||
* we can not cross a page boundary.
|
||||
*/
|
||||
if (off + len > PAGE_SIZE)
|
||||
goto fail;
|
||||
|
||||
if (len > 0 && data_len > 0) {
|
||||
bytes = min_t(unsigned int, len, PAGE_SIZE - off);
|
||||
bytes = min(bytes, data_len);
|
||||
|
||||
|
@ -940,9 +947,7 @@ pscsi_map_sg(struct se_cmd *cmd, struct scatterlist *sgl, u32 sgl_nents,
|
|||
bio = NULL;
|
||||
}
|
||||
|
||||
len -= bytes;
|
||||
data_len -= bytes;
|
||||
off = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue