Search Linux Wireless

Re: [PATCH] cfg80211: sme: deauthenticate on assoc failure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



To clarify on the patchset and order:

[quilt series]:
# patches from linux-wireless ML
linux-wireless/0001-Revert-mac80211-fix-SME-warning-by-removing-stale-BS.patch
linux-wireless/mac80211-keep-auth-state-when-assoc-fails.patch
linux-wireless/cfg80211-sme-deauthenticate-on-assoc-failure.patch

- Sedat -

On Tue, Oct 20, 2009 at 9:33 AM, Sedat Dilek <sedat.dilek@xxxxxxxxxxxxxx> wrote:
> Is this patch on top of wireless-testing (master-2009-10-16)?
>
> It fails here:
> ...
> Applying patch linux-wireless/mac80211-keep-auth-state-when-assoc-fails.patch
> patching file net/mac80211/mlme.c
> Hunk #1 FAILED at 1457.
> 1 out of 1 hunk FAILED -- rejects in file net/mac80211/mlme.c
> Patch linux-wireless/mac80211-keep-auth-state-when-assoc-fails.patch
> does not apply (enforce with -f)
> ERROR: failed to apply patch series!
>
> Does it need to revert "mac80211: fix SME warning by removing stale
> BSS upon assoc failure"?
>
> - Sedat -
>
> On Tue, Oct 20, 2009 at 8:08 AM, Johannes Berg
> <johannes@xxxxxxxxxxxxxxxx> wrote:
>> When the in-kernel SME gets an association failure from
>> the AP we don't deauthenticate, and thus get into a very
>> confused state which will lead to warnings later on. Fix
>> this by actually deauthenticating when the AP indicates
>> an association failure.
>>
>> Signed-off-by: Johannes Berg <johannes@xxxxxxxxxxxxxxxx>
>> ---
>>  net/wireless/core.h |    1 +
>>  net/wireless/mlme.c |    9 +++++++++
>>  net/wireless/sme.c  |   21 +++++++++++++++++++--
>>  3 files changed, 29 insertions(+), 2 deletions(-)
>>
>> --- wireless-testing.orig/net/wireless/core.h   2009-10-20 15:02:15.000000000 +0900
>> +++ wireless-testing/net/wireless/core.h        2009-10-20 15:03:20.000000000 +0900
>> @@ -358,6 +358,7 @@ int cfg80211_mgd_wext_connect(struct cfg
>>                              struct wireless_dev *wdev);
>>
>>  void cfg80211_conn_work(struct work_struct *work);
>> +void cfg80211_sme_failed_assoc(struct wireless_dev *wdev);
>>  bool cfg80211_sme_failed_reassoc(struct wireless_dev *wdev);
>>
>>  /* internal helpers */
>> --- wireless-testing.orig/net/wireless/mlme.c   2009-10-20 15:02:15.000000000 +0900
>> +++ wireless-testing/net/wireless/mlme.c        2009-10-20 15:03:20.000000000 +0900
>> @@ -62,6 +62,7 @@ void cfg80211_send_rx_assoc(struct net_d
>>        u8 *ie = mgmt->u.assoc_resp.variable;
>>        int i, ieoffs = offsetof(struct ieee80211_mgmt, u.assoc_resp.variable);
>>        struct cfg80211_internal_bss *bss = NULL;
>> +       bool need_connect_result = true;
>>
>>        wdev_lock(wdev);
>>
>> @@ -94,6 +95,14 @@ void cfg80211_send_rx_assoc(struct net_d
>>                }
>>
>>                WARN_ON(!bss);
>> +       } else if (wdev->conn) {
>> +               cfg80211_sme_failed_assoc(wdev);
>> +               need_connect_result = false;
>> +               /*
>> +                * do not call connect_result() now because the
>> +                * sme will schedule work that does it later.
>> +                */
>> +               goto out;
>>        }
>>
>>        if (!wdev->conn && wdev->sme_state == CFG80211_SME_IDLE) {
>> --- wireless-testing.orig/net/wireless/sme.c    2009-10-20 15:02:15.000000000 +0900
>> +++ wireless-testing/net/wireless/sme.c 2009-10-20 15:03:20.000000000 +0900
>> @@ -26,6 +26,7 @@ struct cfg80211_conn {
>>                CFG80211_CONN_AUTHENTICATING,
>>                CFG80211_CONN_ASSOCIATE_NEXT,
>>                CFG80211_CONN_ASSOCIATING,
>> +               CFG80211_CONN_DEAUTH_ASSOC_FAIL,
>>        } state;
>>        u8 bssid[ETH_ALEN], prev_bssid[ETH_ALEN];
>>        u8 *ie;
>> @@ -148,6 +149,12 @@ static int cfg80211_conn_do_work(struct
>>                                               NULL, 0,
>>                                               WLAN_REASON_DEAUTH_LEAVING);
>>                return err;
>> +       case CFG80211_CONN_DEAUTH_ASSOC_FAIL:
>> +               __cfg80211_mlme_deauth(rdev, wdev->netdev, params->bssid,
>> +                                      NULL, 0,
>> +                                      WLAN_REASON_DEAUTH_LEAVING);
>> +               /* return an error so that we call __cfg80211_connect_result() */
>> +               return -EINVAL;
>>        default:
>>                return 0;
>>        }
>> @@ -158,6 +165,7 @@ void cfg80211_conn_work(struct work_stru
>>        struct cfg80211_registered_device *rdev =
>>                container_of(work, struct cfg80211_registered_device, conn_work);
>>        struct wireless_dev *wdev;
>> +       u8 bssid[ETH_ALEN];
>>
>>        rtnl_lock();
>>        cfg80211_lock_rdev(rdev);
>> @@ -173,10 +181,10 @@ void cfg80211_conn_work(struct work_stru
>>                        wdev_unlock(wdev);
>>                        continue;
>>                }
>> +               memcpy(bssid, wdev->conn->params.bssid, ETH_ALEN);
>>                if (cfg80211_conn_do_work(wdev))
>>                        __cfg80211_connect_result(
>> -                                       wdev->netdev,
>> -                                       wdev->conn->params.bssid,
>> +                                       wdev->netdev, bssid,
>>                                        NULL, 0, NULL, 0,
>>                                        WLAN_STATUS_UNSPECIFIED_FAILURE,
>>                                        false, NULL);
>> @@ -337,6 +345,15 @@ bool cfg80211_sme_failed_reassoc(struct
>>        return true;
>>  }
>>
>> +void cfg80211_sme_failed_assoc(struct wireless_dev *wdev)
>> +{
>> +       struct wiphy *wiphy = wdev->wiphy;
>> +       struct cfg80211_registered_device *rdev = wiphy_to_dev(wiphy);
>> +
>> +       wdev->conn->state = CFG80211_CONN_DEAUTH_ASSOC_FAIL;
>> +       schedule_work(&rdev->conn_work);
>> +}
>> +
>>  void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid,
>>                               const u8 *req_ie, size_t req_ie_len,
>>                               const u8 *resp_ie, size_t resp_ie_len,
>>
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
>> the body of a message to majordomo@xxxxxxxxxxxxxxx
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux