summaryrefslogtreecommitdiffstats
path: root/network/ettercap/patches/CVE-2017-6430.patch
blob: 67483dcc0249120cdd640843c2b6397587d13e49 (plain)
From 4ad7f85dc01202e363659aa473c99470b3f4e1f4 Mon Sep 17 00:00:00 2001
From: Gianfranco Costamagna <costamagnagianfranco@yahoo.it>
Date: Tue, 7 Mar 2017 22:05:31 +0100
Subject: [PATCH] Fix issue #782

---
 utils/etterfilter/ef_compiler.c |  4 +++-
 utils/etterfilter/ef_main.c     | 10 +++++++---
 utils/etterfilter/ef_output.c   |  3 +++
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/utils/etterfilter/ef_compiler.c b/utils/etterfilter/ef_compiler.c
index db876636e..ddb73bd30 100644
--- a/utils/etterfilter/ef_compiler.c
+++ b/utils/etterfilter/ef_compiler.c
@@ -239,7 +239,9 @@ size_t compile_tree(struct filter_op **fop)
    struct filter_op *array = NULL;
    struct unfold_elm *ue;
 
-   BUG_IF(tree_root == NULL);
+   // invalid file
+   if (tree_root == NULL)
+      return 0;
   
    fprintf(stdout, " Unfolding the meta-tree ");
    fflush(stdout);
diff --git a/utils/etterfilter/ef_main.c b/utils/etterfilter/ef_main.c
index ae4591344..431084b91 100644
--- a/utils/etterfilter/ef_main.c
+++ b/utils/etterfilter/ef_main.c
@@ -39,7 +39,7 @@ struct globals *gbls;
 
 int main(int argc, char *argv[])
 {
-
+   int ret_value = 0;
    globals_alloc();
    /* etterfilter copyright */
    fprintf(stdout, "\n" EC_COLOR_BOLD "%s %s" EC_COLOR_END " copyright %s %s\n\n", 
@@ -84,8 +84,12 @@ int main(int argc, char *argv[])
       fprintf(stdout, "\n\nThe script contains errors...\n\n");
   
    /* write to file */
-   if (write_output() != E_SUCCESS)
-      FATAL_ERROR("Cannot write output file (%s)", GBL_OPTIONS->output_file);
+   ret_value = write_output();
+   if (ret_value == -E_NOTHANDLED)
+      FATAL_ERROR("Cannot write output file (%s): the filter is not correctly handled.", GBL_OPTIONS->output_file);
+   else if (ret_value == -E_INVALID)
+      FATAL_ERROR("Cannot write output file (%s): the filter format is not correct. ", GBL_OPTIONS->output_file);
+
    globals_free();
    return 0;
 }
diff --git a/utils/etterfilter/ef_output.c b/utils/etterfilter/ef_output.c
index 5ae591904..fcf19f010 100644
--- a/utils/etterfilter/ef_output.c
+++ b/utils/etterfilter/ef_output.c
@@ -51,6 +51,9 @@ int write_output(void)
    if (fop == NULL)
       return -E_NOTHANDLED;
 
+   if (ninst == 0)
+      return -E_INVALID;
+
    /* create the file */
    fd = open(GBL_OPTIONS->output_file, O_CREAT | O_RDWR | O_TRUNC | O_BINARY, 0644);
    ON_ERROR(fd, -1, "Can't create file %s", GBL_OPTIONS->output_file);