diff --git a/include/linux/wireless.h b/include/linux/wireless.h index 2d1b54556eff..81603848b0aa 100644 --- a/include/linux/wireless.h +++ b/include/linux/wireless.h @@ -26,7 +26,10 @@ struct compat_iw_point { struct __compat_iw_event { __u16 len; /* Real length of this stuff */ __u16 cmd; /* Wireless IOCTL */ - compat_caddr_t pointer; + union { + compat_caddr_t pointer; + __DECLARE_FLEX_ARRAY(__u8, pointer_flex); + }; }; #define IW_EV_COMPAT_LCP_LEN offsetof(struct __compat_iw_event, pointer) #define IW_EV_COMPAT_POINT_OFF offsetof(struct compat_iw_point, length) diff --git a/net/wireless/wext-core.c b/net/wireless/wext-core.c index 76a80a41615b..9d0b50abbe09 100644 --- a/net/wireless/wext-core.c +++ b/net/wireless/wext-core.c @@ -620,7 +620,7 @@ void wireless_send_event(struct net_device * dev, extra, extra_len); } else { /* extra_len must be zero, so no if (extra) needed */ - memcpy(&compat_event->pointer, wrqu, + memcpy(&compat_event->pointer_flex, wrqu, hdr_len - IW_EV_COMPAT_LCP_LEN); }