SerenityOS / serenity

The Serenity Operating System 🐞
https://serenityos.org
BSD 2-Clause "Simplified" License
30.61k stars 3.19k forks source link

Building error when using Fuzzbench (oss-fuzz) #4858

Closed RosenZhu closed 3 years ago

RosenZhu commented 3 years ago

I build the project in fuzzbench with a specific commit 65eef944ab35ca85be178615ffc32834d430f4e3 and the error is:

323.1 [ 89%] Built target Lagom
Step #2 - "coverage-serenity_fuzzshell-builder": #19 323.1 Scanning dependencies of target FuzzShell
Step #2 - "coverage-serenity_fuzzshell-builder": #19 323.1 [ 90%] Building CXX object Fuzzers/CMakeFiles/FuzzShell.dir/FuzzShell.cpp.o
Step #2 - "coverage-serenity_fuzzshell-builder": #19 323.7 [ 90%] Linking CXX executable FuzzShell
Step #2 - "coverage-serenity_fuzzshell-builder": #19 326.8 [ 90%] Built target FuzzShell
Step #2 - "coverage-serenity_fuzzshell-builder": #19 326.8 Scanning dependencies of target FuzzMarkdown
Step #2 - "coverage-serenity_fuzzshell-builder": #19 326.8 [ 90%] Building CXX object Fuzzers/CMakeFiles/FuzzMarkdown.dir/FuzzMarkdown.cpp.o
Step #2 - "coverage-serenity_fuzzshell-builder": #19 327.1 [ 91%] Linking CXX executable FuzzMarkdown
Step #2 - "coverage-serenity_fuzzshell-builder": #19 329.1 [ 91%] Built target FuzzMarkdown
Step #2 - "coverage-serenity_fuzzshell-builder": #19 329.1 Scanning dependencies of target FuzzGIFLoader
Step #2 - "coverage-serenity_fuzzshell-builder": #19 329.1 [ 91%] Building CXX object Fuzzers/CMakeFiles/FuzzGIFLoader.dir/FuzzGIFLoader.cpp.o
Step #2 - "coverage-serenity_fuzzshell-builder": #19 329.4 [ 92%] Linking CXX executable FuzzGIFLoader
Step #2 - "coverage-serenity_fuzzshell-builder": #19 331.4 ../libLagom.a(SharedBuffer.cpp.o): In function `AK::SharedBuffer::create_with_size(int)':
Step #2 - "coverage-serenity_fuzzshell-builder": #19 331.4 /src/serenity/AK/SharedBuffer.cpp:64: undefined reference to `shm_open'
Step #2 - "coverage-serenity_fuzzshell-builder": #19 331.4 ../libLagom.a(SharedBuffer.cpp.o): In function `AK::SharedBuffer::create_from_shbuf_id(int)':
Step #2 - "coverage-serenity_fuzzshell-builder": #19 331.4 /src/serenity/AK/SharedBuffer.cpp:126: undefined reference to `shm_open'
Step #2 - "coverage-serenity_fuzzshell-builder": #19 331.4 ../libLagom.a(SharedBuffer.cpp.o): In function `~SharedBuffer':
Step #2 - "coverage-serenity_fuzzshell-builder": #19 331.4 /src/serenity/AK/SharedBuffer.cpp:179: undefined reference to `shm_unlink'
Step #2 - "coverage-serenity_fuzzshell-builder": #19 331.6 clang-12: error: linker command failed with exit code 1 (use -v to see invocation)
Step #2 - "coverage-serenity_fuzzshell-builder": #19 331.6 Fuzzers/CMakeFiles/FuzzGIFLoader.dir/build.make:103: recipe for target 'Fuzzers/FuzzGIFLoader' failed
Step #2 - "coverage-serenity_fuzzshell-builder": #19 331.6 make[2]: *** [Fuzzers/FuzzGIFLoader] Error 1
Step #2 - "coverage-serenity_fuzzshell-builder": #19 331.6 make[1]: *** [Fuzzers/CMakeFiles/FuzzGIFLoader.dir/all] Error 2
Step #2 - "coverage-serenity_fuzzshell-builder": #19 331.6 CMakeFiles/Makefile2:252: recipe for target 'Fuzzers/CMakeFiles/FuzzGIFLoader.dir/all' failed
Step #2 - "coverage-serenity_fuzzshell-builder": #19 331.6 make: *** [all] Error 2
Step #2 - "coverage-serenity_fuzzshell-builder": #19 331.6 Makefile:102: recipe for target 'all' failed

I also tried another commit 8653128ca8545acb123545bfa4a53b1bd0df4a14, but it also failed.

ADKaster commented 3 years ago

What OS are you using to build? Maybe there's some target_link_libraries missing in the fuzzer's CMakeLists.txt. A recent change converted AK::SharedBuffer to use posix shared memory. https://man7.org/linux/man-pages/man3/shm_open.3p.html

ADKaster commented 3 years ago

Actually wait that's not true, my change two weeks ago just enabled it for all non-serenity platforms assuming that Posix Shared memory is available on all platoforms. The "use shm_open in serenity" change was just proposed in some issue/MR I was reading.

RosenZhu commented 3 years ago

What OS are you using to build? Maybe there's some target_link_libraries missing in the fuzzer's CMakeLists.txt. A recent change converted AK::SharedBuffer to use posix shared memory. https://man7.org/linux/man-pages/man3/shm_open.3p.html

I build the project in docker, where the OS is ubuntu. (I use the Dockerfile and build.sh provided in oss-fuzz)

ADKaster commented 3 years ago

Is that using the most recent commit from oss-fuzz ? @nico made some changes to the serenity config in that repo back in November to have it use Ninja instead of Make. Your build output looks like it's using make. Might have to do a python3 infra/helper.py build_image serenity to get the latest image?

https://github.com/google/oss-fuzz/tree/master/projects/serenity

Following the instructions here with a fresh clone of oss-fuzz built the fuzzers just fine for me with no linker issues.

https://github.com/SerenityOS/serenity/tree/master/Meta/Lagom#fuzzing-on-oss-fuzz

Unless I'm misunderstanding the image you are using?

RosenZhu commented 3 years ago

Thanks for your help. I use fuzzbench to build it rather than oss-fuzz. The fuzzbench can use benchmarks from oss-fuzz, and can turn the project back to a specific commit. The error may happen because of fuzzbench. I build your project using a previous commit (e.g., 65eef944ab35ca85be178615ffc32834d430f4e3 or 8653128ca8545acb123545bfa4a53b1bd0df4a14). Sometimes it succeeds but sometimes it fails.