3.9-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Johannes Berg <[email protected]>

commit a92eecbbeaf01ea2267751569dd3301248513915 upstream.

If the device reports a non-wireless wakeup reason, the
tracing code crashes trying to dereference a NULL pointer.
Fix this by checking the pointer on all accesses and also
add a non_wireless tag to the event.

Signed-off-by: Johannes Berg <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

---
 net/wireless/trace.h |   23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

--- a/net/wireless/trace.h
+++ b/net/wireless/trace.h
@@ -2386,6 +2386,7 @@ TRACE_EVENT(cfg80211_report_wowlan_wakeu
        TP_STRUCT__entry(
                WIPHY_ENTRY
                WDEV_ENTRY
+               __field(bool, non_wireless)
                __field(bool, disconnect)
                __field(bool, magic_pkt)
                __field(bool, gtk_rekey_failure)
@@ -2394,20 +2395,22 @@ TRACE_EVENT(cfg80211_report_wowlan_wakeu
                __field(bool, rfkill_release)
                __field(s32, pattern_idx)
                __field(u32, packet_len)
-               __dynamic_array(u8, packet, wakeup->packet_present_len)
+               __dynamic_array(u8, packet,
+                               wakeup ? wakeup->packet_present_len : 0)
        ),
        TP_fast_assign(
                WIPHY_ASSIGN;
                WDEV_ASSIGN;
-               __entry->disconnect = wakeup->disconnect;
-               __entry->magic_pkt = wakeup->magic_pkt;
-               __entry->gtk_rekey_failure = wakeup->gtk_rekey_failure;
-               __entry->eap_identity_req = wakeup->eap_identity_req;
-               __entry->four_way_handshake = wakeup->four_way_handshake;
-               __entry->rfkill_release = wakeup->rfkill_release;
-               __entry->pattern_idx = wakeup->pattern_idx;
-               __entry->packet_len = wakeup->packet_len;
-               if (wakeup->packet && wakeup->packet_present_len)
+               __entry->non_wireless = !wakeup;
+               __entry->disconnect = wakeup ? wakeup->disconnect : false;
+               __entry->magic_pkt = wakeup ? wakeup->magic_pkt : false;
+               __entry->gtk_rekey_failure = wakeup ? wakeup->gtk_rekey_failure 
: false;
+               __entry->eap_identity_req = wakeup ? wakeup->eap_identity_req : 
false;
+               __entry->four_way_handshake = wakeup ? 
wakeup->four_way_handshake : false;
+               __entry->rfkill_release = wakeup ? wakeup->rfkill_release : 
false;
+               __entry->pattern_idx = wakeup ? wakeup->pattern_idx : false;
+               __entry->packet_len = wakeup ? wakeup->packet_len : false;
+               if (wakeup && wakeup->packet && wakeup->packet_present_len)
                        memcpy(__get_dynamic_array(packet), wakeup->packet,
                               wakeup->packet_present_len);
        ),


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to