Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix possible integer overflow #546

Merged
merged 1 commit into from
Jun 1, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions bn_mp_2expt.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ mp_err mp_2expt(mp_int *a, int b)
{
mp_err err;

if (b < 0) {
return MP_VAL;
}

/* zero a as per default */
mp_zero(a);

Expand Down
4 changes: 4 additions & 0 deletions bn_mp_grow.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ mp_err mp_grow(mp_int *a, int size)
int i;
mp_digit *tmp;

if (size < 0) {
return MP_VAL;
}

/* if the alloc size is smaller alloc more ram */
if (a->alloc < size) {
/* reallocate the array a->dp
Expand Down
5 changes: 5 additions & 0 deletions bn_mp_init_size.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@
/* init an mp_init for a given size */
mp_err mp_init_size(mp_int *a, int size)
{

if (size < 0) {
return MP_VAL;
}

Comment on lines +9 to +13
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure whether this really makes sense here, since size is already sanitized right after ... OTOH it's an invalid usage ...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wasn't sure either, but it is an error and marking it as such is nice to the user—useful for debugging.

size = MP_MAX(MP_MIN_PREC, size);

/* alloc mem */
Expand Down
4 changes: 4 additions & 0 deletions bn_mp_mul_2d.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ mp_err mp_mul_2d(const mp_int *a, int b, mp_int *c)
mp_digit d;
mp_err err;

if (b < 0) {
return MP_VAL;
}

/* copy */
if (a != c) {
if ((err = mp_copy(a, c)) != MP_OKAY) {
Expand Down
4 changes: 4 additions & 0 deletions bn_s_mp_mul_digs.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,10 @@ mp_err s_mp_mul_digs(const mp_int *a, const mp_int *b, mp_int *c, int digs)
mp_word r;
mp_digit tmpx, *tmpt, *tmpy;

if (digs < 0) {
return MP_VAL;
}

/* can we use the fast multiplier? */
if ((digs < MP_WARRAY) &&
(MP_MIN(a->used, b->used) < MP_MAXFAST)) {
Expand Down
4 changes: 4 additions & 0 deletions bn_s_mp_mul_digs_fast.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ mp_err s_mp_mul_digs_fast(const mp_int *a, const mp_int *b, mp_int *c, int digs)
mp_digit W[MP_WARRAY];
mp_word _W;

if (digs < 0) {
return MP_VAL;
}

/* grow the destination as required */
if (c->alloc < digs) {
if ((err = mp_grow(c, digs)) != MP_OKAY) {
Expand Down
4 changes: 4 additions & 0 deletions bn_s_mp_mul_high_digs.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ mp_err s_mp_mul_high_digs(const mp_int *a, const mp_int *b, mp_int *c, int digs)
mp_word r;
mp_digit tmpx, *tmpt, *tmpy;

if (digs < 0) {
return MP_VAL;
}

/* can we use the fast multiplier? */
if (MP_HAS(S_MP_MUL_HIGH_DIGS_FAST)
&& ((a->used + b->used + 1) < MP_WARRAY)
Expand Down
4 changes: 4 additions & 0 deletions bn_s_mp_mul_high_digs_fast.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ mp_err s_mp_mul_high_digs_fast(const mp_int *a, const mp_int *b, mp_int *c, int
mp_digit W[MP_WARRAY];
mp_word _W;

if (digs < 0) {
return MP_VAL;
}

/* grow the destination as required */
pa = a->used + b->used;
if (c->alloc < pa) {
Expand Down