• Arnd Bergmann's avatar
    mac80211: avoid excessive stack usage in sta_info · ea7cd6ee
    Arnd Bergmann authored
    commit 0ef049dc upstream.
    
    When CONFIG_OPTIMIZE_INLINING is set, the sta_info_insert_finish
    function consumes more stack than normally, exceeding the
    1024 byte limit on ARM:
    
    net/mac80211/sta_info.c: In function 'sta_info_insert_finish':
    net/mac80211/sta_info.c:561:1: error: the frame size of 1080 bytes is larger than 1024 bytes [-Werror=frame-larger-than=]
    
    It turns out that there are two functions that put a 'struct station_info'
    on the stack: __sta_info_destroy_part2 and sta_info_insert_finish, and
    this structure alone requires up to 792 bytes.
    
    Hoping that both are called rarely enough, this replaces the
    on-stack structure with a dynamic allocation, which unfortunately
    requires some suboptimal error handling for out-of-memory.
    
    The __sta_info_destroy_part2 function is actually affected by the
    stack usage twice because it calls cfg80211_del_sta_sinfo(), which
    has another instance of struct station_info on its stack.
    Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
    Fixes: 98b62183 ("mac80211/cfg80211: add station events")
    Fixes: 6f7a8d26 ("mac80211: send statistics with delete station event")
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    ea7cd6ee
sta_info.c 57.4 KB