diff options
author | Catena cyber <35799796+catenacyber@users.noreply.github.com> | 2019-04-24 18:16:10 +0200 |
---|---|---|
committer | Abhishek Arya <inferno@chromium.org> | 2019-04-24 09:16:10 -0700 |
commit | 1e88b4f94860624b8720159370993092a98b0b26 (patch) | |
tree | 3d8faca1a19e8560c60dbab05078618beda558d2 /projects/libpcap | |
parent | 50d08b7d7c395e0836f924bfa5fa4149e8c5ea9d (diff) | |
download | oss-fuzz-1e88b4f94860624b8720159370993092a98b0b26.tar.gz |
Custom patch for libpcap to avoid infinite loop (#2344)
Diffstat (limited to 'projects/libpcap')
-rw-r--r-- | projects/libpcap/Dockerfile | 2 | ||||
-rwxr-xr-x | projects/libpcap/build.sh | 1 | ||||
-rw-r--r-- | projects/libpcap/patch.diff | 24 |
3 files changed, 27 insertions, 0 deletions
diff --git a/projects/libpcap/Dockerfile b/projects/libpcap/Dockerfile index 91d870e75..f7acf86ef 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 97cf4aa55..106db2b7d 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 000000000..c76b33937 --- /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); + } + |