Skip to content

Commit 926fd9f

Browse files
ebiggersmimizohar
authored andcommitted
ima: fix reference leak in asymmetric_verify()
Don't leak a reference to the key if its algorithm is unknown. Fixes: 947d705 ("ima: Support EC keys for signature verification") Cc: <stable@vger.kernel.org> # v5.13+ Signed-off-by: Eric Biggers <ebiggers@google.com> Reviewed-by: Stefan Berger <stefanb@linux.ibm.com> Reviewed-by: Tianjia Zhang <tianjia.zhang@linux.alibaba.com> Signed-off-by: Mimi Zohar <zohar@linux.ibm.com>
1 parent e783362 commit 926fd9f

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

security/integrity/digsig_asymmetric.c

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,22 +109,25 @@ int asymmetric_verify(struct key *keyring, const char *sig,
109109

110110
pk = asymmetric_key_public_key(key);
111111
pks.pkey_algo = pk->pkey_algo;
112-
if (!strcmp(pk->pkey_algo, "rsa"))
112+
if (!strcmp(pk->pkey_algo, "rsa")) {
113113
pks.encoding = "pkcs1";
114-
else if (!strncmp(pk->pkey_algo, "ecdsa-", 6))
114+
} else if (!strncmp(pk->pkey_algo, "ecdsa-", 6)) {
115115
/* edcsa-nist-p192 etc. */
116116
pks.encoding = "x962";
117-
else if (!strcmp(pk->pkey_algo, "ecrdsa") ||
118-
!strcmp(pk->pkey_algo, "sm2"))
117+
} else if (!strcmp(pk->pkey_algo, "ecrdsa") ||
118+
!strcmp(pk->pkey_algo, "sm2")) {
119119
pks.encoding = "raw";
120-
else
121-
return -ENOPKG;
120+
} else {
121+
ret = -ENOPKG;
122+
goto out;
123+
}
122124

123125
pks.digest = (u8 *)data;
124126
pks.digest_size = datalen;
125127
pks.s = hdr->sig;
126128
pks.s_size = siglen;
127129
ret = verify_signature(key, &pks);
130+
out:
128131
key_put(key);
129132
pr_debug("%s() = %d\n", __func__, ret);
130133
return ret;

0 commit comments

Comments
 (0)