mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 19:00:25 +00:00
crypto: mv_cesa - refactor copy_src_to_buf()
The main goal was to have it not do anything when a zero len parameter was being passed (which could lead to a null pointer dereference, as in this case p->src_sg is null, either). Using the min() macro, the lower part of the loop gets simpler, too. Signed-off-by: Phil Sutter <phil.sutter@viprinet.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
7a1c6bcf26
commit
6677a776cf
1 changed files with 10 additions and 15 deletions
|
@ -187,9 +187,9 @@ static void copy_src_to_buf(struct req_progress *p, char *dbuf, int len)
|
|||
{
|
||||
int ret;
|
||||
void *sbuf;
|
||||
int copied = 0;
|
||||
int copy_len;
|
||||
|
||||
while (1) {
|
||||
while (len) {
|
||||
if (!p->sg_src_left) {
|
||||
ret = sg_miter_next(&p->src_sg_it);
|
||||
BUG_ON(!ret);
|
||||
|
@ -199,19 +199,14 @@ static void copy_src_to_buf(struct req_progress *p, char *dbuf, int len)
|
|||
|
||||
sbuf = p->src_sg_it.addr + p->src_start;
|
||||
|
||||
if (p->sg_src_left <= len - copied) {
|
||||
memcpy(dbuf + copied, sbuf, p->sg_src_left);
|
||||
copied += p->sg_src_left;
|
||||
p->sg_src_left = 0;
|
||||
if (copied >= len)
|
||||
break;
|
||||
} else {
|
||||
int copy_len = len - copied;
|
||||
memcpy(dbuf + copied, sbuf, copy_len);
|
||||
p->src_start += copy_len;
|
||||
p->sg_src_left -= copy_len;
|
||||
break;
|
||||
}
|
||||
copy_len = min(p->sg_src_left, len);
|
||||
memcpy(dbuf, sbuf, copy_len);
|
||||
|
||||
p->src_start += copy_len;
|
||||
p->sg_src_left -= copy_len;
|
||||
|
||||
len -= copy_len;
|
||||
dbuf += copy_len;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue