Fixed the skb->sk dereference prolblem.
authorSapan Bhatia <sapanb@cs.princeton.edu>
Mon, 14 Jul 2008 03:55:52 +0000 (03:55 +0000)
committerSapan Bhatia <sapanb@cs.princeton.edu>
Mon, 14 Jul 2008 03:55:52 +0000 (03:55 +0000)
linux-2.6-526-tun-tap.patch

index 2701324..d5529ec 100644 (file)
@@ -1,6 +1,6 @@
 diff -Nurb linux-2.6.22-525/drivers/net/Makefile linux-2.6.22-526/drivers/net/Makefile
---- linux-2.6.22-525/drivers/net/Makefile      2008-07-09 15:41:30.000000000 -0400
-+++ linux-2.6.22-526/drivers/net/Makefile      2008-07-09 15:42:38.000000000 -0400
+--- linux-2.6.22-525/drivers/net/Makefile      2008-07-10 10:37:08.000000000 -0400
++++ linux-2.6.22-526/drivers/net/Makefile      2008-07-10 10:37:22.000000000 -0400
 @@ -1,7 +1,7 @@
  #
  # Makefile for the Linux network (ethercard) device drivers.
@@ -12,8 +12,8 @@ diff -Nurb linux-2.6.22-525/drivers/net/Makefile linux-2.6.22-526/drivers/net/Ma
  obj-$(CONFIG_IBM_EMAC) += ibm_emac/
 diff -Nurb linux-2.6.22-525/drivers/net/vnet_tun.c linux-2.6.22-526/drivers/net/vnet_tun.c
 --- linux-2.6.22-525/drivers/net/vnet_tun.c    1969-12-31 19:00:00.000000000 -0500
-+++ linux-2.6.22-526/drivers/net/vnet_tun.c    2008-07-09 15:38:35.000000000 -0400
-@@ -0,0 +1,697 @@
++++ linux-2.6.22-526/drivers/net/vnet_tun.c    2008-07-13 23:56:16.000000000 -0400
+@@ -0,0 +1,713 @@
 +/*
 + *  TUN - Universal TUN/TAP device driver.
 + *  Copyright (C) 1999-2002 Maxim Krasnyansky <maxk@qualcomm.com>
@@ -91,7 +91,23 @@ diff -Nurb linux-2.6.22-525/drivers/net/vnet_tun.c linux-2.6.22-526/drivers/net/
 +struct net_device tun_netdev;
 +static struct net_device_stats tun_stats;
 +
-+#define get_sk_xid(sk) sk->sk_nid
++int print_once=1;
++
++static inline xid_t
++get_sk_xid(struct sock *sk)
++{
++      if (sk) {
++              return (int) sk->sk_nid >= 0 ? sk->sk_nid : 0;
++      } 
++      else {
++              if (in_interrupt() && print_once) {
++                      print_once=0;
++                      printk(KERN_EMERG "vnet_tun: get-sk_xid called in interrupt context!\n");
++              }
++              return current->xid;
++      }
++}
++
 +#define set_sk_xid(sk,xid) sk->sk_nid=xid
 +#define set_skb_xid(skb,xid) skb->skb_tag=xid
 +