LINUX.ORG.RU

Проверка области памяти на доступ


0

0

Привет всем.

В ядре есть замечательно полезная функция access_ok(type,addr,size), проверяющая участок юзерспейсной памяти [addr; addr+size-1] на доступ, описываемый параметром type (чтение или чтение/запись).

Но это в ядре. Есть ли подобное средство в юзерспейсе... проще говоря, в libc? Ну или приемлемый костыль(не слишком сучковатый)?

Спасибо.

Ответ на: комментарий от Ex

>ну значить таки остаеца только SIGSEGV трапить

Таки да((((... а не хотелось бы.

farisey
() автор топика
Ответ на: комментарий от Ex

А разве после SIGSEGV приложение может нормально работать? Если не ошибаюсь, после SIGSEGV дальнейшее поведение не определено...

magellan
()

/proc/self/maps ? ещё можно изменить права: int mprotect(void *addr, size_t len, int prot); что бы не получить sigsegv при доступе

Eshkin_kot ★★
()
Ответ на: комментарий от krum

1. man signal не надо... При каждом вызове проверки дважды переопределять хендлер для SIGSEGV, а потом и обрабатывать...
2. А вот mprotect порадовал. Упустили его из виду, потому что в man mmap(куда все первым делом и полезли) его нет в SEE ALSO. За-а-а-Юзаем!
3. sbrk... уж очень жестоко _так_ проверять))))

Спасибо всем!

farisey
() автор топика
Ответ на: комментарий от farisey

Хм, можно добавить системный вызов access_ok :) Или сделать простое char устройство, которому будет подаваться адрес, а оно будет возвращать ок или не ок.

krum
()
Ответ на: комментарий от krum

>сделать простое char устройство

Думал о том. Но расхотел)))). Вместе с проектом тащить модуль... а там и рутовые права нужны для загрузки, и зависимости версионные построже... gcc -static не поможет... "Нам такой футбол не нужен" (c).

PS Правда ежели такой char-device в следующее ядро мэйнтейнеры запихнут... буду только рад))... а то там какие-то дрова для "вибраторов PlayStation2" или чего-то вроде того есть... а access_ok для user-space нету... не туда развиваются;-)..хотя это уже оффтоп.

farisey
() автор топика
Ответ на: комментарий от farisey

> gcc -static

Имеется в виду, что привычный user-space метод не подойдёт... а то сейчас наброситесь: "Ламер! Нету в ядре статической компиляции!!..." ;-)

farisey
() автор топика

Чем эта функция может быть полезна в юзерспейс?

Dr_ZLO
()

А зачем? Все, что ты сам не выделил malloc-ом (ну, brk) или mmap-ом или shmat или еще чем-то таким - все нельзя.

Как-то так.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.