Переполнение буфера динамической памяти - это ложный положительный эффект дезинфицирующего устройства адреса? - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть следующая простая программа

void copy(const int16_t *buffer) {
    int16_t *b;
    memcpy(b,buffer,2);
    return ;
}


int LLVMFuzzerTestOneInput(const int16_t *buffer) {
  copy(buffer);
  return 0;
}

, которую я компилирую с помощью clang (v9), используя флаги дезинфицирующего и адресуемого адреса, как указано ниже

clang -fsanitize=address,fuzzer -g test5.c

Когда я запускаю полученный исполняемый файлфаззер обнаруживает переполнение буфера кучи из-за недопустимого чтения - в частности, при попытке скопировать второй байт в memcpy.

Я не могу понять, почему это ошибка. Есть объяснения? Заранее спасибо.

1 Ответ

2 голосов
/ 08 ноября 2019

Поскольку b не инициализируется, когда вы memcpy , вы вызываете неопределенное поведение. Буквально, «куда вы хотите скопировать эти данные?»

Дезинфицирующее средство правильное, и оно приносит вам большую пользу, указывая на эту проблему.

Для чего предназначена эта функция копированияделать?

...