pknock: fix return values and memleak in has_secret

First, there is a memory leak - when the crypto functions fail,
hexresult was not freed. Second, in that error case, the return value
is simply passed up to the caller, ignoring the different meanings of
0 and 1 between crypto and pknock.
This commit is contained in:
Jan Engelhardt
2009-09-30 01:11:24 +02:00
parent 4b5f0b12d9
commit d116000784

View File

@@ -737,7 +737,8 @@ has_secret(const unsigned char *secret, unsigned int secret_len, uint32_t ipsrc,
ret = crypto_hash_setkey(crypto.tfm, secret, secret_len);
if (ret) {
printk("crypto_hash_setkey() failed ret=%d\n", ret);
return ret;
ret = 0;
goto out;
}
/*
@@ -748,20 +749,19 @@ has_secret(const unsigned char *secret, unsigned int secret_len, uint32_t ipsrc,
ret = crypto_hash_digest(&crypto.desc, sg, 8, result);
if (ret) {
printk("crypto_hash_digest() failed ret=%d\n", ret);
return ret;
ret = 0;
goto out;
}
crypt_to_hex(hexresult, result, crypto.size);
if (memcmp(hexresult, payload, hexa_size) != 0) {
pr_debug("secret match failed\n");
goto out;
ret = 0;
}
ret = 1;
out:
if (hexresult != NULL) kfree(hexresult);
out:
kfree(hexresult);
return ret;
}