Fixing LibFuzzingEngine.a Errors In Crs-multilang
Fixing libFuzzingEngine.a Errors in crs-multilang
Hey there, code wizards! ๐ I've been wrestling with a stubborn issue in my crs-multilang project, and I'm hoping you can lend a hand. I've been following the steps to set up the environment, build the necessary components, and integrate the OSS-Fuzz files for Mongoose. But I'm hitting a wall when I try to run the fuzzing process. I'll break down the problem, the steps I've taken, and the error messages I'm seeing. Hopefully, together, we can get this sorted out!
The Setup and Build Process ๐ ๏ธ
First off, I've gone through the process of building the environment and setting up all the prerequisites from the "crs-architecture" documentation. After that, I built the "crs-webservice" using the following command:
./build.py build --target crs_webserver
Next, I tackled the "crs-multilang" build. This involved installing dependencies and setting up the Docker environment:
pip install -r ./requirements.txt
./docker-build.sh
# Set up LiteLLM
I manually placed the OSS-Fuzz files for the "mongoose" project in the designated directory:
/home/toor/aixcc-afc-atlantis/example-crs-webservice/crs-multilang/benchmarks/projects/aixcc/c/mongoose/
I then created a crs.cfg file to configure the fuzzing targets:
{
"target_harnesses": ["mongoose"]
}
Finally, I fired up my LiteLLM server and executed the run.py script to kick off the fuzzing:
LITELLM_KEY=my-local-litellm-key LITELLM_URL=http://127.0.0.1:4000 python3 run.py run --target aixcc/c/mongoose --config ./crs.cfg
The Errors I'm Encountering ๐ฉ
When I run the run.py command, I'm greeted with a bunch of output, but it culminates in some pretty nasty errors. Here's a snippet:
2025-11-04 06:27:55 ERROR [aixcc/c/mongoose] Fail while executing ['python3', '/home/toor/aixcc-afc-atlantis/example-crs-webservice/crs-multilang/libs/oss-fuzz/infra/helper.py', 'build_fuzzers', '--clean', 'aixcc/c/mongoose', '/home/toor/aixcc-afc-atlantis/example-crs-webservice/crs-multilang/libs/oss-fuzz/build/artifacts/aixcc/c/mongoose/repo']
INFO:__main__:Running: docker build -t aixcc-afc/aixcc/c/mongoose:latest --file /home/toor/aixcc-afc-atlantis/example-crs-webservice/crs-multilang/libs/oss-fuzz/projects/aixcc/c/mongoose/Dockerfile /home/toor/aixcc-afc-atlantis/example-crs-webservice/crs-multilang/libs/oss-fuzz/projects/aixcc/c/mongoose.
#0 building with "default" instance using docker driver
#1 [internal] load build definition from Dockerfile
#1 transferring dockerfile: 1.17kB done
#1 DONE 0.0s
#2 [internal] load metadata for docker.io/library/crs-multilang:latest
#2 DONE 0.0s
#3 [internal] load metadata for docker.io/library/multilang-c-archive:latest
#3 DONE 0.0s
#4 [internal] load metadata for gcr.io/oss-fuzz-base/base-builder:latest
#4 DONE 0.4s
#5 [internal] load .dockerignore
#5 transferring context: 2B done
#5 DONE 0.0s
#6 [stage-0 1/8] FROM gcr.io/oss-fuzz-base/base-builder:latest@sha256:0c229e61349e6e5f4dbcfd433b2b0b5906012d49216675a6402ad1ed270715c4
#6 DONE 0.0s
#7 FROM docker.io/library/multilang-c-archive:latest
#7 DONE 0.0s
#8 FROM docker.io/library/crs-multilang:latest
#8 DONE 0.0s
#9 [internal] load build context
#9 transferring context: 71B done
#9 DONE 0.1s
#10 [stage-0 2/8] RUN apt-get update
#10 CACHED
#11 [stage-0 3/8] RUN git clone https://github.com/cesanta/mongoose
#11 CACHED
#12 [stage-0 4/8] WORKDIR /src
#12 CACHED
#13 [stage-0 5/8] COPY build.sh /src/
#13 CACHED
#14 [stage-0 6/8] COPY fuzz_netdriver_http.c /src/mongoose/fuzz_netdriver_http.c
#14 CACHED
#7 FROM docker.io/library/multilang-c-archive:latest
#7 CACHED
#8 FROM docker.io/library/crs-multilang:latest
#8 CACHED
#15 [stage-0 7/8] COPY --from=multilang-c-archive /multilang-builder/libclang_rt.fuzzer.a /usr/local/lib/clang/18/lib/x86_64-unknown-linux-gnu/libclang_rt.fuzzer.a
#15 DONE 0.1s
#16 [stage-0 8/8] COPY --from=crs-multilang /usr/local/bin/multilang_build.py /multilang_build.py
#16 DONE 0.0s
#17 exporting to image
#17 exporting layers 0.0s done
#17 writing image sha256:65add090bb800de2ee932658cfc17dc673dac77a39e314738d563f27814612cb done
#17 naming to docker.io/aixcc-afc/aixcc/c/mongoose:latest done
#17 DONE 0.0s
INFO:__main__:Cleaning existing build artifacts.
INFO:__main__:Running: docker run --privileged --shm-size=2g --platform linux/amd64 --rm -i -v /home/toor/aixcc-afc-atlantis/example-crs-webservice/crs-multilang/libs/oss-fuzz/build/out/aixcc/c/mongoose/:/out -t aixcc-afc/aixcc/c/mongoose:latest /bin/bash -c 'rm -rf /out/*'.
---------------------------------------------------------------
vm.mmap_rnd_bits = 28
/usr/local/bin/compile: line 27: FUZZING_LANGUAGE: unbound variable
Traceback (most recent call last):
File "/multilang_build.py", line 28, in <module>
ex = to_rel(ex)
^^^^^^^^^^
File "/multilang_build.py", line 18, in to_rel
if path.startswith("/src/"):
^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'startswith'
INFO:__main__:Running: docker run --privileged --shm-size=2g --platform linux/amd64 --rm -i -v /home/toor/aixcc-afc-atlantis/example-crs-webservice/crs-multilang/libs/oss-fuzz/build/work/aixcc/c/mongoose:/work -t aixcc-afc/aixcc/c/mongoose:latest /bin/bash -c 'rm -rf /work/*'.
---------------------------------------------------------------
vm.mmap_rnd_bits = 28
/usr/local/bin/compile: line 27: FUZZING_LANGUAGE: unbound variable
Traceback (most recent call last):
File "/multilang_build.py", line 28, in <module>
ex = to_rel(ex)
^^^^^^^^^^
File "/multilang_build.py", line 18, in to_rel
if path.startswith("/src/"):
^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'startswith'
ERROR:__main__:Cannot use local checkout with "WORKDIR: /src".
subprocess command returned a non-zero exit status: 1
subprocess command returned a non-zero exit status: 1
It looks like the build process is failing when it tries to build the fuzzers. There are a couple of key errors that caught my eye:
FUZZING_LANGUAGE: unbound variable: This suggests an environment variable is not set correctly during the build process.AttributeError: 'NoneType' object has no attribute 'startswith': This error comes from themultilang_build.pyscript, which implies a path variable is not being initialized properly.Cannot use local checkout with "WORKDIR: /src": This indicates an issue with how the source code is being accessed or located within the Docker container.
To further diagnose the issue, I manually built and ran the Docker image and executed the build.sh script inside the container.
Manual Docker Build and Execution ๐ณ
To try and debug this, I built the Docker image manually:
python3 libs/oss-fuzz/infra/helper.py build_image aixcc/c/mongoose --no-pull
And then ran the Docker container:
docker run -it --rm --privileged --shm-size=2g -v "$(pwd)/benchmarks/projects/aixcc/c/mongoose:/src" -v "$(pwd)/benchmarks/build/out/aixcc/c/mongoose:/out" -e OUT=/out -e SRC=/src aixcc-afc/aixcc/c/mongoose:latest /bin/bash
Within the container, I manually executed the build.sh script to pinpoint the exact location of the error:
bash -x build.sh
This revealed a critical error:
+ cd /src/mongoose
build.sh: line 17: cd: /src/mongoose: No such file or directory
+ clang++ -O1 -fno-omit-frame-pointer -gline-tables-only -Wno-error=incompatible-function-pointer-types -Wno-error=int-conversion -Wno-error=deprecated-declarations -Wno-error=implicit-function-declaration -Wno-error=implicit-int -Wno-error=unknown-warning-option -Wno-error=vla-cxx-extension -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION -stdlib=libc++ /usr/lib/libFuzzingEngine.a -I. test/fuzz.c -o /out/fuzz
clang++: error: no such file or directory: '/usr/lib/libFuzzingEngine.a'
clang++: warning: treating 'c' input as 'c++' when in C++ mode, this behavior is deprecated [-Wdeprecated]
+ [[ libfuzzer ==
]] # This line will be different in your output
The most glaring issue is the clang++: error: no such file or directory: '/usr/lib/libFuzzingEngine.a'. This indicates that the libFuzzingEngine.a file, crucial for fuzzing, is missing. Additionally, the cd /src/mongoose command fails, meaning that the working directory isn't set up correctly within the container.
Investigating the libFuzzingEngine.a Mystery ๐ค
The core of the problem appears to revolve around the absence of libFuzzingEngine.a. This file is vital for enabling fuzzing using the LibFuzzer engine. To figure out if it was a build issue or environment issue, I checked the environment variables in the Docker container:
env | grep FUZZING_ENGINE
This produced the following output:
root@5dc070336183:/src# env | grep FUZZING_ENGINE
FUZZING_ENGINE=libfuzzer
LIB_FUZZING_ENGINE=/usr/lib/libFuzzingEngine.a
LIB_FUZZING_ENGINE_DEPRECATED=/usr/lib/libFuzzingEngine.a
The environment variables seem to be correctly configured. LIB_FUZZING_ENGINE and LIB_FUZZING_ENGINE_DEPRECATED are both pointing to the correct path, which suggests that the problem isn't the environment variables themselves.
Potential Causes and Troubleshooting Steps ๐ ๏ธ
Given the errors, hereโs a breakdown of the probable causes and steps to resolve them:
-
Missing
libFuzzingEngine.a: The most significant issue is that the compiler can't findlibFuzzingEngine.a. This suggests that the Dockerfile for the project isn't correctly building or including this library. Solution: Carefully review the Dockerfile used for building theaixcc/c/mongooseimage. Ensure that the Dockerfile includes instructions to download or buildlibFuzzingEngine.aand places it in the expected location (/usr/lib/libFuzzingEngine.a). You might need to add steps to install necessary dependencies for the fuzzing engine. -
Incorrect Working Directory: The
cd /src/mongoosecommand failing indicates an issue with the file structure inside the container. This might be due to incorrect mounting or copying of files during the Docker build process. Solution: Inspect the Dockerfile. Verify that the files from the Mongoose project are being copied to the correct/src/mongoosedirectory and that theWORKDIRis properly set. The--no-pullflag in the build command might also be causing some issues, although this is less likely. -
Missing
-fsanitize=fuzzerFlag: While the environment variableLIB_FUZZING_ENGINEis set, it's possible that the compiler isn't being instructed to use the LibFuzzer. This is usually done with the-fsanitize=fuzzerflag. Solution: Check the build scripts (e.g.,build.sh) to ensure the-fsanitize=fuzzerflag is being passed to the compiler when fuzzing. TheCFLAGSor similar variables should be used to inject the flag. If the flag isn't present, the fuzzing engine will not be correctly linked. -
FUZZING_LANGUAGENot Set: TheFUZZING_LANGUAGEvariable being unbound could cause build failures. This can be resolved by setting theFUZZING_LANGUAGEenvironment variable in the Dockerfile. Solution: Make sure thatFUZZING_LANGUAGEis set inside the Dockerfile. This is something that you can fix by setting the environment variable in the Dockerfile, for exampleENV FUZZING_LANGUAGE="c". It should also ensure that the build script correctly uses this variable. -
multilang_build.pyErrors: Themultilang_build.pyscript seems to have some issues that are leading toAttributeErrorand that are likely related to how the paths are defined inside the script. Solution: Check themultilang_build.pyscript. The path definitions used inside this script are not correct. This can be resolved by correcting the path names.
Next Steps and Further Debugging ๐
Hereโs how I plan to tackle this:
-
Examine the Dockerfile: I'll start by thoroughly reviewing the Dockerfile for the
aixcc/c/mongooseproject to ensurelibFuzzingEngine.ais being built or included and that the project files are being copied correctly. I'll pay close attention to the base image used and any installation steps. -
Inspect the Build Scripts: I'll carefully examine the
build.shscript to verify that the compiler flags are being set correctly, including the-fsanitize=fuzzerflag. I'll also check if the script is correctly using theFUZZING_LANGUAGEvariable. I'll need to check the build process to see if the missing dependencies oflibFuzzingEngine.aare in place. -
Rebuild and Test: After making the necessary adjustments, I'll rebuild the Docker image and re-run the
run.pycommand to see if the errors are resolved. If the errors persist, I'll continue to refine the Dockerfile and build scripts. Then I will rerun the Docker image, run the command and inspect the results. -
Check the version of the installed package. Check the package installation. If the libFuzzingEngine.a does not match the version that the image is built with, this may cause an issue.
Iโll keep you all updated on my progress. I hope this detailed breakdown helps you in your own debugging adventures! Let me know if you have any insights or suggestions. Thanks in advance for your help!