aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Catena cyber <35799796+catenacyber@users.noreply.github.com>2019-04-24 18:16:10 +0200
committerGravatar Abhishek Arya <inferno@chromium.org>2019-04-24 09:16:10 -0700
commit1e88b4f94860624b8720159370993092a98b0b26 (patch)
tree3d8faca1a19e8560c60dbab05078618beda558d2
parent50d08b7d7c395e0836f924bfa5fa4149e8c5ea9d (diff)
Custom patch for libpcap to avoid infinite loop (#2344)
-rw-r--r--projects/libpcap/Dockerfile2
-rwxr-xr-xprojects/libpcap/build.sh1
-rw-r--r--projects/libpcap/patch.diff24
3 files changed, 27 insertions, 0 deletions
diff --git a/projects/libpcap/Dockerfile b/projects/libpcap/Dockerfile
index 91d870e7..f7acf86e 100644
--- a/projects/libpcap/Dockerfile
+++ b/projects/libpcap/Dockerfile
@@ -22,3 +22,5 @@ RUN git clone --depth 1 https://github.com/the-tcpdump-group/libpcap.git libpcap
RUN git clone --depth=1 https://github.com/the-tcpdump-group/tcpdump.git tcpdump
WORKDIR $SRC
COPY build.sh $SRC/
+COPY patch.diff $SRC/
+
diff --git a/projects/libpcap/build.sh b/projects/libpcap/build.sh
index 97cf4aa5..106db2b7 100755
--- a/projects/libpcap/build.sh
+++ b/projects/libpcap/build.sh
@@ -17,6 +17,7 @@
cd libpcap
# build project
+git apply ../patch.diff
mkdir build
cd build
cmake ..
diff --git a/projects/libpcap/patch.diff b/projects/libpcap/patch.diff
new file mode 100644
index 00000000..c76b3393
--- /dev/null
+++ b/projects/libpcap/patch.diff
@@ -0,0 +1,24 @@
+diff --git a/optimize.c b/optimize.c
+index 4afd063f..90e8c571 100644
+--- a/optimize.c
++++ b/optimize.c
+@@ -1888,7 +1888,7 @@ opt_root(struct block **b)
+ static void
+ opt_loop(opt_state_t *opt_state, struct icode *ic, int do_stmts)
+ {
+-
++ int loopCounter = 0;
+ #ifdef BDEBUG
+ if (pcap_optimizer_debug > 1 || pcap_print_dot_graph) {
+ printf("opt_loop(root, %d) begin\n", do_stmts);
+@@ -1909,6 +1909,10 @@ opt_loop(opt_state_t *opt_state, struct icode *ic, int do_stmts)
+ opt_dump(opt_state, ic);
+ }
+ #endif
++ loopCounter++;
++ if (loopCounter > 1000) {
++ break;
++ }
+ } while (!opt_state->done);
+ }
+