Skip to content

Commit a04871f

Browse files
committed
examples/pem/pem.c: fix double-free introduced in 65853a4;
configure.ac and src/include.am: add ENABLED_ARM_THUMB, BUILD_ARM_THUMB, BUILD_ARM_NONTHUMB, ENABLED_ARM_64, BUILD_ARM_64, ENABLED_ARM_32. and BUILD_ARM_32, and use them to gate building of ARM asm files, to fix "ISO C forbids an empty translation unit" warnings (the warning only affects inline asm files, but the gating is deployed more widely).
1 parent 5927951 commit a04871f

3 files changed

Lines changed: 234 additions & 30 deletions

File tree

configure.ac

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2985,6 +2985,7 @@ then
29852985
AM_CCASFLAGS="$AM_CCASFLAGS -DEXTERNAL_OPTS_OPENVPN"
29862986
ENABLED_ARMASM_CRYPTO=yes
29872987
ENABLED_ARMASM_NEON=yes
2988+
ENABLED_ARM_64=yes
29882989

29892990
# Check for and set -mstrict-align compiler flag
29902991
# Used to set assumption that Aarch64 systems will not handle
@@ -3010,6 +3011,7 @@ then
30103011
ENABLED_ARMASM_CRYPTO=no
30113012
ENABLED_AESGCM_STREAM=no # not yet implemented
30123013
ENABLED_ARMASM_NEON=yes
3014+
ENABLED_ARM_32=yes
30133015
AC_MSG_NOTICE([32bit ARMv7-a found, setting mfpu to neon])
30143016
if test "$ENABLED_FIPS" != "no" ||
30153017
test "$HAVE_FIPS_VERSION_MAJOR" -ge 5;
@@ -3028,6 +3030,8 @@ then
30283030
ENABLED_ARMASM_CRYPTO=no
30293031
ENABLED_AESGCM_STREAM=no # not yet implemented
30303032
ENABLED_ARMASM_NEON=no
3033+
ENABLED_ARM_THUMB=yes
3034+
ENABLED_ARM_32=yes
30313035
AC_MSG_NOTICE([32bit ARMv7-m found])
30323036
if test "$ENABLED_FIPS" != "no" ||
30333037
test "$HAVE_FIPS_VERSION_MAJOR" -ge 5;
@@ -3044,6 +3048,7 @@ then
30443048
ENABLED_ARMASM_CRYPTO=no
30453049
ENABLED_AESGCM_STREAM=no # not yet implemented
30463050
ENABLED_ARMASM_NEON=no
3051+
ENABLED_ARM_32=yes
30473052
AC_MSG_NOTICE([32bit ARMv6 found])
30483053
;;
30493054
armv4*)
@@ -3052,6 +3057,7 @@ then
30523057
ENABLED_ARMASM_CRYPTO=no
30533058
ENABLED_AESGCM_STREAM=no # not yet implemented
30543059
ENABLED_ARMASM_NEON=no
3060+
ENABLED_ARM_32=yes
30553061
AC_MSG_NOTICE([32bit ARMv4 found])
30563062
;;
30573063
*)
@@ -3060,6 +3066,7 @@ then
30603066
AM_CCASFLAGS="$AM_CCASFLAGS -DEXTERNAL_OPTS_OPENVPN"
30613067
ENABLED_ARMASM_CRYPTO=yes
30623068
ENABLED_ARMASM_NEON=yes
3069+
ENABLED_ARM_32=yes
30633070
AC_MSG_NOTICE([32bit ARMv8 found, setting mfpu to crypto-neon-fp-armv8])
30643071
;;
30653072
esac
@@ -8357,6 +8364,7 @@ if test "$ENABLED_SP_ASM" = "yes" && test "$ENABLED_SP" = "yes"; then
83578364
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_SP_ARM_CORTEX_M_ASM"
83588365
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_SP_ARM_CORTEX_M_ASM"
83598366
ENABLED_SP_ARM_CORTEX_ASM=yes
8367+
ENABLED_ARM_THUMB=yes
83608368
;;
83618369
*armv6*)
83628370
if test "$ENABLED_ARMASM" = "no"; then
@@ -8935,6 +8943,7 @@ case $host_cpu in
89358943
*arm*)
89368944
if test "$host_alias" = "thumb" || test "$ARM_TARGET" = "thumb"; then
89378945
AM_CFLAGS="$AM_CFLAGS -mthumb -march=armv6"
8946+
ENABLED_ARM_THUMB=yes
89388947
else
89398948
if test "$host_alias" = "cortex" || test "$ARM_TARGET" = "cortex"; then
89408949
AM_CFLAGS="$AM_CFLAGS -mcpu=cortex-r5"
@@ -9755,6 +9764,10 @@ AM_CONDITIONAL([BUILD_ARMASM],[test "x$ENABLED_ARMASM" = "xyes"])
97559764
AM_CONDITIONAL([BUILD_ARMASM_INLINE],[test "x$ENABLED_ARMASM_INLINE" = "xyes"])
97569765
AM_CONDITIONAL([BUILD_ARMASM_CRYPTO],[test "x$ENABLED_ARMASM_CRYPTO" = "xyes"])
97579766
AM_CONDITIONAL([BUILD_ARMASM_NEON],[test "x$ENABLED_ARMASM_NEON" = "xyes"])
9767+
AM_CONDITIONAL([BUILD_ARM_THUMB],[test "$ENABLED_ARM_THUMB" = "yes" || test "$ENABLED_USERSETTINGS" = "yes"])
9768+
AM_CONDITIONAL([BUILD_ARM_NONTHUMB],[test "$ENABLED_ARM_THUMB" != "yes" || test "$ENABLED_USERSETTINGS" = "yes"])
9769+
AM_CONDITIONAL([BUILD_ARM_32],[test "$ENABLED_ARM_32" = "yes" || test "$ENABLED_USERSETTINGS" = "yes"])
9770+
AM_CONDITIONAL([BUILD_ARM_64],[test "$ENABLED_ARM_64" = "yes" || test "$ENABLED_USERSETTINGS" = "yes"])
97589771
AM_CONDITIONAL([BUILD_RISCV_ASM],[test "x$ENABLED_RISCV_ASM" = "xyes"])
97599772
AM_CONDITIONAL([BUILD_XILINX],[test "x$ENABLED_XILINX" = "xyes"])
97609773
AM_CONDITIONAL([BUILD_AESNI],[test "x$ENABLED_AESNI" = "xyes"])

examples/pem/pem.c

Lines changed: 39 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,6 @@ static int pemApp_ReadFile(FILE* fp, unsigned char** pdata, word32* plen)
127127
/* Set data to new pointer. */
128128
data = p;
129129
}
130-
/* Done with file. */
131-
fclose(fp);
132130
}
133131

134132
if (data != NULL) {
@@ -161,8 +159,6 @@ static int WriteFile(FILE* fp, const char* data, word32 len)
161159
fprintf(stderr, "Failed to write\n");
162160
ret = 1;
163161
}
164-
/* Close file. */
165-
fclose(fp);
166162

167163
return ret;
168164
}
@@ -766,7 +762,8 @@ int main(int argc, char* argv[])
766762
argv++;
767763
if (argc == 0) {
768764
fprintf(stderr, "No type string provided\n");
769-
return 1;
765+
ret = 1;
766+
goto out;
770767
}
771768
type_str = argv[0];
772769
}
@@ -776,16 +773,19 @@ int main(int argc, char* argv[])
776773
argv++;
777774
if (argc == 0) {
778775
fprintf(stderr, "No filename provided\n");
779-
return 1;
776+
ret = 1;
777+
goto out;
780778
}
781779
if (in_file != stdin) {
782780
fprintf(stderr, "At most one input file can be supplied.\n");
783-
return 1;
781+
ret = 1;
782+
goto out;
784783
}
785784
in_file = fopen(argv[0], "r");
786785
if (in_file == NULL) {
787786
fprintf(stderr, "File not able to be read: %s\n", argv[0]);
788-
return 1;
787+
ret = 1;
788+
goto out;
789789
}
790790
}
791791
/* Name of output file. */
@@ -794,7 +794,8 @@ int main(int argc, char* argv[])
794794
argv++;
795795
if (argc == 0) {
796796
fprintf(stderr, "No filename provided\n");
797-
return 1;
797+
ret = 1;
798+
goto out;
798799
}
799800
out_name = argv[0];
800801
}
@@ -805,7 +806,8 @@ int main(int argc, char* argv[])
805806
argv++;
806807
if (argc == 0) {
807808
fprintf(stderr, "No filename provided\n");
808-
return 1;
809+
ret = 1;
810+
goto out;
809811
}
810812
offset = (word32)strtoul(argv[0], NULL, 10);
811813
}
@@ -817,7 +819,8 @@ int main(int argc, char* argv[])
817819
argv++;
818820
if (argc == 0) {
819821
fprintf(stderr, "No password provided\n");
820-
return 1;
822+
ret = 1;
823+
goto out;
821824
}
822825
info.passwd_cb = password_from_userdata;
823826
info.passwd_userdata = argv[0];
@@ -846,10 +849,12 @@ int main(int argc, char* argv[])
846849
argv++;
847850
if (argc == 0) {
848851
fprintf(stderr, "No PBE version provided\n");
849-
return 1;
852+
ret = 1;
853+
goto out;
850854
}
851855
if (StringToPbeVer(argv[0], &pbe_ver) != 0) {
852-
return 1;
856+
ret = 1;
857+
goto out;
853858
}
854859
}
855860
/* PBE algorithm. */
@@ -859,10 +864,12 @@ int main(int argc, char* argv[])
859864
argv++;
860865
if (argc == 0) {
861866
fprintf(stderr, "No PBE provided\n");
862-
return 1;
867+
ret = 1;
868+
goto out;
863869
}
864870
if (StringToPbe(argv[0], &pbe) != 0) {
865-
return 1;
871+
ret = 1;
872+
goto out;
866873
}
867874
}
868875
/* PBES2 algorithm. */
@@ -872,10 +879,12 @@ int main(int argc, char* argv[])
872879
argv++;
873880
if (argc == 0) {
874881
fprintf(stderr, "No PBE algorithm provided\n");
875-
return 1;
882+
ret = 1;
883+
goto out;
876884
}
877885
if (StringToPbeAlg(argv[0], &pbe_alg) != 0) {
878-
return 1;
886+
ret = 1;
887+
goto out;
879888
}
880889
}
881890
/* Number of PBE iterations. */
@@ -885,7 +894,8 @@ int main(int argc, char* argv[])
885894
argv++;
886895
if (argc == 0) {
887896
fprintf(stderr, "No filename provided\n");
888-
return 1;
897+
ret = 1;
898+
goto out;
889899
}
890900
iterations = (unsigned int)strtoul(argv[0], NULL, 10);
891901
}
@@ -896,13 +906,15 @@ int main(int argc, char* argv[])
896906
argv++;
897907
if (argc == 0) {
898908
fprintf(stderr, "No salt size provided\n");
899-
return 1;
909+
ret = 1;
910+
goto out;
900911
}
901912
salt_sz = (unsigned int)strtoul(argv[0], NULL, 10);
902913
if (salt_sz > SALT_MAX_LEN) {
903914
fprintf(stderr, "Salt size must be no bigger than %d: %d\n",
904915
SALT_MAX_LEN, salt_sz);
905-
return 1;
916+
ret = 1;
917+
goto out;
906918
}
907919
}
908920
#endif /* WOLFSSL_ENCRYPTED_KEYS !NO_PWDBASED */
@@ -918,12 +930,14 @@ int main(int argc, char* argv[])
918930
else if ((strcmp(argv[0], "-?") == 0) ||
919931
(strcmp(argv[0], "--help") == 0)) {
920932
Usage();
921-
return 0;
933+
ret = 0;
934+
goto out;
922935
}
923936
else {
924937
fprintf(stderr, "Bad option: %s\n", argv[0]);
925938
Usage();
926-
return 1;
939+
ret = 1;
940+
goto out;
927941
}
928942

929943
/* Move on to next command line argument. */
@@ -1005,6 +1019,7 @@ int main(int argc, char* argv[])
10051019
}
10061020
}
10071021

1022+
out:
10081023
/* Dispose of allocated data. */
10091024
if (der != NULL) {
10101025
wc_FreeDer(&der);
@@ -1025,10 +1040,10 @@ int main(int argc, char* argv[])
10251040
fprintf(stderr, "%s\n", wc_GetErrorString(ret));
10261041
}
10271042

1028-
if (in_file != stdin)
1043+
if ((in_file != stdin) && (in_file != NULL))
10291044
(void)fclose(in_file);
10301045

1031-
if (out_file != stdout)
1046+
if ((out_file != stdout) && (out_file != NULL))
10321047
(void)fclose(out_file);
10331048

10341049
return (ret == 0) ? 0 : 1;

0 commit comments

Comments
 (0)