Hi,<br>I am using openswan as a reference while developing my own kernel module with a PF_KEY interface to my proprietary ipsec stack. I&#39;m new to kernel programming and have redhat fc 6 kernel 2.6.18-1.2798.fc6-i686. I&#39;ve created a module and done a sock_register with pfkey_create. I&#39;ve written a small test app which just opens a PF_KEY socket. My kernel module calls pfkey_create but crashes just before pfkey_create returns. Can anybody let me know what I&#39;m missing here?<br>
<br>My code :<br>#include &lt;linux/module.h&gt;<br>#include &lt;linux/kernel.h&gt;<br>#include &lt;linux/socket.h&gt;<br>#include &lt;linux/net.h&gt;<br>#include &lt;net/sock.h&gt;<br><br>struct net_proto_family pfkey_family_ops;<br>
<br>static int<br>pfkey_create(struct socket *sock, int protocol)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0;<br>}<br><br>int init_module(void)<br>{<br>&nbsp;&nbsp;&nbsp; printk(&quot;&lt;1&gt;Hello world 1\n&quot;);<br>&nbsp;&nbsp;&nbsp; pfkey_family_ops.family = PF_KEY;<br>
&nbsp;&nbsp;&nbsp; pfkey_family_ops.create = pfkey_create;<br>&nbsp;&nbsp;&nbsp; pfkey_family_ops.owner = THIS_MODULE;<br>&nbsp;&nbsp;&nbsp; sock_register(&amp;pfkey_family_ops);<br>&nbsp;&nbsp;&nbsp; return 0;<br>}<br><br>void cleanup_module(void)<br>{<br>&nbsp;&nbsp;&nbsp; sock_unregister(PF_KEY);<br>
&nbsp;&nbsp;&nbsp; printk(KERN_ALERT &quot;Goodbye world 1\n&quot;);<br>}<br><br><br>The o/p from dmesg looks like :<br>Hello world 1<br>NET: Registered protocol family 15<br>BUG: unable to handle kernel NULL pointer dereference at virtual address 00000004<br>
&nbsp;printing eip:<br>c05aff14<br>*pde = 00000000<br>Oops: 0000 [#1]<br>SMP<br>last sysfs file: /class/drm/card0/dev<br>Modules linked in: hello(U) i915 drm autofs4 hidp rfcomm l2cap bluetooth sunrpc ip_conntrack_ftp ip_conntrack_netbios_ns ipt_REJECT xt_state ip_conntrack nfnetlink iptable_filter ip_tables ip6t_REJECT xt_tcpudp ip6table_filter ip6_tables x_tables dm_multipath video sbs i2c_ec button battery asus_acpi ac ipv6 parport_pc lp parport snd_hda_intel snd_hda_codec snd_seq_dummy snd_seq_oss intel_rng snd_seq_midi_event snd_seq snd_seq_device snd_pcm_oss snd_mixer_oss snd_pcm snd_timer wlan_scan_sta(U) snd ath_rate_sample(U) soundcore via_rhine ath_pci(U) e100 snd_page_alloc wlan(U) ath_hal(U) serio_raw mii i2c_i801 ide_cd i2c_core cdrom pcspkr dm_snapshot dm_zero dm_mirror dm_mod ata_piix libata sd_mod scsi_mod ext3 jbd ehci_hcd ohci_hcd uhci_hcd<br>
CPU:&nbsp;&nbsp;&nbsp; 1<br>EIP:&nbsp;&nbsp;&nbsp; 0060:[&lt;c05aff14&gt;]&nbsp;&nbsp;&nbsp; Tainted: P&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VLI<br>EFLAGS: 00010246&nbsp;&nbsp; (2.6.18-1.2798.fc6 #1)<br>EIP is at __sock_create+0x14c/0x227<br>eax: 00000000&nbsp;&nbsp; ebx: 00000000&nbsp;&nbsp; ecx: f8d93700&nbsp;&nbsp; edx: 00000002<br>esi: 0000000f&nbsp;&nbsp; edi: e8263500&nbsp;&nbsp; ebp: 00000003&nbsp;&nbsp; esp: dd446f3c<br>
ds: 007b&nbsp;&nbsp; es: 007b&nbsp;&nbsp; ss: 0068<br>Process app (pid: 3513, ti=dd446000 task=f7d74720 task.ti=dd446000)<br>Stack: 00000000 e86a41d4 00000002 dd446f70 dd446f94 00000000 dd446000 c05b0023<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dd446f70 00000000 00000003 c05b021c dd446f70 00000000 00000003 c05b0c91<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0000000f 00000003 00000002 e86a41b8 e86a4180 00000000 0000000f 00000003<br>Call Trace:<br>&nbsp;[&lt;c05b0023&gt;] sock_create+0x18/0x1c<br>&nbsp;[&lt;c05b021c&gt;] sys_socket+0x1c/0x3e<br>&nbsp;[&lt;c05b0c91&gt;] sys_socketcall+0x7a/0x261<br>
&nbsp;[&lt;c0404013&gt;] syscall_call+0x7/0xb<br>DWARF2 unwinder stuck at syscall_call+0x7/0xb<br>Leftover inexact backtrace:<br>&nbsp;=======================<br>Code: 00 00 c1 e0 07 8d 84 10 80 01 00 00 ff 00 8b 0c b5 e0 2b 82 c0 89 f8 8b 54 24 08 ff 51 04 85 c0 89 c3 0f 88 90 00 00 00 8b 47 08 &lt;8b&gt; 50 04 85 d2 74 1b 89 e0 25 00 f0 ff ff 83 3a 02 8b 40 10 74<br>
EIP: [&lt;c05aff14&gt;] __sock_create+0x14c/0x227 SS:ESP 0068:dd446f3c<br><br>Thanks,<br>Leena.<br><br>