объяснение
Существует два вида адресного пространства: виртуальное и физическое. На физической модели (обычно используемой ядром) память ограничена, и каждый адрес соответствует физическому.
Виртуальный используется процессами. Там нет предела (кроме одного из-за размера указателя). Чтобы получить больше памяти, программа просто запрашивает ее (игнорируя, какую сумму можно запросить). Каждый адрес сопоставлен с разными физическими адресами.
Вот как процесс ограничен в том, что они могут читать из оперативной памяти.
Эта проблема
Причина заключается в том, что системные вызовы используют ring0, но в то же время (по крайней мере, в Linux) состояние процесса обновляется до прерываемого, предполагая, что системные вызовы используют виртуальное адресное пространство.
Насколько я понимаю, вызовы процессора связаны с привилегированными инструкциями, а не с адресным пространством (поскольку оно связано с MMU).
Таким образом, если чтение из-за ограничений (из-за уязвимости) происходит во время выполнения системного вызова в коде ядра. Может ли он вернуть память от других процессов?