DragonFlyBSD Kernel Audit
DF-1636 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/disk/dm/crypt/dm_target_crypt.c b/sys/dev/disk/dm/crypt/dm_target_crypt.c
--- a/sys/dev/disk/dm/crypt/dm_target_crypt.c
+++ b/sys/dev/disk/dm/crypt/dm_target_crypt.c
@@ -492,13 +492,16 @@
 	if ((priv->pdev = dm_pdev_insert(dev)) == NULL) {
 		kprintf("dm_target_crypt: dm_pdev_insert failed\n");
 		kfree(status_str, M_DMCRYPT);
+		kfree(priv, M_DMCRYPT);
 		return ENOENT;
 	}
 
 	priv->crypto_cipher = dmtc_find_crypto_cipher(crypto_alg, crypto_mode, klen_in_bits);
 	priv->crypto_klen = klen_in_bits;
-	if (priv->crypto_cipher == NULL)
+	if (priv->crypto_cipher == NULL) {
+		kfree(priv, M_DMCRYPT);
 		goto notsup;
+	}
 
 	kprintf("dm_target_crypt: using crypto_cipher: %s\n",
 			cryptoapi_cipher_get_description(priv->crypto_cipher));