Hello,

Gentle reminder to check if the proposed patch works :-)

Thanks,
Bhargava

On 07/30/2018 11:58 AM, Bhargava Shastry wrote:
> Any updates on the proposed patch? :-)
> 
> On 07/16/2018 02:07 PM, Bhargava Shastry wrote:
>> Update: I fixed these errors in the attached patch that supersedes the
>> patch here (https://patchwork.ozlabs.org/patch/942118/)
>>
>> The major change is that I add the following line for each fuzz target
>> binary in the tests/oss-fuzz/automake.mk file:
>>
>> e.g.,
>> tests_oss_fuzz_flow_extract_target_LDFLAGS = $(LIB_FUZZING_ENGINE) \
>>                                             -lc++
>>
>> Regards,
>> Bhargava
>>
>> On 07/16/2018 11:45 AM, Bhargava Shastry wrote:
>>> Oops, here's the link failure log:
>>>
>>> ```
>>> /usr/lib/gcc/x86_64-linux-gnu/5.4.0/../../../x86_64-linux-gnu/crt1.o: In
>>> function `_start':
>>> (.text+0x20): undefined reference to `main'
>>> clang-7: error: linker command failed with exit code 1 (use -v to see
>>> invocation)
>>> Makefile:4159: recipe for target 'tests/oss-fuzz/flow_extract_target' failed
>>> make: *** [tests/oss-fuzz/flow_extract_target] Error 1
>>> fuzzers build failed.
>>> ```
>>>
>>> The main symbol is provided by libfuzzer (clang++ -lFuzzingEngine)
>>>
>>> Regards,
>>> Bhargava
>>>
>>> On 07/16/2018 11:36 AM, Bhargava Shastry wrote:
>>>> Hi Ben,
>>>>
>>>>> Never mind that one, I failed to check in some of that.
>>>>>
>>>>> I sent it formally:
>>>>>         https://patchwork.ozlabs.org/patch/942118/
>>>>
>>>> Thanks for the patch. This fixes the previous error. Now, there are some
>>>> new errors during the compilation/linking process. I think most of this
>>>> can be fixed if I figure out how automake works. In a nutshell, here's
>>>> the problem:
>>>>
>>>> - oss-fuzz provides compilation flags that can be plugged in like so
>>>> ```
>>>> CC=clang
>>>> CXX=clang++
>>>> CFLAGS=-O1 -fno-omit-frame-pointer -gline-tables-only
>>>> -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=address
>>>> -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link
>>>> CXXFLAGS=-O1 -fno-omit-frame-pointer -gline-tables-only
>>>> -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=address
>>>> -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link -stdlib=libc++
>>>> ```
>>>>
>>>> And here's what I used to do before
>>>>
>>>> - Use clang and CFLAGS above plus some additional includes to compile
>>>> each of the fuzzer tests
>>>> - Use clang++ and additional linker flags to link these into a fuzzer 
>>>> binary
>>>>
>>>> Now, I see that the compilation works
>>>> ```
>>>> depbase=`echo tests/oss-fuzz/flow_extract_target.o | sed
>>>> 's|[^/]*$|.deps/&|;s|\.o$||'`;\
>>>> clang -DHAVE_CONFIG_H -I.    -I ./include -I ./include -I ./lib -I ./lib
>>>> -I/usr/include   -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare
>>>> -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum
>>>> -Wunused-parameter -Wbad-function-cast -Wcast-align -Wstrict-prototypes
>>>> -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers
>>>> -Wthread-safety -fno-strict-aliasing -Wswitch-bool
>>>> -Wlogical-not-parentheses -Wsizeof-array-argument -Wshift-negative-value
>>>> -Qunused-arguments -Wshadow -Wno-null-pointer-arithmetic    -O1
>>>> -fno-omit-frame-pointer -gline-tables-only
>>>> -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=address
>>>> -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link -MT
>>>> tests/oss-fuzz/flow_extract_target.o -MD -MP -MF $depbase.Tpo -c -o
>>>> tests/oss-fuzz/flow_extract_target.o
>>>> tests/oss-fuzz/flow_extract_target.c &&\
>>>> mv -f $depbase.Tpo $depbase.Po
>>>> ```
>>>>
>>>> However, the linking fails
>>>> ```
>>>> libtool: link: clang -Wstrict-prototypes -Wall -Wextra -Wno-sign-compare
>>>> -Wpointer-arith -Wformat -Wformat-security -Wswitch-enum
>>>> -Wunused-parameter -Wbad-function-cast -Wcast-align -Wstrict-prototypes
>>>> -Wold-style-definition -Wmissing-prototypes -Wmissing-field-initializers
>>>> -Wthread-safety -fno-strict-aliasing -Wswitch-bool
>>>> -Wlogical-not-parentheses -Wsizeof-array-argument -Wshift-negative-value
>>>> -Qunused-arguments -Wshadow -Wno-null-pointer-arithmetic -O1
>>>> -fno-omit-frame-pointer -gline-tables-only
>>>> -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -fsanitize=address
>>>> -fsanitize-address-use-after-scope -fsanitize=fuzzer-no-link -o
>>>> tests/oss-fuzz/flow_extract_target tests/oss-fuzz/flow_extract_target.o
>>>> -L/usr/lib lib/.libs/libopenvswitch.a -lssl -lcrypto -latomic
>>>> ```
>>>>
>>>> I think adding -lFuzzingEngine should fix this but another variable
>>>> between my build script and automake is the use of clang++ for linking.
>>>>
>>>> Do you know how I can experiment with different linker flags and
>>>> compiler/linker in automake?
>>>>
>>>> Regards,
>>>> Bhargava
>>>>
>>>>
>>>
>>
> 

-- 
Bhargava Shastry <[email protected]>
Security in Telecommunications
TU Berlin / Telekom Innovation Laboratories
Ernst-Reuter-Platz 7, Sekr TEL 17 / D - 10587 Berlin, Germany
phone: +49 30 8353 58235
Keybase: https://keybase.io/bshastry
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to