Как использовать mmap для совместного использования пользовательского пространства и потоков ядра - PullRequest
3 голосов
/ 30 октября 2011

У меня возникли проблемы с поиском подходящих примеров для решения моей проблемы.Я хочу разделить 4K (4096) байт данных между пользователем и пространством ядра.Я нашел много идей, которые говорят, что я должен выделять память из ядра и отображать ее в пространстве пользователя.Может кто-нибудь привести пример, как это сделать в Linux 2.6.38.Есть ли хороший документ, который объясняет это?

Заранее спасибо.

1 Ответ

5 голосов
/ 31 октября 2011

Предложенный способ является односторонним, но, поскольку пользовательское пространство не находится под вашим контролем (имеется в виду, что любая пользовательская программа имеет возможность тыкать в ядро), вы открываете возможности для злонамеренной атаки из пользовательского пространства.Это основанное на ядре разделение памяти с пользовательским пространством также описано здесь:

http://www.scs.ch/~frey/linux/memorymap.html

Вместо этого, как насчет выделения памяти в пространстве пользователя, а затем из ядра используйте API copy_from_user ()и copy_to_user () для копирования в / из памяти пространства пользователя?Если вы хотите разделить память между различными процессами, тогда вы всегда можете использовать API, связанный с IPC, для выделения и определения памяти, например, shmget () и т. Д. И в этом случае в самом исходном коде ядра много примеров кода.

напр.

fs / checkum.c: missing = __copy_from_user (dst, src, len);

...