Linux dev_queue_xmit导致内核死机

Linux dev_queue_xmit导致内核死机,linux,module,kernel,Linux,Module,Kernel,我正在编写内核模块的一部分,它将skbuff从一个接口传输到另一个接口。Ex所有来自eth0的数据包,在eth1上转发到。即使是我打算传输的第一个数据包也会导致dev_queue_xmit()中的内核崩溃。有人能帮我理解这里出了什么问题吗?。内核恐慌发生在 net/core/skbuff.c的内核错误:927 我用来传输数据包的代码示例函数如下。请让我知道 enter code here int txPktOnOtherIf(struct sk_buff *skb, struct net

我正在编写内核模块的一部分,它将skbuff从一个接口传输到另一个接口。Ex所有来自eth0的数据包,在eth1上转发到。即使是我打算传输的第一个数据包也会导致dev_queue_xmit()中的内核崩溃。有人能帮我理解这里出了什么问题吗?。内核恐慌发生在

net/core/skbuff.c的内核错误:927

我用来传输数据包的代码示例函数如下。请让我知道

enter code here

   int txPktOnOtherIf(struct sk_buff *skb, struct net_device *tdev)
   {
    int reservedSpace=max((int)LL_RESERVED_SPACE(tdev),(int)sizeof(struct ethhdr));
    int buffLen = reservedSpace - sizeof(struct ethhdr) + skb->len + skb->dev->needed_tailroom;
    struct sk_buff* nskb = NULL;
    int err = 0;

    printk("ReservedSpace is %d and buffer len is %d",reservedSpace,buffLen);
    nskb = alloc_skb(buffLen, GFP_KERNEL);
    if (!nskb) {
             printk("Couldn't allocate SKB\n");
            return -1;
    }
    skb_reserve(nskb, reservedSpace);
    skb_reset_network_header(nskb);
    skb_put(nskb, skb->len - sizeof(struct ethhdr));
    skb_push(nskb, sizeof(struct ethhdr));
    skb_reset_mac_header(nskb);
    skb_reset_mac_len(nskb);
    err = skb_store_bits(nskb, 0, skb->data, skb->len);
    if (err) {
            kfree_skb(nskb);
            printk("Error %d storing to SKB\n", err);
            return -1;
    }
    nskb->dev = tdev;
    nskb->protocol = skb->protocol;
    skb_get(nskb);
    err = dev_queue_xmit(nskb);
    err = net_xmit_eval(err);
    if (err) {
            kfree_skb(nskb);
            printk("Error %d sending frame\n", err);
            return -1;
    }
    return 0;
    }

您使用的是哪个发行版和哪个内核?在哪个建筑上?另外,您可以发布内核的整个调用堆栈吗?