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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.