Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 23a75eee authored by Szilveszter Ördög's avatar Szilveszter Ördög Committed by Herbert Xu
Browse files

crypto: hash - Fix handling of small unaligned buffers



If a scatterwalk chain contains an entry with an unaligned offset then
hash_walk_next() will cut off the next step at the next alignment point.

However, if the entry ends before the next alignment point then we a loop,
which leads to a kernel oops.

Fix this by checking whether the next aligment point is before the end of the
current entry.

Signed-off-by: default avatarSzilveszter Ördög <slipszi@gmail.com>
Acked-by: default avatarDavid S. Miller <davem@davemloft.net>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent fc1caf6e
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -47,8 +47,11 @@ static int hash_walk_next(struct crypto_hash_walk *walk)
	walk->data = crypto_kmap(walk->pg, 0);
	walk->data += offset;

	if (offset & alignmask)
		nbytes = alignmask + 1 - (offset & alignmask);
	if (offset & alignmask) {
		unsigned int unaligned = alignmask + 1 - (offset & alignmask);
		if (nbytes > unaligned)
			nbytes = unaligned;
	}

	walk->entrylen -= nbytes;
	return nbytes;