LINUX.ORG.RU

Логика работы guard pages в OpenBSD

 


0

1

Помогите, пожалуйста, понять логику работы Guard pages.

Цитата из книги Absolute OpenBSD от 2013 г. (стр. 174).

Guard Pages

Many pieces of software used to access memory beyond what they allocated. If a program writes to memory that doesn’t belong to it, it’s writing to memory that belongs to a different program. Intruders use this to exploit programs. A guard page is a single page of memory next to the memory allo- cated by a program. The program cannot write to this memory. If the pro- gram tries to write to the guard page, it probably will crash. By enforcing this limit, OpenBSD protects other programs.

Using guard pages everywhere would use a lot of memory, so OpenBSD enables guard pages only in carefully selected places.

Смущает именно вот это место:

If a program writes to memory that doesn’t belong to it, it’s writing to memory that belongs to a different program.

Разве одна программа может изменить память другой программы - другого процесса? Если я не ошибаюсь, то механизм виртуальной памяти не даст такому произойти. Максимум, что может случиться - это перезапись *своей* же страницы памяти, но никак не страницы памяти другого процесса.

И, исходя из этого, guard pages могут помочь при отладке переполнений буфера в рамках *одного* процесса, но никак не между процессами.

ЧЯДНТ?

cast beastie

★★

Последнее исправление: bk_ (всего исправлений: 2)

guard pages могут помочь при отладке переполнений буфера в рамках *одного* процесса, но никак не между процессами.

this

Приведённый тобой пассаж можно интерпретировать по разному, но в данной конкретной формулеровке он iirc ошибочен.

Защита процессов друг от друга основанна на виртуальной памяти. Защита стека в частности на W^X, защита от переполнения буферов — guard pages.

http://undeadly.org/cgi?action=article&sid=20031017121955

http://www.openbsd.org/papers/tdose_memalloc/presentation.html#(1)

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

Да, первую ссылку читал, а вторую смотрю, спасибо.

Защита процессов друг от друга основанна на виртуальной памяти. Защита стека в частности на W^X, защита от переполнения буферов — guard pages.

А как тогда понимать цитату из книги:

If a program writes to memory that doesn’t belong to it, it’s writing to memory that belongs to a different program.

to a different program

Он же говорит о разных процессах?

bk_ ★★
() автор топика
Последнее исправление: bk_ (всего исправлений: 1)
Ответ на: комментарий от bk_

Вот тут и могут быть разногласия. Про процессы у него ни слова.

Под «программой» может подразумеваться и часть программы, а не весь процесс.

К тому же (тут я могу ошибаться), но были и архитектуры без виртуальной памяти. В таком случае это было бы верно и для процесса.

В общем, просто неудачная формулеровка, не надо к ней так придираться. ;)

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

просто неудачная формулеровка

Да, скорее всего, так и есть :)

Судя по http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdlib/malloc.c?rev=1.6... и использованию

static int malloc_guard = 0;
в коде это именно в рамках процесса (при условии, что вирт. память есть).

К тому же (тут я могу ошибаться), но были и архитектуры без виртуальной памяти. В таком случае это было бы верно и для процесса.

Да, согласен. Спасибо, вопрос решен.

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