Properly free() crl & auth tree in parser process
authorjob <job@openbsd.org>
Sat, 3 Sep 2022 21:24:02 +0000 (21:24 +0000)
committerjob <job@openbsd.org>
Sat, 3 Sep 2022 21:24:02 +0000 (21:24 +0000)
OK claudio@

usr.sbin/rpki-client/cert.c
usr.sbin/rpki-client/crl.c
usr.sbin/rpki-client/extern.h
usr.sbin/rpki-client/parser.c

index 76ceca7..0098c0e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: cert.c,v 1.88 2022/09/03 14:40:09 job Exp $ */
+/*     $OpenBSD: cert.c,v 1.89 2022/09/03 21:24:02 job Exp $ */
 /*
  * Copyright (c) 2022 Theo Buehler <tb@openbsd.org>
  * Copyright (c) 2021 Job Snijders <job@openbsd.org>
@@ -978,6 +978,18 @@ authcmp(struct auth *a, struct auth *b)
 
 RB_GENERATE_STATIC(auth_tree, auth, entry, authcmp);
 
+void
+auth_tree_free(struct auth_tree *auths)
+{
+       struct auth     *auth, *tauth;
+
+       RB_FOREACH_SAFE(auth, auth_tree, auths, tauth) {
+               RB_REMOVE(auth_tree, auths, auth);
+               cert_free(auth->cert);
+               free(auth);
+       }
+}
+
 struct auth *
 auth_find(struct auth_tree *auths, const char *aki)
 {
index 749f23c..25bb2b5 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: crl.c,v 1.15 2022/04/21 09:53:07 claudio Exp $ */
+/*     $OpenBSD: crl.c,v 1.16 2022/09/03 21:24:02 job Exp $ */
 /*
  * Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -118,3 +118,14 @@ crl_free(struct crl *crl)
        X509_CRL_free(crl->x509_crl);
        free(crl);
 }
+
+void
+crl_tree_free(struct crl_tree *crlt)
+{
+       struct crl      *crl, *tcrl;
+
+       RB_FOREACH_SAFE(crl, crl_tree, crlt, tcrl) {
+               RB_REMOVE(crl_tree, crlt, crl);
+               crl_free(crl);
+       }
+}
index 43ebfcc..77eee1d 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: extern.h,v 1.155 2022/09/03 14:40:09 job Exp $ */
+/*     $OpenBSD: extern.h,v 1.156 2022/09/03 21:24:02 job Exp $ */
 /*
  * Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
  *
@@ -511,6 +511,7 @@ struct tal  *tal_read(struct ibuf *);
 
 void            cert_buffer(struct ibuf *, const struct cert *);
 void            cert_free(struct cert *);
+void            auth_tree_free(struct auth_tree *);
 struct cert    *cert_parse_ee_cert(const char *, X509 *);
 struct cert    *cert_parse_pre(const char *, const unsigned char *, size_t);
 struct cert    *cert_parse(const char *, struct cert *);
@@ -556,6 +557,7 @@ struct crl  *crl_parse(const char *, const unsigned char *, size_t);
 struct crl     *crl_get(struct crl_tree *, const struct auth *);
 int             crl_insert(struct crl_tree *, struct crl *);
 void            crl_free(struct crl *);
+void            crl_tree_free(struct crl_tree *);
 
 /* Validation of our objects. */
 
index cf8e7b0..a613966 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: parser.c,v 1.76 2022/09/03 13:30:27 claudio Exp $ */
+/*     $OpenBSD: parser.c,v 1.77 2022/09/03 21:24:02 job Exp $ */
 /*
  * Copyright (c) 2019 Claudio Jeker <claudio@openbsd.org>
  * Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
@@ -744,10 +744,13 @@ proc_parser(int fd)
                entity_free(entp);
        }
 
-       /* XXX free auths and crl tree */
+       auth_tree_free(&auths);
+       crl_tree_free(&crlt);
 
        X509_STORE_CTX_free(ctx);
        msgbuf_clear(&msgq);
 
+       ibuf_free(inbuf);
+
        exit(0);
 }