aboutsummaryrefslogtreecommitdiffstats
path: root/package/wprobe
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2009-07-07 03:44:31 +0000
committerFelix Fietkau <nbd@openwrt.org>2009-07-07 03:44:31 +0000
commit5d71ca1405d645c673a99a35b5f0059102f6d392 (patch)
tree4b5b59cda10870fb243d1e2b3a1c4da8fc0656c8 /package/wprobe
parent3f24ae593c884c1b98cdba3cd5ff57562dff7fd0 (diff)
downloadupstream-5d71ca1405d645c673a99a35b5f0059102f6d392.tar.gz
upstream-5d71ca1405d645c673a99a35b5f0059102f6d392.tar.bz2
upstream-5d71ca1405d645c673a99a35b5f0059102f6d392.zip
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
Diffstat (limited to 'package/wprobe')
-rw-r--r--package/wprobe/src/kernel/wprobe-core.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/package/wprobe/src/kernel/wprobe-core.c b/package/wprobe/src/kernel/wprobe-core.c
index d8f5a16f60..f9dd282d55 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);