Issue 91130
Summary [libfuzzer] No Large File Support in 32bit targets
Labels new issue
Assignees
Reporter ernst-schwaiger
    FuzzerIOPosix.cpp hasn't enabled Large File Support/LFS for 32bit targets. All stat() invocations return ``EOVERFLOW`` on large file systems. Consequently, ``IsFile(), IsDirectory(), FileSize()`` will always return false/zero and e.g. ``my32BitFuzzBinary CORPUS`` stops with "ERROR: The required directory "CORPUS" does not exist"

Patching FuzzerIOPosix.cpp like this overcomes the issue (albeit adding -D_FILE_OFFSET_BITS=64 to the CMakefiles is a cleaner solution):
```
//...
#if (LIBFUZZER_POSIX || LIBFUZZER_FUCHSIA)

// turn LFS on for i386 (and other supported 32 bit platforms)
#if __i386
  #define _FILE_OFFSET_BITS 64
#endif

#include "FuzzerExtFunctions.h"
#include "FuzzerIO.h"
#include <cstdarg>
#include <cstdio>
#include <dirent.h>
#include <fstream>
#include <iterator>
#include <libgen.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

// ensure LFS is turned on
static_assert(sizeof(off_t) == 8, "Large file interface is not present, see _FILE_OFFSET_BITS in https://www.gnu.org/software/libc/manual/html_node/Feature-Test-Macros.html");

namespace fuzzer {
//...
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to