wprobe: fix some endianness fail in the l2 filter code
SVN-Revision: 16732
This commit is contained in:
parent
5b35d1851c
commit
959bae3462
1 changed files with 7 additions and 4 deletions
|
@ -844,6 +844,7 @@ wprobe_check_filter(void *data, int datalen, int gs)
|
||||||
|
|
||||||
hdr->name[31] = 0;
|
hdr->name[31] = 0;
|
||||||
cur_is = be32_to_cpu(hdr->n_items);
|
cur_is = be32_to_cpu(hdr->n_items);
|
||||||
|
hdr->n_items = cur_is;
|
||||||
is += cur_is;
|
is += cur_is;
|
||||||
for (j = 0; j < cur_is; j++) {
|
for (j = 0; j < cur_is; j++) {
|
||||||
struct sock_filter *sf;
|
struct sock_filter *sf;
|
||||||
|
@ -854,11 +855,13 @@ wprobe_check_filter(void *data, int datalen, int gs)
|
||||||
if (data > end)
|
if (data > end)
|
||||||
goto overrun;
|
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;
|
goto overrun;
|
||||||
|
|
||||||
hdr->name[31] = 0;
|
|
||||||
hdr->n_items = n_items = be32_to_cpu(hdr->n_items);
|
|
||||||
sf = data;
|
sf = data;
|
||||||
if (n_items > 0) {
|
if (n_items > 0) {
|
||||||
for (k = 0; k < n_items; k++) {
|
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++) {
|
for (j = 0; j < g->n_items; j++) {
|
||||||
hdr = data;
|
hdr = data;
|
||||||
f->items[cur_is++] = 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);
|
rcu_assign_pointer(dev->active_filter, f);
|
||||||
|
|
Loading…
Reference in a new issue