Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 215359
b: refs/heads/master
c: 9ebad4a
h: refs/heads/master
i:
  215357: 073d500
  215355: ddb73c9
  215351: 5d992b0
  215343: e2f2188
  215327: b93d998
  215295: 55b3d53
v: v3
  • Loading branch information
Johannes Berg authored and John W. Linville committed Oct 15, 2010
1 parent 03c0b9a commit 952b1da
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 27 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 94a40c0c6bcc47ceba12e0247c5a23fb1e6c81e4
refs/heads/master: 9ebad4ab87f2ffa6eca825327721e647c7457264
58 changes: 32 additions & 26 deletions trunk/net/wireless/radiotap.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,7 @@ int ieee80211_radiotap_iterator_next(
{
while (1) {
int hit = 0;
int pad, align, size, subns, vnslen;
int pad, align, size, subns;
uint32_t oui;

/* if no more EXT bits, that's it */
Expand Down Expand Up @@ -261,6 +261,27 @@ int ieee80211_radiotap_iterator_next(
if (pad)
iterator->_arg += align - pad;

if (iterator->_arg_index % 32 == IEEE80211_RADIOTAP_VENDOR_NAMESPACE) {
int vnslen;

if ((unsigned long)iterator->_arg + size -
(unsigned long)iterator->_rtheader >
(unsigned long)iterator->_max_length)
return -EINVAL;

oui = (*iterator->_arg << 16) |
(*(iterator->_arg + 1) << 8) |
*(iterator->_arg + 2);
subns = *(iterator->_arg + 3);

find_ns(iterator, oui, subns);

vnslen = get_unaligned_le16(iterator->_arg + 4);
iterator->_next_ns_data = iterator->_arg + size + vnslen;
if (!iterator->current_namespace)
size += vnslen;
}

/*
* this is what we will return to user, but we need to
* move on first so next call has something fresh to test
Expand All @@ -287,40 +308,25 @@ int ieee80211_radiotap_iterator_next(
/* these special ones are valid in each bitmap word */
switch (iterator->_arg_index % 32) {
case IEEE80211_RADIOTAP_VENDOR_NAMESPACE:
iterator->_bitmap_shifter >>= 1;
iterator->_arg_index++;

iterator->_reset_on_ext = 1;

vnslen = get_unaligned_le16(iterator->this_arg + 4);
iterator->_next_ns_data = iterator->_arg + vnslen;
oui = (*iterator->this_arg << 16) |
(*(iterator->this_arg + 1) << 8) |
*(iterator->this_arg + 2);
subns = *(iterator->this_arg + 3);

find_ns(iterator, oui, subns);

iterator->is_radiotap_ns = 0;
/* allow parsers to show this information */
/*
* If parser didn't register this vendor
* namespace with us, allow it to show it
* as 'raw. Do do that, set argument index
* to vendor namespace.
*/
iterator->this_arg_index =
IEEE80211_RADIOTAP_VENDOR_NAMESPACE;
iterator->this_arg_size += vnslen;
if ((unsigned long)iterator->this_arg +
iterator->this_arg_size -
(unsigned long)iterator->_rtheader >
(unsigned long)(unsigned long)iterator->_max_length)
return -EINVAL;
hit = 1;
break;
if (!iterator->current_namespace)
hit = 1;
goto next_entry;
case IEEE80211_RADIOTAP_RADIOTAP_NAMESPACE:
iterator->_bitmap_shifter >>= 1;
iterator->_arg_index++;

iterator->_reset_on_ext = 1;
iterator->current_namespace = &radiotap_ns;
iterator->is_radiotap_ns = 1;
break;
goto next_entry;
case IEEE80211_RADIOTAP_EXT:
/*
* bit 31 was set, there is more
Expand Down

0 comments on commit 952b1da

Please sign in to comment.