diff options
author | Felix Fietkau <nbd@openwrt.org> | 2009-07-07 03:44:31 +0000 |
---|---|---|
committer | Felix Fietkau <nbd@openwrt.org> | 2009-07-07 03:44:31 +0000 |
commit | 959bae346288ed9a40d1b5a3c39c04bf13c681ac (patch) | |
tree | 83d6488009a70909ebf9c6bfe1ebea29b44728a9 /package/wprobe | |
parent | 5b35d1851c1ec93f039f81e4f5c5900a4f778888 (diff) | |
download | master-31e0f0ae-959bae346288ed9a40d1b5a3c39c04bf13c681ac.tar.gz master-31e0f0ae-959bae346288ed9a40d1b5a3c39c04bf13c681ac.tar.bz2 master-31e0f0ae-959bae346288ed9a40d1b5a3c39c04bf13c681ac.zip |
wprobe: fix some endianness fail in the l2 filter code
SVN-Revision: 16732
Diffstat (limited to 'package/wprobe')
-rw-r--r-- | package/wprobe/src/kernel/wprobe-core.c | 11 |
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); |