LINUX.ORG.RU

помогите с fork()!


0

0

ядро 2.2.19, в модуле перехватываю fork():

...

asmlinkage int (*original_fork)(struct pt_regs *);

asmlinkage int my_fork_syscall(struct pt_regs *regs){

printk("fork implemeted"); return original_fork(regs); }

int init_module(){

original_fork = sys_call_table[__NR_fork];

sys_call_table[__NR_fork] = my_fork_syscall;

return 0; }

...

так вот при загрузке такого модуля fork() престает работать (все вылетает с Segmentation fault, даже перезагрузиться можно только посредством reset и никак больше), а в логи сыпется:

<4>no vm_x86: BAD

что я неправильно сделал?

Я такимже способом меняю sys_open() и всё замечатель работает, а вот sys_fork()- не хочет...

anonymous

да, и ещё: как всё-таки за-chroot()-ить процесс из ядра (из модуля)?

Подскажите кто-нибудь!!!

anonymous
()

огромное спасибо!

anonymous
()

беру своё спасибо обратно!!! нифига не работает!!!

MOD_USE_COUNT_... тут не причём: я его даже попытаться выгрузить не могу- на любое действие Segmentation Fault!!!

Так как мне быть? И вообще, обьясните мне пожалуйста попдробнее, как, куда и когда пишется информация для возврата в процесс из системного вызова, а также привызове в ядре своего же кода??? Благодарен заранее...

anonymous
()

я сам разобрался!!! Оказывается: системные вызовы, кот. берут struct pt_gres * в качестве параметра нельзя так просто перехватывать, т.к. они берут свои аргументы из стека, обрабатывают их, и туда же и возвращают...

Обойти это можно лишь переписав вызов целиком из исходников ядра, попутно вставив туда что нужно...

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.