diff options
author | Pontus Fuchs <pontus.fuchs@gmail.com> | 2014-01-16 15:00:40 +0100 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2014-02-06 09:55:17 +0100 |
commit | f12cb2893069495726c21a4b0178705dacfecfe0 (patch) | |
tree | 5678173217dedde3d552221d9c7c602d50d75a61 /net/wireless/nl80211.c | |
parent | 2f617435c3a6fe3f39efb9ae2baa77de2d6c97b8 (diff) | |
download | op-kernel-dev-f12cb2893069495726c21a4b0178705dacfecfe0.zip op-kernel-dev-f12cb2893069495726c21a4b0178705dacfecfe0.tar.gz |
nl80211: Reset split_start when netlink skb is exhausted
When the netlink skb is exhausted split_start is left set. In the
subsequent retry, with a larger buffer, the dump is continued from the
failing point instead of from the beginning.
This was causing my rt28xx based USB dongle to now show up when
running "iw list" with an old iw version without split dump support.
Cc: stable@vger.kernel.org
Fixes: 3713b4e364ef ("nl80211: allow splitting wiphy information in dumps")
Signed-off-by: Pontus Fuchs <pontus.fuchs@gmail.com>
[avoid the entire workaround when state->split is set]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/wireless/nl80211.c')
-rw-r--r-- | net/wireless/nl80211.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 7a74259..6ea960b 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -1719,9 +1719,10 @@ static int nl80211_dump_wiphy(struct sk_buff *skb, struct netlink_callback *cb) * We can then retry with the larger buffer. */ if ((ret == -ENOBUFS || ret == -EMSGSIZE) && - !skb->len && + !skb->len && !state->split && cb->min_dump_alloc < 4096) { cb->min_dump_alloc = 4096; + state->split_start = 0; rtnl_unlock(); return 1; } |