summaryrefslogtreecommitdiffstats
path: root/target/linux/generic-2.4/patches/230-tun_get_user_backport.patch
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2008-01-06 19:28:07 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2008-01-06 19:28:07 +0000
commit90fba37c49479ed4e5233dc0d348cdf7d24c9ee1 (patch)
tree58af9e3b3204308a2b7853127331f4d693e1b744 /target/linux/generic-2.4/patches/230-tun_get_user_backport.patch
parentb59f896089edf83ce4cd1951001b6cc889bdd287 (diff)
update brcm-2.4 to 2.4.35.4, integrate new broadcom system code, update broadcom-wl to a contributed version (v4.150.10.5) - no bcm57xx support yet, will follow shortly
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@10137 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'target/linux/generic-2.4/patches/230-tun_get_user_backport.patch')
-rw-r--r--target/linux/generic-2.4/patches/230-tun_get_user_backport.patch110
1 files changed, 57 insertions, 53 deletions
diff --git a/target/linux/generic-2.4/patches/230-tun_get_user_backport.patch b/target/linux/generic-2.4/patches/230-tun_get_user_backport.patch
index 636ffec11..a671d1a27 100644
--- a/target/linux/generic-2.4/patches/230-tun_get_user_backport.patch
+++ b/target/linux/generic-2.4/patches/230-tun_get_user_backport.patch
@@ -1,56 +1,8 @@
---- linux-2.4.32/drivers/net/tun.c 2006-10-28 18:21:45.000000000 +0100
-+++ new.linux-2.4.32/drivers/net/tun.c 2006-10-28 18:50:53.000000000 +0100
-@@ -185,22 +185,31 @@
- {
- struct tun_pi pi = { 0, __constant_htons(ETH_P_IP) };
- struct sk_buff *skb;
-- size_t len = count;
-+ size_t len = count, align = 0;
-
- if (!(tun->flags & TUN_NO_PI)) {
- if ((len -= sizeof(pi)) > count)
- return -EINVAL;
-
-- memcpy_fromiovec((void *)&pi, iv, sizeof(pi));
-+ if(memcpy_fromiovec((void *)&pi, iv, sizeof(pi)))
-+ return -EFAULT;
- }
--
-- if (!(skb = alloc_skb(len + 2, GFP_KERNEL))) {
-+
-+ if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV)
-+ align = NET_IP_ALIGN;
-+
-+ if (!(skb = alloc_skb(len + align, GFP_KERNEL))) {
- tun->stats.rx_dropped++;
- return -ENOMEM;
- }
-
-- skb_reserve(skb, 2);
-- memcpy_fromiovec(skb_put(skb, len), iv, len);
-+ if (align)
-+ skb_reserve(skb, align);
-+ if (memcpy_fromiovec(skb_put(skb, len), iv, len)) {
-+ tun->stats.rx_dropped++;
-+ kfree_skb(skb);
-+ return -EFAULT;
-+ }
-
- skb->dev = &tun->dev;
- switch (tun->flags & TUN_TYPE_MASK) {
-@@ -271,7 +271,8 @@
- pi.flags |= TUN_PKT_STRIP;
- }
-
-- memcpy_toiovec(iv, (void *) &pi, sizeof(pi));
-+ if(memcpy_toiovec(iv, (void *) &pi, sizeof(pi)))
-+ return -EFAULT;
- total += sizeof(pi);
- }
-
---- linux-2.4.32/include/linux/skbuff.h 2006-10-28 19:31:31.000000000 +0100
-+++ new.linux-2.4.32/include/linux/skbuff.h 2006-10-28 19:29:27.000000000 +0100
-@@ -918,6 +918,49 @@
+Index: linux-2.4.35.4/include/linux/skbuff.h
+===================================================================
+--- linux-2.4.35.4.orig/include/linux/skbuff.h 2007-12-15 05:19:38.654623841 +0100
++++ linux-2.4.35.4/include/linux/skbuff.h 2007-12-15 05:20:05.060128604 +0100
+@@ -912,6 +912,49 @@
skb->tail+=len;
}
@@ -100,3 +52,55 @@
extern int ___pskb_trim(struct sk_buff *skb, unsigned int len, int realloc);
static inline void __skb_trim(struct sk_buff *skb, unsigned int len)
+Index: linux-2.4.35.4/drivers/net/tun.c
+===================================================================
+--- linux-2.4.35.4.orig/drivers/net/tun.c 2007-12-15 05:19:38.642623156 +0100
++++ linux-2.4.35.4/drivers/net/tun.c 2007-12-15 05:20:05.056128377 +0100
+@@ -185,22 +185,31 @@
+ {
+ struct tun_pi pi = { 0, __constant_htons(ETH_P_IP) };
+ struct sk_buff *skb;
+- size_t len = count;
++ size_t len = count, align = 0;
+
+ if (!(tun->flags & TUN_NO_PI)) {
+ if ((len -= sizeof(pi)) > count)
+ return -EINVAL;
+
+- memcpy_fromiovec((void *)&pi, iv, sizeof(pi));
++ if(memcpy_fromiovec((void *)&pi, iv, sizeof(pi)))
++ return -EFAULT;
+ }
+-
+- if (!(skb = alloc_skb(len + 2, GFP_KERNEL))) {
++
++ if ((tun->flags & TUN_TYPE_MASK) == TUN_TAP_DEV)
++ align = NET_IP_ALIGN;
++
++ if (!(skb = alloc_skb(len + align, GFP_KERNEL))) {
+ tun->stats.rx_dropped++;
+ return -ENOMEM;
+ }
+
+- skb_reserve(skb, 2);
+- memcpy_fromiovec(skb_put(skb, len), iv, len);
++ if (align)
++ skb_reserve(skb, align);
++ if (memcpy_fromiovec(skb_put(skb, len), iv, len)) {
++ tun->stats.rx_dropped++;
++ kfree_skb(skb);
++ return -EFAULT;
++ }
+
+ skb->dev = &tun->dev;
+ switch (tun->flags & TUN_TYPE_MASK) {
+@@ -271,7 +280,8 @@
+ pi.flags |= TUN_PKT_STRIP;
+ }
+
+- memcpy_toiovec(iv, (void *) &pi, sizeof(pi));
++ if(memcpy_toiovec(iv, (void *) &pi, sizeof(pi)))
++ return -EFAULT;
+ total += sizeof(pi);
+ }
+