Почему snprintf / vsnprintf открывает / proc / self / maps при каждом вызове с% n? - PullRequest
0 голосов
/ 03 марта 2019

Я звоню (косвенно) size_t sl; vsnprintf(ap, "...%n...", ..., &sl, ...);, теперь моя программа открывает /proc/self/maps при каждом вызове vsnprintf.Зачем?И как от этого избавиться?

1 Ответ

0 голосов
/ 03 марта 2019

Если glibc был скомпилирован с _FORTIFY_SOURCE=2, он проверяет, находится ли используемая строка формата в сегменте кода, доступном для записи (чтобы предотвратить класс ошибок безопасности, связанных с использованием %n для записи в контролируемые хакером области памяти),Теперь для этого открывается glibc и читает /proc/self/maps для выполнения проверки.

Решения:

  1. Компиляция glibc без _FORTIFY_SOURCE=2.
  2. Не используйте %n (не имеет значения, находится ли он в памяти для записи или только для чтения).
...