diff options
Diffstat (limited to 'lib/mpi/mpicoder.c')
-rw-r--r-- | lib/mpi/mpicoder.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/lib/mpi/mpicoder.c b/lib/mpi/mpicoder.c index 350abaf4bee7..9c6f6b986682 100644 --- a/lib/mpi/mpicoder.c +++ b/lib/mpi/mpicoder.c | |||
@@ -81,7 +81,7 @@ MPI mpi_read_from_buffer(const void *xbuffer, unsigned *ret_nread) | |||
81 | { | 81 | { |
82 | const uint8_t *buffer = xbuffer; | 82 | const uint8_t *buffer = xbuffer; |
83 | int i, j; | 83 | int i, j; |
84 | unsigned nbits, nbytes, nlimbs, nread = 0; | 84 | unsigned nbits, nbytes, nlimbs; |
85 | mpi_limb_t a; | 85 | mpi_limb_t a; |
86 | MPI val = NULL; | 86 | MPI val = NULL; |
87 | 87 | ||
@@ -94,9 +94,14 @@ MPI mpi_read_from_buffer(const void *xbuffer, unsigned *ret_nread) | |||
94 | return ERR_PTR(-EINVAL); | 94 | return ERR_PTR(-EINVAL); |
95 | } | 95 | } |
96 | buffer += 2; | 96 | buffer += 2; |
97 | nread = 2; | ||
98 | 97 | ||
99 | nbytes = DIV_ROUND_UP(nbits, 8); | 98 | nbytes = DIV_ROUND_UP(nbits, 8); |
99 | if (nbytes + 2 > *ret_nread) { | ||
100 | printk("MPI: mpi larger than buffer nread=%d ret_nread=%d\n", | ||
101 | *ret_nread + 1, *ret_nread); | ||
102 | return ERR_PTR(-EINVAL); | ||
103 | } | ||
104 | |||
100 | nlimbs = DIV_ROUND_UP(nbytes, BYTES_PER_MPI_LIMB); | 105 | nlimbs = DIV_ROUND_UP(nbytes, BYTES_PER_MPI_LIMB); |
101 | val = mpi_alloc(nlimbs); | 106 | val = mpi_alloc(nlimbs); |
102 | if (!val) | 107 | if (!val) |
@@ -109,12 +114,6 @@ MPI mpi_read_from_buffer(const void *xbuffer, unsigned *ret_nread) | |||
109 | for (; j > 0; j--) { | 114 | for (; j > 0; j--) { |
110 | a = 0; | 115 | a = 0; |
111 | for (; i < BYTES_PER_MPI_LIMB; i++) { | 116 | for (; i < BYTES_PER_MPI_LIMB; i++) { |
112 | if (++nread > *ret_nread) { | ||
113 | printk | ||
114 | ("MPI: mpi larger than buffer nread=%d ret_nread=%d\n", | ||
115 | nread, *ret_nread); | ||
116 | goto leave; | ||
117 | } | ||
118 | a <<= 8; | 117 | a <<= 8; |
119 | a |= *buffer++; | 118 | a |= *buffer++; |
120 | } | 119 | } |
@@ -122,8 +121,7 @@ MPI mpi_read_from_buffer(const void *xbuffer, unsigned *ret_nread) | |||
122 | val->d[j - 1] = a; | 121 | val->d[j - 1] = a; |
123 | } | 122 | } |
124 | 123 | ||
125 | leave: | 124 | *ret_nread = nbytes + 2; |
126 | *ret_nread = nread; | ||
127 | return val; | 125 | return val; |
128 | } | 126 | } |
129 | EXPORT_SYMBOL_GPL(mpi_read_from_buffer); | 127 | EXPORT_SYMBOL_GPL(mpi_read_from_buffer); |