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 incorrect return check of BN_bn2binpad #16942

Closed
wants to merge 2 commits into from

Conversation

PeiweiHu
Copy link
Contributor

@PeiweiHu PeiweiHu commented Nov 1, 2021

Checklist
  • documentation is added or updated
  • tests are added or updated

crypto/ec/ec_deprecated.c Outdated Show resolved Hide resolved
@@ -71,7 +71,7 @@ static int pkey_get_bn_bytes(EVP_PKEY *pkey, const char *name,
buf = OPENSSL_zalloc(sz);
if (buf == NULL)
goto err;
if (!BN_bn2binpad(bn, buf, sz))
if (BN_bn2binpad(bn, buf, sz) <= 0)
Copy link
Member

Choose a reason for hiding this comment

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

Same problem here

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I changed to <= according to reutrn values check in /test/acvp_test.c:229, 231, 570, 572. There are a lot. Do we need to change them all?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

And /crypto/ec/ec_curve.c: 3404

Copy link
Member

Choose a reason for hiding this comment

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

Same problem here

Hmm, @kroeckx but what the returned 0 indicates? A 0 byte sized number does not look like a number. Perhaps 0 cannot be returned at all? A zero BIGNUM should be encoded as a single zero byte, shouldn't it? So the return value should be 1.

Copy link
Contributor

Choose a reason for hiding this comment

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

It's hard to see how a zero could be returned.

We should nonetheless try to be consistent in the return code handling.

Copy link
Contributor Author

@PeiweiHu PeiweiHu Nov 2, 2021

Choose a reason for hiding this comment

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

In #16943, the code invoking BN_bn2nativepad has a consistent handling way. As for BN_bn2binpad, == -1, <0, and <=0 can be found in codebase. Maybe it's better to unify them.

Copy link
Contributor

Choose a reason for hiding this comment

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

Agreed, they should be unified. Not necessary for this PR IMO.

@@ -46,7 +46,7 @@ static int fbytes(unsigned char *buf, size_t num, ossl_unused const char *name,
|| !TEST_true(BN_hex2bn(&tmp, numbers[fbytes_counter]))
/* tmp might need leading zeros so pad it out */
|| !TEST_int_le(BN_num_bytes(tmp), num)
|| !TEST_true(BN_bn2binpad(tmp, buf, num)))
|| !TEST_int_gt(BN_bn2binpad(tmp, buf, num), 0))
Copy link
Member

Choose a reason for hiding this comment

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

Same problem here

@kroeckx
Copy link
Member

kroeckx commented Nov 1, 2021 via email

@@ -71,7 +71,7 @@ static int pkey_get_bn_bytes(EVP_PKEY *pkey, const char *name,
buf = OPENSSL_zalloc(sz);
if (buf == NULL)
goto err;
if (!BN_bn2binpad(bn, buf, sz))
if (BN_bn2binpad(bn, buf, sz) <= 0)
Copy link
Contributor

Choose a reason for hiding this comment

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

It's hard to see how a zero could be returned.

We should nonetheless try to be consistent in the return code handling.

@paulidale paulidale added approval: review pending This pull request needs review by a committer branch: master Merge to master branch branch: 3.0 Merge to openssl-3.0 branch labels Nov 2, 2021
@kroeckx kroeckx added approval: done This pull request has the required number of approvals and removed approval: review pending This pull request needs review by a committer labels Nov 4, 2021
@t8m t8m added the triaged: bug The issue/pr is/fixes a bug label Nov 5, 2021
@openssl-machine openssl-machine removed the approval: done This pull request has the required number of approvals label Nov 5, 2021
@openssl-machine
Copy link
Collaborator

This pull request is ready to merge

@openssl-machine openssl-machine added the approval: ready to merge The 24 hour grace period has passed, ready to merge label Nov 5, 2021
openssl-machine pushed a commit that referenced this pull request Nov 7, 2021
Reviewed-by: Kurt Roeckx <kurt@roeckx.be>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from #16942)
openssl-machine pushed a commit that referenced this pull request Nov 7, 2021
Reviewed-by: Kurt Roeckx <kurt@roeckx.be>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from #16942)

(cherry picked from commit 098f262)
@paulidale
Copy link
Contributor

Merged to master and 3.0. Thanks for the fix.

@paulidale paulidale closed this Nov 7, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approval: ready to merge The 24 hour grace period has passed, ready to merge branch: master Merge to master branch branch: 3.0 Merge to openssl-3.0 branch triaged: bug The issue/pr is/fixes a bug
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants