radiotap: Fix compiler issues with packed structures
Replace the Radiotap parser platform.h file with use of helper functions
from utils/common.h to avoid compiler issues with the updated design and
getting pointers to members of packet structs.
Silence the warning about _next_bitmap assignment. This pointer is
dereferenced only with operations that are safe for unaligned access, so
the compiler warning is not helpful here.
__packed might not be defined in this context, so use STRUCT_PACKED from
utils/common.h.
Fixes: e6ac269433
("radiotap: Update radiotap parser")
Signed-off-by: Jouni Malinen <j@w1.fi>
This commit is contained in:
parent
fcdf5d93ea
commit
10502ad59f
3 changed files with 12 additions and 15 deletions
|
@ -1,21 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Platform definitions for Radiotap parser
|
||||||
|
* Copyright (c) 2021, Jouni Malinen <j@w1.fi>
|
||||||
|
*
|
||||||
|
* This software may be distributed under the terms of the BSD license.
|
||||||
|
* See README for more details.
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef PLATFORM_H
|
#ifndef PLATFORM_H
|
||||||
#define PLATFORM_H
|
#define PLATFORM_H
|
||||||
|
|
||||||
#include "includes.h"
|
#include "includes.h"
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
#define le16_to_cpu le_to_host16
|
#define get_unaligned_le16(p) WPA_GET_LE16((void *) (p))
|
||||||
#define le32_to_cpu le_to_host32
|
#define get_unaligned_le32(p) WPA_GET_LE32((void *) (p))
|
||||||
|
|
||||||
#define get_unaligned(p) \
|
|
||||||
({ \
|
|
||||||
struct packed_dummy_struct { \
|
|
||||||
typeof(*(p)) __val; \
|
|
||||||
} __attribute__((packed)) *__ptr = (void *) (p); \
|
|
||||||
\
|
|
||||||
__ptr->__val; \
|
|
||||||
})
|
|
||||||
#define get_unaligned_le16(p) le16_to_cpu(get_unaligned((le16 *)(p)))
|
|
||||||
#define get_unaligned_le32(p) le32_to_cpu(get_unaligned((le32 *)(p)))
|
|
||||||
|
|
||||||
#endif /* PLATFORM_H */
|
#endif /* PLATFORM_H */
|
||||||
|
|
|
@ -111,7 +111,7 @@ int ieee80211_radiotap_iterator_init(
|
||||||
iterator->_arg = (uint8_t *)radiotap_header + sizeof(*radiotap_header);
|
iterator->_arg = (uint8_t *)radiotap_header + sizeof(*radiotap_header);
|
||||||
iterator->_next_ns_data = NULL;
|
iterator->_next_ns_data = NULL;
|
||||||
iterator->_reset_on_ext = 0;
|
iterator->_reset_on_ext = 0;
|
||||||
iterator->_next_bitmap = &radiotap_header->it_present;
|
iterator->_next_bitmap = (le32 *) (((u8 *) radiotap_header) + offsetof(struct ieee80211_radiotap_header, it_present));
|
||||||
iterator->_next_bitmap++;
|
iterator->_next_bitmap++;
|
||||||
iterator->_vns = vns;
|
iterator->_vns = vns;
|
||||||
iterator->current_namespace = &radiotap_ns;
|
iterator->current_namespace = &radiotap_ns;
|
||||||
|
|
|
@ -39,7 +39,7 @@ struct ieee80211_radiotap_header {
|
||||||
* @it_present: (first) present word
|
* @it_present: (first) present word
|
||||||
*/
|
*/
|
||||||
le32 it_present;
|
le32 it_present;
|
||||||
} __packed;
|
} STRUCT_PACKED;
|
||||||
|
|
||||||
/* version is always 0 */
|
/* version is always 0 */
|
||||||
#define PKTHDR_RADIOTAP_VERSION 0
|
#define PKTHDR_RADIOTAP_VERSION 0
|
||||||
|
|
Loading…
Reference in a new issue