The signtime may be used uninitialized, you can see this when pointing
rpki-client -f at the aspa test objects in regress that don't have it.

I think we should initialize on all levels: the local signtime variable
in the individual *_parse functions, in cms_parse_validate_internal(),
and in cms_get_signtime() for the case it is reused elsewhere.

Index: aspa.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/aspa.c,v
retrieving revision 1.14
diff -u -p -r1.14 aspa.c
--- aspa.c      10 Mar 2023 12:44:56 -0000      1.14
+++ aspa.c      12 Mar 2023 10:53:58 -0000
@@ -189,7 +189,7 @@ aspa_parse(X509 **x509, const char *fn, 
        size_t           cmsz;
        unsigned char   *cms;
        struct cert     *cert = NULL;
-       time_t           signtime;
+       time_t           signtime = 0;
        int              rc = 0;
 
        memset(&p, 0, sizeof(struct parse));
Index: cms.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/cms.c,v
retrieving revision 1.31
diff -u -p -r1.31 cms.c
--- cms.c       9 Mar 2023 18:53:24 -0000       1.31
+++ cms.c       12 Mar 2023 11:02:56 -0000
@@ -69,6 +69,7 @@ cms_get_signtime(const char *fn, X509_AT
        const char              *time_str = "UTCtime";
        int                      time_type = V_ASN1_UTCTIME;
 
+       *signtime = 0;
        at = X509_ATTRIBUTE_get0_data(attr, 0, time_type, NULL);
        if (at == NULL) {
                time_str = "GeneralizedTime";
@@ -113,6 +114,7 @@ cms_parse_validate_internal(X509 **xp, c
        *xp = NULL;
        if (rsz != NULL)
                *rsz = 0;
+       *signtime = 0;
 
        /* just fail for empty buffers, the warning was printed elsewhere */
        if (der == NULL)
Index: gbr.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/gbr.c,v
retrieving revision 1.25
diff -u -p -r1.25 gbr.c
--- gbr.c       10 Mar 2023 12:44:56 -0000      1.25
+++ gbr.c       12 Mar 2023 10:53:50 -0000
@@ -45,7 +45,7 @@ gbr_parse(X509 **x509, const char *fn, c
        struct parse     p;
        size_t           cmsz;
        unsigned char   *cms;
-       time_t           signtime;
+       time_t           signtime = 0;
 
        memset(&p, 0, sizeof(struct parse));
        p.fn = fn;
Index: mft.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/mft.c,v
retrieving revision 1.84
diff -u -p -r1.84 mft.c
--- mft.c       9 Mar 2023 18:53:24 -0000       1.84
+++ mft.c       12 Mar 2023 10:54:38 -0000
@@ -353,7 +353,7 @@ mft_parse(X509 **x509, const char *fn, c
        size_t           cmsz;
        unsigned char   *cms;
        char            *crldp = NULL, *crlfile;
-       time_t           signtime;
+       time_t           signtime = 0;
 
        memset(&p, 0, sizeof(struct parse));
        p.fn = fn;
Index: roa.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/roa.c,v
retrieving revision 1.63
diff -u -p -r1.63 roa.c
--- roa.c       10 Mar 2023 12:44:56 -0000      1.63
+++ roa.c       12 Mar 2023 10:54:05 -0000
@@ -212,7 +212,7 @@ roa_parse(X509 **x509, const char *fn, c
        size_t           cmsz;
        unsigned char   *cms;
        struct cert     *cert = NULL;
-       time_t           signtime;
+       time_t           signtime = 0;
        int              rc = 0;
 
        memset(&p, 0, sizeof(struct parse));
Index: rsc.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/rsc.c,v
retrieving revision 1.23
diff -u -p -r1.23 rsc.c
--- rsc.c       10 Mar 2023 12:44:56 -0000      1.23
+++ rsc.c       12 Mar 2023 10:54:23 -0000
@@ -378,7 +378,7 @@ rsc_parse(X509 **x509, const char *fn, c
        unsigned char           *cms;
        size_t                   cmsz;
        struct cert             *cert = NULL;
-       time_t                   signtime;
+       time_t                   signtime = 0;
        int                      rc = 0;
 
        memset(&p, 0, sizeof(struct parse));
Index: tak.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/tak.c,v
retrieving revision 1.7
diff -u -p -r1.7 tak.c
--- tak.c       10 Mar 2023 12:44:56 -0000      1.7
+++ tak.c       12 Mar 2023 10:54:13 -0000
@@ -230,7 +230,7 @@ tak_parse(X509 **x509, const char *fn, c
        struct parse             p;
        unsigned char           *cms;
        size_t                   cmsz;
-       time_t                   signtime;
+       time_t                   signtime = 0;
        int                      rc = 0;
 
        memset(&p, 0, sizeof(struct parse));

Reply via email to