lib/mpi: mpi_write_sgl(): fix skipping of leading zero limbs
Currently, if the number of leading zeros is greater than fits into a complete limb, mpi_write_sgl() skips them by iterating over them limb-wise. However, it fails to adjust its internal leading zeros tracking variable, lzeros, accordingly: it does a p -= sizeof(alimb); continue; which should really have been a lzeros -= sizeof(alimb); continue; Since lzeros never decreases if its initial value >= sizeof(alimb), nothing gets copied by mpi_write_sgl() in that case. Instead of skipping the high order zero limbs within the loop as shown above, fix the issue by adjusting the copying loop's bounds. Fixes: 2d4d1eea540b ("lib/mpi: Add mpi sgl helpers") Signed-off-by: Nicolai Stange <nicstange@gmail.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
3cf9d84eb8
commit
f2d1362ff7
|
@ -380,7 +380,9 @@ int mpi_write_to_sgl(MPI a, struct scatterlist *sgl, unsigned *nbytes,
|
|||
buf_len = sgl->length;
|
||||
p2 = sg_virt(sgl);
|
||||
|
||||
for (i = a->nlimbs - 1; i >= 0; i--) {
|
||||
for (i = a->nlimbs - 1 - lzeros / BYTES_PER_MPI_LIMB,
|
||||
lzeros %= BYTES_PER_MPI_LIMB;
|
||||
i >= 0; i--) {
|
||||
alimb = a->d[i];
|
||||
p = (u8 *)&alimb2;
|
||||
#if BYTES_PER_MPI_LIMB == 4
|
||||
|
@ -401,17 +403,12 @@ int mpi_write_to_sgl(MPI a, struct scatterlist *sgl, unsigned *nbytes,
|
|||
#error please implement for this limb size.
|
||||
#endif
|
||||
if (lzeros > 0) {
|
||||
if (lzeros >= sizeof(alimb)) {
|
||||
p -= sizeof(alimb);
|
||||
continue;
|
||||
} else {
|
||||
mpi_limb_t *limb1 = (void *)p - sizeof(alimb);
|
||||
mpi_limb_t *limb2 = (void *)p - sizeof(alimb)
|
||||
+ lzeros;
|
||||
*limb1 = *limb2;
|
||||
p -= lzeros;
|
||||
y = lzeros;
|
||||
}
|
||||
lzeros -= sizeof(alimb);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue