• J
    wext: fix get_wireless_stats locking · 7be69c0b
    Johannes Berg 提交于
    Currently, get_wireless_stats is racy by _design_. This is
    because it returns a buffer, which needs to be statically
    allocated since it cannot be freed if it was allocated
    dynamically. Also, SIOCGIWSTATS and /proc/net/wireless use
    no common lock, and /proc/net/wireless accesses are not
    synchronised against each other. This is a design flaw in
    get_wireless_stats since the beginning.
    
    This patch fixes it by wrapping /proc/net/wireless accesses
    with the RTNL so they are protected against each other and
    SIOCGIWSTATS. The more correct method of fixing this would
    be to pass in the buffer instead of returning it and have
    the caller take care of synchronisation of the buffer, but
    even then most drivers probably assume that their callback
    is protected by the RTNL like all other wext callbacks.
    Signed-off-by: NJohannes Berg <johannes@sipsolutions.net>
    Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
    7be69c0b
wext.c 47.6 KB