Привет, ЛОР!
Хочу странного. А именно, хочу сбросить состояние процесса как если бы он только начался после exec*(), но при этом оставаясь в рамках того же потока выполнения. Особенно хочу unmap() всех страниц, которые были замаплены до этого, кроме страниц с кодом и стеком. Как это нормально сделать?
Поясню зачем это нужно. Хочу сделать песочницы в программе для работы с критичными данными. Песочница представляет собой дочерний процесс, в котором удалены/закрыты все ресурсы кроме связи с родителем и включен Landlock. Как я себе это представляю:
- создаю пару pipe() или сокет для связи
- делаю fork() (на самом деле, clone(), но это не важно тут)
- закрываю все fd кроме созданных в пункте 1 через close_range()
- убираю всю память кроме страниц с кодом и стеком
- включаю landlock, запрещающий примерно всё кроме общения через fd из пункта 1
Вопрос тут в том, как реализовать шаг 4.
UPD:
Судя по всему, никак. Либо парсить /proc/self/maps и удалять лишние страницы, либо делать exec в себя и ветвление в самом начале main().




