我需要帮助我想使用memcpy在内核空间复制一个头,但屏幕只是黑色,它似乎不喜欢我的memcpy。请有人帮助我。memcpy--内核崩溃后memcpy
remaining = ntohs(iphead->tot_len) - 20; //(remaining = total size of ip packet - size of meta header)
while(remaining != 0) {
currentHead = (struct iphdr *) pos; //save the first 'real' header
if(currentHead == NULL)
goto fail;
nskb = dev_alloc_skb(ntohs(currentHead->tot_len) + MAC_LENGTH);
if(nskb == NULL)
goto fail; //We can't allocate that memory so we leave
if(nskb->tail + MAC_LENGTH + ntohs(currentHead->tot_len) <= nskb->end){
nskb->data = skb_put(nskb, (MAC_LENGTH + ntohs(currentHead->tot_len))); // allocated all the memory we need
memcpy(nskb->data,(*skb)->mac_header, MAC_LENGTH); //Put the mac header in place
nskb->mac_header = nskb->data; //Save the mac header location
nskb->network_header = nskb->data + MAC_LENGTH; //Move the pointer to where the network header will be
memcpy(nskb->network_header, pos, ntohs(currentHead->tot_len)); //save the ip + payload
nskb->data = nskb->network_header;
2011-05-17
docas
+2
正如你所说的问题不是很清楚,或可重复。如果我是你,我不会抛出代码,但要清楚而简洁地解释出了什么问题。提供我们可以编译和测试的代码,并解释您看到的内容以及您的期望。同时指定您正在使用的操作系统以及您正在使用的编程环境。 –
2011-05-17 16:33:20
+0
对'memcpy'的调用是否会返回?如果是这样,它会返回什么值?由于这是一个循环,它在第一次循环迭代中失败还是只有在“剩余”是一个特定值时才会失败? –
2011-05-17 16:42:33
+0
确定对不起我的缺陷,正在运行Linux 2.6.32-30-通用正在发生的事情是,我编译好的代码没有错误,但是当我用insmod deaggr.ko将它上传到内核时,屏幕变黑得到它我必须重新启动。在var/log/messages中,它表示31米的被盗内存。图形性能可能受损。我正在做的是将一个mac头文件从(* skb) - > mac_header的解聚数据包(skbs捆绑在一起)复制到单个skb的顶部,然后将其插回网络堆栈。它在循环上失败,但我注释了循环仍然失败的memcpy –
2011-05-17 17:00:51