rtac: add error check for misc device register

Add error check to validate the return value of
miscellaneous device register.
Clean up memory on an error to avoid memory leak.

CRs-Fixed: 2204093
Change-Id: I8b94bacdc312fa410a7825c7e25764517469c19b
Signed-off-by: Vignesh Kulothungan <vigneshk@codeaurora.org>
diff --git a/dsp/rtac.c b/dsp/rtac.c
index 43c69cc..1015be4 100644
--- a/dsp/rtac.c
+++ b/dsp/rtac.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 and
@@ -1944,17 +1944,26 @@
 		goto nomem;
 	}
 
-	return misc_register(&rtac_misc);
+	if (misc_register(&rtac_misc) != 0) {
+		kzfree(rtac_adm_buffer);
+		kzfree(rtac_asm_buffer);
+		kzfree(rtac_afe_buffer);
+		kzfree(rtac_voice_buffer);
+		goto nomem;
+	}
+
+	return 0;
 nomem:
 	return -ENOMEM;
 }
 
 void rtac_exit(void)
 {
+	misc_deregister(&rtac_misc);
 	kzfree(rtac_adm_buffer);
 	kzfree(rtac_asm_buffer);
 	kzfree(rtac_afe_buffer);
-	misc_deregister(&rtac_misc);
+	kzfree(rtac_voice_buffer);
 }
 
 MODULE_DESCRIPTION("SoC QDSP6v2 Real-Time Audio Calibration driver");