>Давайте подробнее что и как у вас там передается...
>а)Нить вызывает иоктл, в который передает указатель
ну да, выглядит это так: ioctl(snp, SNPSTTY, ttypath), где
ttypath это указатель на строку (char*).
>б)ваш модуль вызывает иоктл, который в компетенции другого модуля
Примерно так:
tty_filp->f_op->ioctl ( tty_filp->f_dentry->d_inode, tty_filp, TIOCSETD,
(int)line_disc_num )
ну это ioctl вызов для установки на терминале новой line_discipline,
с номером line_disc_num. Дык вот последний параметр должен быть
из user_space. Можно туда засунуть и ttypath (предваритель в неё записав
нужный ldic_num), но бывает, что прога,
которая делала первый ioctl уже завершилась, и это не прокатывает.
Ещё как выяснилось этот ioctl юзает функцию tty_set_ldisc, которую можно
юзать, только после того как заэкспортируешь её через EXPORT_SYMBOL. Но
этого не хочется делать, нужно чтоб эта лабуда работала везде без
перекомпиляции ядра...
>в)другой модуль что-то делает с полученным указателем
ну даже не модуль, а терминал устанавливает у себя новую ldisc.
>Несколько комментариев.
>
>Во-первых, если вы вызываете иоктл, то тот модуль точно так же как
>и ваш
>должен воспринимать указатель переданный параметром как указатель из процесса и эрго проверять
>его.
ну да, но вот если процесс сдыхает, то уже проверки не срабатывают и
всё вылетает с ошибками :(
>Во-вторых, если речь все же не про иоктл, а про то, как
>асинхронно ковырять из модуля данные по пользовательским адресам - то тут
>вам подойдет get_user_pages.
возможно, щас почитаю :) Просто хотелось что-нибудь попроще, в одну
функцию...