mac80211: Fix for NULL pointer dereference in sta_info_get()

This addresses a NULL pointer dereference in sta_info_get().
TID and sta_info are extracted in ADDBA Timer expiry function
through the timer handler's argument.

The problem is extracging the TID (which was stored in
timer_to_tid[] array of type "u8") through "int *" typecast which
may also yield unwanted bytes for the MSB of TID that results
in incorrect sta_info and ieee80211_local pointers.

ieee80211_local pointer is NULL as illustrated below, it crashes in
sta_info_get(). The problem started when extracting ieee80211_local
pointer out of sta_info iteself and eventually crashed in
stat_info_get().

The proper way to fix is to change the data type of TID to u8
instead of u16. However changing all the occurences requires
some prototype changes as well. We should fix this in upcoming
patches.

Signed-off-by: Senthil Balasubramanian <senthilkumar@atheros.com>
Signed-off-by: Luis Rodriguez <lrodriguez@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by Senthil Balasubramanian and committed by John W. Linville 70d251b2 f6d97104

+2 -2
+2 -2
net/mac80211/mlme.c
··· 1614 1614 * only one argument, and both sta_info and TID are needed, so init 1615 1615 * flow in sta_info_create gives the TID as data, while the timer_to_id 1616 1616 * array gives the sta through container_of */ 1617 - u16 tid = *(int *)data; 1617 + u16 tid = *(u8 *)data; 1618 1618 struct sta_info *temp_sta = container_of((void *)data, 1619 1619 struct sta_info, timer_to_tid[tid]); 1620 1620 ··· 1662 1662 void sta_rx_agg_session_timer_expired(unsigned long data) 1663 1663 { 1664 1664 /* not an elegant detour, but there is no choice as the timer passes 1665 - * only one argument, and verious sta_info are needed here, so init 1665 + * only one argument, and various sta_info are needed here, so init 1666 1666 * flow in sta_info_create gives the TID as data, while the timer_to_id 1667 1667 * array gives the sta through container_of */ 1668 1668 u8 *ptid = (u8 *)data;