想实现一个UDP接受模块,但是接受函数kernel_recvmsg报错,请大神帮忙分析

dl babysong 2019-03-06 12:00:31
程序主体:

int myserver(void){

struct socket *sock,*client_sock;
struct sockaddr_in s_addr;
unsigned short portnum=0x8888;
int ret=0;

memset(&s_addr,0,sizeof(s_addr));
s_addr.sin_family=AF_INET;
s_addr.sin_port=htons(portnum);
s_addr.sin_addr.s_addr=htonl(INADDR_ANY);


sock=(struct socket *)kmalloc(sizeof(struct socket),GFP_KERNEL);
client_sock=(struct socket *)kmalloc(sizeof(struct socket),GFP_KERNEL);
if(sock == NULL || client_sock ==NULL){
printk("sock or client_sock malloc error\n");
}
/*create a socket*/
ret=sock_create_kern(AF_INET, SOCK_DGRAM ,0,&sock);

if(ret){
printk("server:socket_create error!\n");
}
printk("server:socket_create UDP ok!\n");

/*bind the socket*/
ret=sock->ops->bind(sock,(struct sockaddr *)&s_addr,sizeof(struct sockaddr_in));
if(ret<0){
printk("server: bind error\n");
return ret;
}
printk("server:bind ok!\n");

char *recvbuf=NULL;
recvbuf=kmalloc(1024,GFP_KERNEL);
if(recvbuf==NULL){
printk("server: recvbuf kmalloc error!\n");
return -1;
}
memset(recvbuf, 0, sizeof(recvbuf));

/*receive message from client*/
struct kvec vec;
struct msghdr msg;
memset(&vec,0,sizeof(vec));
memset(&msg,0,sizeof(msg));
vec.iov_base=recvbuf;
vec.iov_len=1024;
printk("wait for recv mesg\n");
//注释掉kernel_recvmsg就不会报错
ret=kernel_recvmsg(client_sock,&msg,&vec,1,1024,0); /*receive message*/
//
printk("receive message:\n %s\n",recvbuf);


报错信息:
81.273932] server init:
[ 81.273935] server:socket_create UDP ok!
[ 81.273937] server:bind ok!
[ 81.273938] wait for recv mesg
[ 81.273943] BUG: unable to handle kernel paging request at 9a70a100
[ 81.273945] IP: [<9a70a100>] 0x9a70a100
[ 81.273948] *pde = 00000000
[ 81.273949] Oops: 0000 [#1] SMP
[ 81.273951] last sysfs file: /sys/devices/pci0000:00/0000:00:07.1/host1/target1:0:0/1:0:0:0/evt_media_change
[ 81.273952] Modules linked in: udp_kernel(+) nls_utf8 sunrpc fuse vmhgfs vsock ipv6 uinput snd_ens1371 gameport snd_rawmidi snd_ac97_codec ac97_bus snd_seq snd_seq_device snd_pcm snd_timer i2c_piix4 ppdev parport_pc parport i2c_core snd soundcore snd_page_alloc vmci vmware_balloon microcode mptspi vmxnet mptscsih mptbase scsi_transport_spi [last unloaded: mperf]
[ 81.273962]
[ 81.273964] Pid: 2540, comm: insmod Not tainted 2.6.35.6-45.fc14.i686 #1 440BX Desktop Reference Platform/VMware Virtual Platform
[ 81.273966] EIP: 0060:[<9a70a100>] EFLAGS: 00010246 CPU: 0
[ 81.273967] EIP is at 0x9a70a100
[ 81.273967] EAX: f198fe50 EBX: c0452bc1 ECX: f198ff30 EDX: f1a0b3a0
[ 81.273968] ESI: f1a0b3a0 EDI: 00000000 EBP: f198fe40 ESP: f198fe20
[ 81.273969] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
[ 81.273971] Process insmod (pid: 2540, ti=f198e000 task=f1a2a5e0 task.ti=f198e000)
[ 81.273972] Stack:
[ 81.273972] c070a6fa 00000400 00000000 f198fe50 f198ff30 f198fe50 f198e000 f7827274
[ 81.273975] <0> f198ff04 c070a890 00000400 00000000 f198feb0 c08d549b 00000000 00000001
[ 81.273977] <0> ffffffff 00000000 00000000 00000000 00000000 00000000 f1a2a5e0 00000000
[ 81.273979] Call Trace:
[ 81.273983] [<c070a6fa>] ? __sock_recvmsg+0x63/0x6d
[ 81.273985] [<c070a890>] ? sock_recvmsg+0x9b/0xb0
[ 81.273988] [<c07a6fd5>] ? _raw_spin_unlock_irqrestore+0x13/0x15
[ 81.273993] [<c0439f8e>] ? release_console_sem+0x176/0x17d
[ 81.273995] [<c043a3e9>] ? vprintk+0x36f/0x3a4
[ 81.273997] [<c043e9f8>] ? local_bh_enable_ip+0xd/0xf
[ 81.273999] [<c07a712b>] ? _raw_spin_unlock_bh+0x12/0x14
[ 81.274000] [<c042a21b>] ? need_resched+0x19/0x23
[ 81.274002] [<c070a8d5>] ? kernel_recvmsg+0x30/0x42
[ 81.274004] [<f78271b8>] ? myserver+0x16a/0x192 [udp_kernel]
[ 81.274006] [<f78271e0>] ? server_init+0x0/0x19 [udp_kernel]
[ 81.274008] [<f78271f7>] ? server_init+0x17/0x19 [udp_kernel]
[ 81.274010] [<c0401246>] ? do_one_initcall+0x4f/0x139
[ 81.274012] [<c0451e51>] ? blocking_notifier_call_chain+0x11/0x13
[ 81.274014] [<c04621a4>] ? sys_init_module+0x7f/0x19b
[ 81.274015] [<c07a7374>] ? syscall_call+0x7/0xb
[ 81.274016] Code: Bad EIP value.
[ 81.274017] EIP: [<9a70a100>] 0x9a70a100 SS:ESP 0068:f198fe20
[ 81.274019] CR2: 000000009a70a100
[ 81.274021] ---[ end trace 6c2f1dfbf50642e1 ]---
...全文
620 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_42104187 2021-09-07
  • 打赏
  • 举报
回复

请问,怎么解决的

1,317

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧