From 864cae4970dede0db5e6d64de9ea4209e970a06e Mon Sep 17 00:00:00 2001
From: nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Tue, 7 Jul 2009 03:44:31 +0000
Subject: [PATCH] wprobe: fix some endianness fail in the l2 filter code

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@16732 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 package/wprobe/src/kernel/wprobe-core.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/package/wprobe/src/kernel/wprobe-core.c b/package/wprobe/src/kernel/wprobe-core.c
index d8f5a16f6..f9dd282d5 100644
--- a/package/wprobe/src/kernel/wprobe-core.c
+++ b/package/wprobe/src/kernel/wprobe-core.c
@@ -844,6 +844,7 @@ wprobe_check_filter(void *data, int datalen, int gs)
 
 		hdr->name[31] = 0;
 		cur_is = be32_to_cpu(hdr->n_items);
+		hdr->n_items = cur_is;
 		is += cur_is;
 		for (j = 0; j < cur_is; j++) {
 			struct sock_filter *sf;
@@ -854,11 +855,13 @@ wprobe_check_filter(void *data, int datalen, int gs)
 			if (data > end)
 				goto overrun;
 
-			if (hdr->n_items > 1024)
+			hdr->name[31] = 0;
+			n_items = be32_to_cpu(hdr->n_items);
+			hdr->n_items = n_items;
+
+			if (n_items > 1024)
 				goto overrun;
 
-			hdr->name[31] = 0;
-			hdr->n_items = n_items = be32_to_cpu(hdr->n_items);
 			sf = data;
 			if (n_items > 0) {
 				for (k = 0; k < n_items; k++) {
@@ -968,7 +971,7 @@ wprobe_set_filter(struct wprobe_iface *dev, void *data, int len)
 		for (j = 0; j < g->n_items; j++) {
 			hdr = data;
 			f->items[cur_is++] = data;
-			data += sizeof(*hdr) + be32_to_cpu(hdr->n_items) * sizeof(struct sock_filter);
+			data += sizeof(*hdr) + hdr->n_items * sizeof(struct sock_filter);
 		}
 	}
 	rcu_assign_pointer(dev->active_filter, f);
-- 
2.20.1