Commit 54c1fb39 authored by Eric Biggers's avatar Eric Biggers Committed by David Howells

X.509: fix comparisons of ->pkey_algo

->pkey_algo used to be an enum, but was changed to a string by commit
4e8ae72a ("X.509: Make algo identifiers text instead of enum").  But
two comparisons were not updated.  Fix them to use strcmp().

This bug broke signature verification in certain configurations,
depending on whether the string constants were deduplicated or not.

Fixes: 4e8ae72a ("X.509: Make algo identifiers text instead of enum")
Cc: <stable@vger.kernel.org> # v4.6+
Signed-off-by: default avatarEric Biggers <ebiggers@google.com>
Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
parent 18026d86
...@@ -147,7 +147,7 @@ static int pkcs7_find_key(struct pkcs7_message *pkcs7, ...@@ -147,7 +147,7 @@ static int pkcs7_find_key(struct pkcs7_message *pkcs7,
pr_devel("Sig %u: Found cert serial match X.509[%u]\n", pr_devel("Sig %u: Found cert serial match X.509[%u]\n",
sinfo->index, certix); sinfo->index, certix);
if (x509->pub->pkey_algo != sinfo->sig->pkey_algo) { if (strcmp(x509->pub->pkey_algo, sinfo->sig->pkey_algo) != 0) {
pr_warn("Sig %u: X.509 algo and PKCS#7 sig algo don't match\n", pr_warn("Sig %u: X.509 algo and PKCS#7 sig algo don't match\n",
sinfo->index); sinfo->index);
continue; continue;
......
...@@ -131,7 +131,7 @@ int x509_check_for_self_signed(struct x509_certificate *cert) ...@@ -131,7 +131,7 @@ int x509_check_for_self_signed(struct x509_certificate *cert)
} }
ret = -EKEYREJECTED; ret = -EKEYREJECTED;
if (cert->pub->pkey_algo != cert->sig->pkey_algo) if (strcmp(cert->pub->pkey_algo, cert->sig->pkey_algo) != 0)
goto out; goto out;
ret = public_key_verify_signature(cert->pub, cert->sig); ret = public_key_verify_signature(cert->pub, cert->sig);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment