X.509: fix comparisons of ->pkey_algo
authorEric Biggers <ebiggers@google.com>
Fri, 8 Dec 2017 15:13:29 +0000 (15:13 +0000)
committerDavid Howells <dhowells@redhat.com>
Fri, 8 Dec 2017 15:13:29 +0000 (15:13 +0000)
->pkey_algo used to be an enum, but was changed to a string by commit
4e8ae72a75aa ("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: 4e8ae72a75aa ("X.509: Make algo identifiers text instead of enum")
Cc: <stable@vger.kernel.org> # v4.6+
Signed-off-by: Eric Biggers <ebiggers@google.com>
Signed-off-by: David Howells <dhowells@redhat.com>
crypto/asymmetric_keys/pkcs7_verify.c
crypto/asymmetric_keys/x509_public_key.c

index 255e84abdc6999d31af893f630a6c094862e5621..39e6de0c2761fb03efab8f144fa1d1693e7cb035 100644 (file)
@@ -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",
                         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",
                                sinfo->index);
                        continue;
index e67fd29fbd115b5ff1a56dbe2e16aa56d98a54b5..9338b4558cdc52b70a86c820ef2d39186bf1e3c3 100644 (file)
@@ -131,7 +131,7 @@ int x509_check_for_self_signed(struct x509_certificate *cert)
        }
 
        ret = -EKEYREJECTED;
-       if (cert->pub->pkey_algo != cert->sig->pkey_algo)
+       if (strcmp(cert->pub->pkey_algo, cert->sig->pkey_algo) != 0)
                goto out;
 
        ret = public_key_verify_signature(cert->pub, cert->sig);