Patch "lib/mpi: mpi_write_sgl(): fix skipping of leading zero limbs" has been added to the 4.4-stable tree
This is a note to let you know that I've just added the patch titled
lib/mpi: mpi_write_sgl(): fix skipping of leading zero limbs
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
lib-mpi-mpi_write_sgl-fix-skipping-of-leading-zero-limbs.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
f2d1362ff7d266b3d2b1c764d6c2ef4a3b457f23Mon Sep 17 00:00:00 2001
From: Nicolai Stange <[email protected]>
Date: Tue, 22 Mar 2016 13:12:35 +0100
Subject: lib/mpi: mpi_write_sgl(): fix skipping of leading zero limbs
From: Nicolai Stange <[email protected]>
commit f2d1362ff7d266b3d2b1c764d6c2ef4a3b457f23 upstream.
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.
--- lib/mpi/mpicoder.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-)
lib/mpi/mpicoder.c +9 -12
@@ -367,7 +367,9 @@ int mpi_write_to_sgl(MPI a, struct scatt 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
@@ -388,17 +390,12 @@ int mpi_write_to_sgl(MPI a, struct scatt#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; - } +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); }
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/lib-mpi-mpi_write_sgl-fix-skipping-of-leading-zero-limbs.patch