mirror of
https://github.com/torvalds/linux.git
synced 2024-11-25 13:41:51 +00:00
crypto: scatterwalk - Check for same address in map_and_copy
This patch adds a check for in scatterwalk_map_and_copy to avoid copying from the same address to the same address. This is going to be used for IV copying in AEAD IV generators. There is no provision for partial overlaps. This patch also uses the new scatterwalk_ffwd instead of doing it by hand in scatterwalk_map_and_copy. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
17db854699
commit
74412fd5d7
@ -104,22 +104,18 @@ void scatterwalk_map_and_copy(void *buf, struct scatterlist *sg,
|
||||
unsigned int start, unsigned int nbytes, int out)
|
||||
{
|
||||
struct scatter_walk walk;
|
||||
unsigned int offset = 0;
|
||||
struct scatterlist tmp[2];
|
||||
|
||||
if (!nbytes)
|
||||
return;
|
||||
|
||||
for (;;) {
|
||||
scatterwalk_start(&walk, sg);
|
||||
sg = scatterwalk_ffwd(tmp, sg, start);
|
||||
|
||||
if (start < offset + sg->length)
|
||||
break;
|
||||
if (sg_page(sg) == virt_to_page(buf) &&
|
||||
sg->offset == offset_in_page(buf))
|
||||
return;
|
||||
|
||||
offset += sg->length;
|
||||
sg = sg_next(sg);
|
||||
}
|
||||
|
||||
scatterwalk_advance(&walk, start - offset);
|
||||
scatterwalk_start(&walk, sg);
|
||||
scatterwalk_copychunks(buf, &walk, nbytes, out);
|
||||
scatterwalk_done(&walk, out, 0);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user