Пишется модуль для ядра. Вообщем тут надо передать из одной функции в другой целое число. Но при передаче вылетает сегфолт. Jul 3 16:02:22 dell kernel: Unable to handle kernel NULL pointer dereference at virtual address 00000002 Jul 3 16:02:22 dell kernel: printing eip: Jul 3 16:02:22 dell kernel: c01d32c9 Jul 3 16:02:22 dell kernel: *pde = 00000000 Jul 3 16:02:22 dell kernel: Oops: 0000 [#1] Jul 3 16:02:22 dell kernel: Modules linked in: netfw speedstep_lib freq_table thermal processor fan button battery ac rfcomm irtty_sir hidp sir_dev irda l2cap crc_ccitt snd_pcm_oss snd_mixer_oss snd_seq_midi snd_seq_midi_event snd_seq hci_usb bluetooth evdev joydev sg st sr_mod pcmcia edd ipt_state ip6t_REJECT ipt_REJECT iptable_mangle iptable_filter ip6table_mangle ip_nat_ftp iptable_nat ip_conntrack_ftp ip_conntrack ip_tables ip6table_filter ip6_tables ipv6 snd_es1968 gameport snd_ac97_codec snd_pcm snd_timer snd_page_alloc snd_mpu401_uart snd_rawmidi snd_seq_device snd soundcore video1394 ohci1394 uhci_hcd yenta_socket i2c_piix4 intel_agp rsrc_nonstatic i2c_core agpgart usbcore pcmcia_core raw1394 ieee1394 capability parport_pc lp parport sd_mod scsi_mod dm_mod reiserfs ide_cd cdrom ide_disk piix ide_core Jul 3 16:02:22 dell kernel: CPU: 0 Jul 3 16:02:22 dell kernel: EIP: 0060:[<c01d32c9>] Tainted: G U VLI Jul 3 16:02:22 dell kernel: EFLAGS: 00010006 (2.6.11.4-20a-default) Jul 3 16:02:22 dell kernel: EIP is at vsnprintf+0x39/0x510 Jul 3 16:02:22 dell kernel: eax: c03b61df ebx: 00000400 ecx: 00000002 edx: 00000400 Jul 3 16:02:22 dell kernel: esi: c03b61e0 edi: c8c40595 ebp: c03b65df esp: c640bef4 Jul 3 16:02:22 dell kernel: ds: 007b es: 007b ss: 0068 Jul 3 16:02:22 dell kernel: Process insmod (pid: 6552, threadinfo=c640a000 task=c65a75a0) Jul 3 16:02:22 dell kernel: Stack: c6030560 f801bf80 c640bf14 00000400 c03b61e0 00000002 00000400 00000246 Jul 3 16:02:22 dell kernel: c8c40595 c8c413d0 c01d37ac c640bf50 c640bf50 c011a1cc c640bf50 c640bf9c Jul 3 16:02:22 dell kernel: 00000002 c8c40595 c011a18f 00000002 c640bf50 c8c4006a 00000002 c8c4057e Jul 3 16:02:22 dell kernel: Call Trace: Jul 3 16:02:22 dell kernel: [<c01d37ac>] vscnprintf+0xc/0x20 Jul 3 16:02:22 dell kernel: [<c011a1cc>] vprintk+0x2c/0x100 Jul 3 16:02:22 dell kernel: [<c011a18f>] printk+0xf/0x20 Jul 3 16:02:22 dell kernel: [<c8c4006a>] set_chain+0x6a/0xc0 [netfw] Jul 3 16:02:22 dell kernel: [<c8c401b5>] test+0x55/0x60 [netfw] Jul 3 16:02:22 dell kernel: [<c0110074>] acpi_copy_wakeup_routine+0x14/0xa0 Jul 3 16:02:22 dell kernel: [<c8c401fc>] netfw_init+0x3c/0x40 [netfw] Jul 3 16:02:22 dell kernel: [<c012e9a4>] sys_init_module+0x104/0x180 Jul 3 16:02:22 dell kernel: [<c0102c49>] sysenter_past_esp+0x52/0x79 Jul 3 16:02:22 dell kernel: Code: 54 24 0c 0f 88 8e 00 00 00 8b 74 24 10 8b 44 24 0c 89 4c 24 14 8d 6c 30 ff 89 f0 48 39 c5 73 0b 89 f2 83 cd ff f7 da 89 54 24 0c <80> 39 00 75 1a eb 40 39 ee 77 06 88 06 8b 4c 24 14 46 89 c8 41 Я сначалу не мог понять в чём причина, но потом решил вывести через printk все переменные которые передаются в функцию. И увидел что сегволт вылетает именно при попытке вывести переменную int. int set_chain (int act, char table[], int id, char *par[], char *arg[], int num) { int i; for(i = 0; i <= num_tables - 1; i++) { if(!strcmp(tables[i].tab_name,table)) printk("FOUND\n");// tables[0].set_rule(act,id,par,arg,num); // printk((char)act); // printk("\n"); printk(table); printk("\n"); // printk(id); // printk("\n"); printk(par[0]); printk("\n"); printk(arg[0]); printk("\n"); // printk(num); // printk("\n"); } return ADD_SUCCESS; } Все переменные целого типа закоментировал, но если разкоментировать вывод хотя бы одной, то будет сег. ВСЕ char ВЫВОДЯТСЯ НОРМАЛЬНО. А вызов такой: void test(void) { char tab[] = "input"; char *par[] = {{"from"},{"to"}}; char *arg[] = {{"ip_from"},{"ip_to"}}; int n = 2; set_chain(ADD_RULE,tab,666,par,arg,n); } А поскольку при вызове tables[0].set_rule(act,id,par,arg,num) так же вылетает сегфолт то я пришёл к выводу что проблемма именно в integer'е. Вообщем и встал вопрос - что делать? Неуж то есть какая то особенность в С по сравнению с С++? Заранее спасибо!!!
Ответ на:
комментарий
от Murr
Ответ на:
комментарий
от cyclon
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Теряется *char. (2005)
- Форум Проблемма с выделением памяти. (2005)
- Форум Выделение памяти в модуле. (2005)
- Форум Что за бред с инициализией переменной???? (2005)
- Форум [kernel] Перехват функций ядра. (2010)
- Форум Передача вывода sqlplus переменной (2013)
- Форум oops при работе модуля netfilter (2012)
- Форум is_assignable<int, int> == false (2019)
- Форум Передача в функцию int *, если она хочет void * (2015)
- Форум Передача значения стандартного вывода в переменную (2013)