я использую libFuzzer Fuzz API.
API десериализует массив битов (предоставленный libFuzzer)
и преобразование их в экземпляры класса C ++.
Благодаря формату сериализации, libFuzer может создавать сериализованный объект, который сообщает десериализатору резервировать большие объемы данных (которые не могут быть выполнены).
Это делается с помощью звонков std::vector::resize()
, Вектор бросает std::bad_alloc
и, хотя проблема обнаружена и безопасно устранена, она вызывает крайнюю задержку в фаззере (как упоминалось в следующая документация по вопросам ООМ).
В попытке уменьшить количество памяти, используемой во время работы фаззера, я надеялся установить ulimit -v
и настроить доступную виртуальную память процесса. Однако это вызывает
==27609==ERROR: AddressSanitizer failed to allocate 0xdfff0001000 (15392894357504) bytes at address 2008fff7000 (errno: 12)
==27609==ReserveShadowMemoryRange failed while trying to map 0xdfff0001000 bytes. Perhaps you're using ulimit -v
Почему очиститель адресов не работает под ulmit -v?
Хотелось бы, чтобы я мог, тогда я мог бы пушить более эффективно.
Дополнительная информация:
Мои флаги сборки были:
copts = [
"-fsanitize=address,fuzzer",
"-fsanitize-trap=undefined,integer",
"-fsanitize-coverage=trace-pc,trace-cmp,trace-pc-guard",
"-g",
"-O0",
"-fno-omit-frame-pointer",
"-fno-sanitize=vptr",
],
linkopts = [
"-fsanitize=address,fuzzer",
"-fsanitize-trap=undefined,integer",
"-fno-sanitize=vptr",
"-fsanitize-link-c++-runtime",
],
Я пытался отключить флаги, чтобы я мог установить ulimit
и запустите фаззер:
copts = [
"-fsanitize=fuzzer",
"-g",
"-O0",
"-fno-omit-frame-pointer",
],
linkopts = [
"-fsanitize=fuzzer",
],
но это вызывает немедленную ошибку.
Асан резервирует 1/8 адресного пространства процесса для теневой памяти при запуске для хранения статуса пользовательских данных (выделенных, освобожденных и т. Д.). Это сделано специально, и с этим ничего не поделаешь.
Обратите внимание, что вы, как правило, не заботитесь о виртуальной памяти, а скорее о физической (которая также вызывает new
потерпеть неудачу в вашем случае).
Других решений пока нет …