When calling asn1parse -genconf with a nonexistent file this will cause
an access to an uninitialized variable.
Test:
valgrind -q openssl asn1parse -genconf nonexistingfile
The reason is this code in asn1pars.c:
conferr:
if (errline > 0)
BIO_printf(bio, "Error on line %ld of config file '%s'\n",
errline, genconf);
else
BIO_printf(bio, "Error loading config file '%s'\n", genconf);
It assumes that if errline wasn't set it's zero. While on most systems
it's true that uninitialized variables are zero, this is not something
that should be relied upon.
Pre-initializing the variable with zero fixes this. See patch (for
current git code) and valgrind output attached. Please apply.
diff --git a/apps/asn1pars.c b/apps/asn1pars.c
index 1576f1c..1cb4bcc 100644
--- a/apps/asn1pars.c
+++ b/apps/asn1pars.c
@@ -396,7 +396,7 @@ static int do_generate(BIO *bio, char *genstr, char *genconf, BUF_MEM *buf)
{
CONF *cnf = NULL;
int len;
- long errline;
+ long errline = 0;
unsigned char *p;
ASN1_TYPE *atyp = NULL;
WARNING: can't open config file: /usr/local/ssl/openssl.cnf
==30382== Conditional jump or move depends on uninitialised value(s)
==30382== at 0x4073C5: do_generate (asn1pars.c:439)
==30382== by 0x4073C5: asn1parse_main (asn1pars.c:273)
==30382== by 0x405320: do_cmd (openssl.c:470)
==30382== by 0x404FEA: main (openssl.c:366)
==30382==
==30382== Conditional jump or move depends on uninitialised value(s)
==30382== at 0x528598: fmtint (b_print.c:479)
==30382== by 0x52A157: _dopr (b_print.c:374)
==30382== by 0x52A157: BIO_vprintf (b_print.c:774)
==30382== by 0x52AE63: BIO_printf (b_print.c:754)
==30382== by 0x4073DC: do_generate (asn1pars.c:440)
==30382== by 0x4073DC: asn1parse_main (asn1pars.c:273)
==30382== by 0x405320: do_cmd (openssl.c:470)
==30382== by 0x404FEA: main (openssl.c:366)
==30382==
==30382== Use of uninitialised value of size 8
==30382== at 0x52860C: fmtint (b_print.c:496)
==30382== by 0x52A157: _dopr (b_print.c:374)
==30382== by 0x52A157: BIO_vprintf (b_print.c:774)
==30382== by 0x52AE63: BIO_printf (b_print.c:754)
==30382== by 0x4073DC: do_generate (asn1pars.c:440)
==30382== by 0x4073DC: asn1parse_main (asn1pars.c:273)
==30382== by 0x405320: do_cmd (openssl.c:470)
==30382== by 0x404FEA: main (openssl.c:366)
==30382==
==30382== Conditional jump or move depends on uninitialised value(s)
==30382== at 0x528622: fmtint (b_print.c:499)
==30382== by 0x52A157: _dopr (b_print.c:374)
==30382== by 0x52A157: BIO_vprintf (b_print.c:774)
==30382== by 0x52AE63: BIO_printf (b_print.c:754)
==30382== by 0x4073DC: do_generate (asn1pars.c:440)
==30382== by 0x4073DC: asn1parse_main (asn1pars.c:273)
==30382== by 0x405320: do_cmd (openssl.c:470)
==30382== by 0x404FEA: main (openssl.c:366)
==30382==
Error on line 69349704 of config file 'nonexistentfile'
67417424:error:02001002:system library:fopen:No such file or
directory:bss_file.c:168:fopen('nonexistentfile','rb')
67417424:error:2006D080:BIO routines:BIO_new_file:no such file:bss_file.c:171:
67417424:error:0E078072:configuration file routines:DEF_LOAD:no such
file:conf_def.c:195:
_______________________________________________
openssl-dev mailing list
To unsubscribe: https://mta.openssl.org/mailman/listinfo/openssl-dev