From 6730d2b77cc5836905b4223617713f95696f682f Mon Sep 17 00:00:00 2001 From: Matthew Dillon Date: Sat, 14 Aug 2010 16:19:17 -0700 Subject: [PATCH] kernel - dm - Fix panic in dm_target_crypt * Fix a misordered kfree() * Minor cleanup Reported-by: alexh --- sys/dev/disk/dm/dm_target_crypt.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/sys/dev/disk/dm/dm_target_crypt.c b/sys/dev/disk/dm/dm_target_crypt.c index 528321289d..e502d91b58 100644 --- a/sys/dev/disk/dm/dm_target_crypt.c +++ b/sys/dev/disk/dm/dm_target_crypt.c @@ -741,30 +741,31 @@ dm_target_crypt_destroy(dm_table_entry_t * table_en) { dm_target_crypt_config_t *priv; + /* + * Disconnect the crypt config before unbusying the target. + */ priv = table_en->target_config; - if (priv == NULL) return 0; - + table_en->target_config = NULL; dm_pdev_decr(priv->pdev); - /* Unbusy target so we can unload it */ dm_target_unbusy(table_en->target); /* + * Clean up the crypt config + * * Overwrite the private information before freeing memory to * avoid leaking it. */ memset(priv->status_str, 0xFF, strlen(priv->status_str)); bzero(priv->status_str, strlen(priv->status_str)); + kfree(priv->status_str, M_DMCRYPT); + memset(priv, 0xFF, sizeof(dm_target_crypt_config_t)); bzero(priv, sizeof(dm_target_crypt_config_t)); - - kfree(priv->status_str, M_DMCRYPT); kfree(priv, M_DMCRYPT); - table_en->target_config = NULL; - return 0; } -- 2.11.4.GIT