@@ -981,41 +981,53 @@ static int rsa_tests(ica_adapter_handle_t handle)
981981
982982 /* Test RSA-ME */
983983 rc = system("@builddir@icastats -r");
984- if (rc == -1)
984+ if (rc == -1) {
985+ free(output_data);
985986 return handle_ica_error(rc, "system");
987+ }
986988
987989 rc = ica_rsa_mod_expo(handle, data, &mod_expo_key, output_data);
988990 if (rc) {
989991#ifndef NO_SW_FALLBACKS
992+ free(output_data);
990993 return handle_ica_error(rc, "ica_rsa_mod_expo");
991994#else
992995 if (rc == ENODEV) {
993996 V_(printf("Test RSA-ME and RSA-CRT SKIPPED (no card).\n"));
997+ free(output_data);
994998 return TEST_SKIP;
995999 } else {
1000+ free(output_data);
9961001 return handle_ica_error(rc, "ica_rsa_mod_expo");
9971002 }
9981003#endif
9991004 }
10001005
10011006 /* Test RSA-CRT */
10021007 rc = check_icastats(RSA_ME, "RSA-ME");
1003- if (rc != 0)
1008+ if (rc != 0) {
1009+ free(output_data);
10041010 return rc;
1011+ }
10051012
10061013 rc = system("@builddir@icastats -r");
1007- if (rc == -1)
1014+ if (rc == -1) {
1015+ free(output_data);
10081016 return handle_ica_error(rc, "system");
1017+ }
10091018
10101019 rc = ica_rsa_crt(handle, data, &crt_key, output_data);
10111020 if (rc) {
10121021#ifndef NO_SW_FALLBACKS
1022+ free(output_data);
10131023 return handle_ica_error(rc, "ica_rsa_crt");
10141024#else
10151025 if (rc == ENODEV) {
10161026 V_(printf("Test RSA-CRT SKIPPED (no card).\n"));
1027+ free(output_data);
10171028 return TEST_SKIP;
10181029 } else {
1030+ free(output_data);
10191031 return handle_ica_error(rc, "ica_rsa_crt");
10201032 }
10211033#endif
@@ -1068,33 +1080,53 @@ static int aes_tests(unsigned char *iv, unsigned char *cmac, unsigned char *ctr)
10681080
10691081 /* Test AES-CBC */
10701082 rc = system("@builddir@icastats -r");
1071- if (rc == -1)
1083+ if (rc == -1) {
1084+ free(tag);
1085+ free(output_buffer);
1086+ free(nonce);
10721087 return handle_ica_error(rc, "system");
1088+ }
10731089
10741090 for (mode = 1;mode >= 0;mode--) {
10751091 rc = ica_aes_cbc(input_buffer, output_buffer, DATA_LENGTH, aes_key,
10761092 AES_KEY_LEN128, iv, mode);
1077- if (rc)
1093+ if (rc) {
1094+ free(tag);
1095+ free(output_buffer);
1096+ free(nonce);
10781097 return handle_ica_error(rc, "ica_aes_cbc");
1098+ }
10791099 if (mode == ICA_ENCRYPT)
10801100 input_buffer = output_buffer;
10811101 else if (mode == ICA_DECRYPT)
10821102 input_buffer = plain_data;
10831103 }
10841104 rc = check_icastats(AES_CBC, "AES CBC");
1085- if (rc != 0)
1105+ if (rc != 0) {
1106+ free(tag);
1107+ free(output_buffer);
1108+ free(nonce);
10861109 return rc;
1110+ }
10871111
10881112 /* Test AES-CFB */
10891113 rc = system("@builddir@icastats -r");
1090- if (rc == -1)
1114+ if (rc == -1) {
1115+ free(tag);
1116+ free(output_buffer);
1117+ free(nonce);
10911118 return handle_ica_error(rc, "system");
1119+ }
10921120
10931121 for (mode = 1;mode >= 0;mode--) {
10941122 rc = ica_aes_cfb(input_buffer, output_buffer, DATA_LENGTH, aes_key,
10951123 AES_KEY_LEN128, iv, AES_CIPHER_BLOCK, mode);
1096- if (rc)
1124+ if (rc) {
1125+ free(tag);
1126+ free(output_buffer);
1127+ free(nonce);
10971128 return handle_ica_error(rc, "ica_aes_cfb");
1129+ }
10981130
10991131 if (mode == ICA_ENCRYPT)
11001132 input_buffer = output_buffer;
@@ -1105,27 +1137,43 @@ static int aes_tests(unsigned char *iv, unsigned char *cmac, unsigned char *ctr)
11051137
11061138 /* Test AES-CMAC */
11071139 rc = system("@builddir@icastats -r");
1108- if (rc == -1)
1140+ if (rc == -1) {
1141+ free(tag);
1142+ free(output_buffer);
1143+ free(nonce);
11091144 return handle_ica_error(rc, "system");
1145+ }
11101146
11111147 for (mode = 1;mode >= 0;mode--) {
11121148 rc = ica_aes_cmac(input_buffer, DATA_LENGTH, cmac, AES_CIPHER_BLOCK,
11131149 aes_key, AES_KEY_LEN128, mode);
1114- if (rc)
1150+ if (rc) {
1151+ free(tag);
1152+ free(output_buffer);
1153+ free(nonce);
11151154 return handle_ica_error(rc, "ica_aes_cmac");
1155+ }
11161156 }
11171157 check_icastats(AES_CMAC, "AES CMAC");
11181158
11191159 /* Test AES-CTR */
11201160 rc = system("@builddir@icastats -r");
1121- if (rc == -1)
1161+ if (rc == -1) {
1162+ free(tag);
1163+ free(output_buffer);
1164+ free(nonce);
11221165 return handle_ica_error(rc, "system");
1166+ }
11231167
11241168 for (mode = 1;mode >= 0;mode--) {
11251169 rc = ica_aes_ctr(input_buffer, output_buffer, DATA_LENGTH, aes_key,
11261170 AES_KEY_LEN128, ctr, AES_CIPHER_BLOCK, mode);
1127- if (rc)
1171+ if (rc) {
1172+ free(tag);
1173+ free(output_buffer);
1174+ free(nonce);
11281175 return handle_ica_error(rc, "ica_aes_ctr");
1176+ }
11291177
11301178 if (mode == ICA_ENCRYPT)
11311179 input_buffer = output_buffer;
@@ -1136,14 +1184,22 @@ static int aes_tests(unsigned char *iv, unsigned char *cmac, unsigned char *ctr)
11361184
11371185 /* Test AES-ECB */
11381186 rc = system("@builddir@icastats -r");
1139- if (rc == -1)
1187+ if (rc == -1) {
1188+ free(tag);
1189+ free(output_buffer);
1190+ free(nonce);
11401191 return handle_ica_error(rc, "system");
1192+ }
11411193
11421194 for (mode = 1;mode >= 0;mode--) {
11431195 rc = ica_aes_ecb(input_buffer, output_buffer, DATA_LENGTH, aes_key,
11441196 AES_KEY_LEN128, mode);
1145- if (rc)
1197+ if (rc) {
1198+ free(tag);
1199+ free(output_buffer);
1200+ free(nonce);
11461201 return handle_ica_error(rc, "ica_aes_ecb");
1202+ }
11471203
11481204 if (mode == ICA_ENCRYPT)
11491205 input_buffer = output_buffer;
@@ -1154,14 +1210,22 @@ static int aes_tests(unsigned char *iv, unsigned char *cmac, unsigned char *ctr)
11541210
11551211 /* Test AES-OFB */
11561212 rc = system("@builddir@icastats -r");
1157- if (rc == -1)
1213+ if (rc == -1) {
1214+ free(tag);
1215+ free(output_buffer);
1216+ free(nonce);
11581217 return handle_ica_error(rc, "system");
1218+ }
11591219
11601220 for (mode = 1;mode >= 0;mode--) {
11611221 rc = ica_aes_ofb(input_buffer, output_buffer, DATA_LENGTH, aes_key,
11621222 AES_KEY_LEN128, iv, mode);
1163- if (rc)
1223+ if (rc) {
1224+ free(tag);
1225+ free(output_buffer);
1226+ free(nonce);
11641227 return handle_ica_error(rc, "ica_aes_ofb");
1228+ }
11651229
11661230 if (mode == ICA_ENCRYPT)
11671231 input_buffer = output_buffer;
@@ -1172,14 +1236,22 @@ static int aes_tests(unsigned char *iv, unsigned char *cmac, unsigned char *ctr)
11721236
11731237 /* Test AES-XTS */
11741238 rc = system("@builddir@icastats -r");
1175- if (rc == -1)
1239+ if (rc == -1) {
1240+ free(tag);
1241+ free(output_buffer);
1242+ free(nonce);
11761243 return handle_ica_error(rc, "system");
1244+ }
11771245
11781246 for (mode = 1; mode >= 0; mode--) {
11791247 rc = ica_aes_xts(input_buffer, output_buffer, DATA_LENGTH, aes_key,
11801248 aes_key2, AES_KEY_LEN128, tweak, mode);
1181- if (rc)
1249+ if (rc) {
1250+ free(tag);
1251+ free(output_buffer);
1252+ free(nonce);
11821253 return handle_ica_error(rc, "ica_aes_xts");
1254+ }
11831255
11841256 if (mode == ICA_ENCRYPT)
11851257 input_buffer = output_buffer;
0 commit comments