path of the opened fd [message #51553] |
Fri, 18 July 2014 19:03  |
|
Может кто подскажет, как ядро получает путь (полное имя) файла, имея на руках открытый программой файловый дескриптор? В частности эту процедуру выполняет в ядре checkpoint/restore, запомимая путь (имя) открытого программой файлового дескриптора при suspend и открывая по запомненому имени fd при resume.
Озаботился данной проблемой при попытке использования для CT aufs и отказе openvz выполнять suspend/resume. Выяснилось, что полное имя файла в этом случае -- это оригинальное имя файла. То есть открытый программой fd ссылается на оригинальный dnode (вне aufs).
Проблема не является специфичной для aufs. Недавний эксплоит для docker, который позволял программе из контейнера открыть любой файл из host-системы базировался на том, что часть файлов внутри контейнера была смонтирована по "mount -o bind". Эксплоит открывал такой файл и с помошью этого дескриптора получал доступ к файловой системе хоста. Этот файловый дескриптор каким-то образом ссылается на оригинальный dnode.
Конечная задача -- это понять: возможно ли реализовать kernel mode unionfs, в которой файловый дескриптор (открытый программой файл) не ссылается на оригинальный dnode?
PS: подозреваю, что в fd нет прямой ссылки на dnode...
|
|
|