TGViewer
Гепардово гнездо Гепардово гнездо @gepardchan · 617 subscribers
Post #8 422
Маппинг памяти на нулевой адрес в Linux

Вопрос обсуждался на Stack Overflow здесь

Если коротко, то мапить странцы по нулевому адресу можно (если делать это с флагом MAP_FIXED). Правда, это может сделать только root (или процесс с нужными capabilities). Почему это не может сделать процесс обычного пользователя? Чтобы пользователь не мог эксплуатировать уязвимости ядра, связанные с чтением по нулевому указателю. А он это мог бы сделать, поскольку ядро «видит» маппинги памяти пользовательского процесса. И если пользователь замапил нулевую страницу, то она будет доступна и в ядре, тоже по нулевому адресу.

Пример (со Stack Overflow):
#include <sys/mman.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>

int main() {
void *p = mmap(0, sysconf(_SC_PAGE_SIZE),
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_FIXED | MAP_ANONYMOUS, -1, 0);
printf("mmap result %p (errno %s)\n", p, strerror(errno));
return 0;
}
  • 👍 2
More from @gepardchan
  1. Sep 7, 2025Итак, расскажу о том, что я сделал еще давно, но про что все никак не доходили руки написа…
  2. Dec 10, 2024https://habr.com/ru/post/472970/ Статья 2019 года, то есть довольно старая, с учетом того,…
  3. Nov 30, 2024Сегодня читал про то, как Debian везде перешел на 64-х битный time_t. Изменение войдет в р…
  4. Nov 26, 2024https://www.ryanliptak.com/blog/every-rc-exe-bug-quirk-probably/ Не знаю, как вы, а я прос…
  5. Nov 22, 2024Еще про проклятые фичи баша https://yossarian.net/til/post/some-surprising-code-execution-…
  6. Nov 21, 2024Про переписывание истории В баше (а точнее, в GNU Readline, который используется башом), е…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →