]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: patterns: fix possible double free when reloading a pattern list
authorDragan Dosen <ddosen@haproxy.com>
Tue, 18 Sep 2018 18:18:09 +0000 (20:18 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 19 Sep 2018 04:46:51 +0000 (06:46 +0200)
A null pointer assignment was missing after free() in function
pat_ref_reload() which can lead to segfault.

This bug was introduced in commit b5997f7 ("MAJOR: threads/map: Make
acls/maps thread safe").

Must be backported to 1.8.

src/pattern.c

index 261a0b4b1f3699ee39bf6441f4d5615ba81ed1d6..664afc9d41b13be84d5e5e122486877e9abcbce8 100644 (file)
@@ -2067,10 +2067,8 @@ int pat_ref_add(struct pat_ref *ref,
 void pat_ref_reload(struct pat_ref *ref, struct pat_ref *replace)
 {
        struct pattern_expr *expr;
-       char *err = NULL;
        struct pat_ref_elt *elt, *safe;
        struct bref *bref, *back;
-       struct sample_data *data;
        struct pattern pattern;
 
 
@@ -2105,6 +2103,9 @@ void pat_ref_reload(struct pat_ref *ref, struct pat_ref *replace)
        list_for_each_entry(expr, &ref->pat, list) {
                expr->pat_head->prune(expr);
                list_for_each_entry(elt, &ref->head, list) {
+                       char *err = NULL;
+                       struct sample_data *data = NULL;
+
                        /* Create sample */
                        if (elt->sample && expr->pat_head->parse_smp) {
                                /* New sample. */
@@ -2122,8 +2123,6 @@ void pat_ref_reload(struct pat_ref *ref, struct pat_ref *replace)
                                }
 
                        }
-                       else
-                               data = NULL;
 
                        /* initialise pattern */
                        memset(&pattern, 0, sizeof(pattern));