1. 14 Aug, 2009 4 commits
  2. 29 Jul, 2009 3 commits
    • Johannes Berg's avatar
      cfg80211: combine iwfreq implementations · 0e82ffe3
      Johannes Berg authored
      
      
      Until now we implemented iwfreq for managed mode, we
      needed to keep the implementations separate, but now
      that we have all versions implemented we can combine
      them and export just one handler.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      0e82ffe3
    • Johannes Berg's avatar
      nl80211: add missing parameter clearing · c0b2bbd8
      Johannes Berg authored
      
      
      Jouni and Maxim reported an oops when using wpa_supplicant -Dnl80211,
      which seems to be due to random data being contained in the crypto
      settings for the assoc() command. This seems to be due to the missing
      memset here, so add it -- it's certainly missing but I'm not 100%
      certain that it will fix the problem.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      c0b2bbd8
    • Johannes Berg's avatar
      cfg80211: fix circular lock dependency (1) · bc43b28c
      Johannes Berg authored
      
      
      Luis reported this lockdep complaint, that he had also
      reported earlier but when trying to analyse I had been
      locking at the wrong code, and never saw the problem:
      
      (slightly abridged)
      =======================================================
      [ INFO: possible circular locking dependency detected ]
      2.6.31-rc4-wl #6
      -------------------------------------------------------
      wpa_supplicant/3799 is trying to acquire lock:
       (cfg80211_mutex){+.+.+.}, at: [<ffffffffa009246a>] cfg80211_get_dev_from_ifindex+0x1a/0x90 [cfg80211]
      
      but task is already holding lock:
       (rtnl_mutex){+.+.+.}, at: [<ffffffff81400ff2>] rtnl_lock+0x12/0x20
      
      which lock already depends on the new lock.
      
      the existing dependency chain (in reverse order) is:
      
      -> #1 (rtnl_mutex){+.+.+.}:
             [<ffffffff810857b6>] __lock_acquire+0xd76/0x12b0
             [<ffffffff81085dd3>] lock_acquire+0xe3/0x120
             [<ffffffff814ee7a4>] mutex_lock_nested+0x44/0x350
             [<ffffffff81400ff2>] rtnl_lock+0x12/0x20
             [<ffffffffa009f6a5>] nl80211_send_reg_change_event+0x1f5/0x2a0 [cfg80211]
             [<ffffffffa009529e>] set_regdom+0x28e/0x4c0 [cfg80211]
      
      -> #0 (cfg80211_mutex){+.+.+.}:
             [<ffffffff8108587b>] __lock_acquire+0xe3b/0x12b0
             [<ffffffff81085dd3>] lock_acquire+0xe3/0x120
             [<ffffffff814ee7a4>] mutex_lock_nested+0x44/0x350
             [<ffffffffa009246a>] cfg80211_get_dev_from_ifindex+0x1a/0x90 [cfg80211]
             [<ffffffffa009813f>] get_rdev_dev_by_info_ifindex+0x6f/0xa0 [cfg80211]
             [<ffffffffa009b12b>] nl80211_set_interface+0x3b/0x260 [cfg80211]
      
      When looking at the correct code, the problem is quite
      obvious. I'm not entirely sure which code paths lead
      here, so until I can analyse it better let's just use
      RCU to avoid the problem.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      bc43b28c
  3. 27 Jul, 2009 1 commit
    • Johannes Berg's avatar
      cfg80211: make aware of net namespaces · 463d0183
      Johannes Berg authored
      
      
      In order to make cfg80211/nl80211 aware of network namespaces,
      we have to do the following things:
      
       * del_virtual_intf method takes an interface index rather
         than a netdev pointer - simply change this
      
       * nl80211 uses init_net a lot, it changes to use the sender's
         network namespace
      
       * scan requests use the interface index, hold a netdev pointer
         and reference instead
      
       * we want a wiphy and its associated virtual interfaces to be
         in one netns together, so
          - we need to be able to change ns for a given interface, so
            export dev_change_net_namespace()
          - for each virtual interface set the NETIF_F_NETNS_LOCAL
            flag, and clear that flag only when the wiphy changes ns,
            to disallow breaking this invariant
      
       * when a network namespace goes away, we need to reparent the
         wiphy to init_net
      
       * cfg80211 users that support creating virtual interfaces must
         create them in the wiphy's namespace, currently this affects
         only mac80211
      
      The end result is that you can now switch an entire wiphy into
      a different network namespace with the new command
      	iw phy#<idx> set netns <pid>
      and all virtual interfaces will follow (or the operation fails).
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      463d0183
  4. 24 Jul, 2009 4 commits
    • Johannes Berg's avatar
      nl80211: report BSS status · 48ab905d
      Johannes Berg authored
      
      
      When connected to a BSS, or joined to an IBSS, we'll want
      to know in userspace without using wireless extensions, so
      report the BSS status in the BSS list. Userspace can query
      the BSS list, display all the information and retrieve the
      station information as well.
      
      For example (from hwsim):
      
      $ iw dev wlan1 scan dump
      BSS 02:00:00:00:00:00 (on wlan1) -- associated
      	freq: 2462
      	beacon interval: 100
      	capability: ESS ShortSlotTime (0x0401)
      	signal: -50.00 dBm
      	SSID: j
      	Supported rates: 1.0* 2.0* 5.5* 11.0* 6.0 9.0 12.0 18.0
      	DS Paramater set: channel 11
      	ERP: <no flags>
      	Extended supported rates: 24.0 36.0 48.0 54.0
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      48ab905d
    • Johannes Berg's avatar
      cfg80211: rework key operation · fffd0934
      Johannes Berg authored
      
      
      This reworks the key operation in cfg80211, and now only
      allows, from userspace, configuring keys (via nl80211)
      after the connection has been established (in managed
      mode), the IBSS been joined (in IBSS mode), at any time
      (in AP[_VLAN] modes) or never for all the other modes.
      
      In order to do shared key authentication correctly, it
      is now possible to give a WEP key to the AUTH command.
      To configure static WEP keys, these are given to the
      CONNECT or IBSS_JOIN command directly, for a userspace
      SME it is assumed it will configure it properly after
      the connection has been established.
      
      Since mac80211 used to check the default key in IBSS
      mode to see whether or not the network is protected,
      it needs an update in that area, as well as an update
      to make use of the WEP key passed to auth() for shared
      key authentication.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      fffd0934
    • Johannes Berg's avatar
      nl80211: introduce new key attributes · b9454e83
      Johannes Berg authored
      
      
      We will soon want to nest key attributes into
      some new attribute for configuring static WEP
      keys at connect() and ibss_join() time, so we
      need nested attributes for that. However, key
      attributes right now are 'global'. This patch
      thus introduces new nested attributes for the
      key settings and functions for parsing them.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      b9454e83
    • Johannes Berg's avatar
      cfg80211: fix two buglets · 4bde0f7d
      Johannes Berg authored
      
      
      This fixes two small bugs:
       1) the connect variable is already initialised, and the
          assignment to auth_type overwrites the previous setting
          with a wrong value
       2) when all authentication attempts fail, we need to report
          that we couldn't connect
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      4bde0f7d
  5. 21 Jul, 2009 1 commit
  6. 12 Jul, 2009 1 commit
    • Johannes Berg's avatar
      genetlink: make netns aware · 134e6375
      Johannes Berg authored
      
      
      This makes generic netlink network namespace aware. No
      generic netlink families except for the controller family
      are made namespace aware, they need to be checked one by
      one and then set the family->netnsok member to true.
      
      A new function genlmsg_multicast_netns() is introduced to
      allow sending a multicast message in a given namespace,
      for example when it applies to an object that lives in
      that namespace, a new function genlmsg_multicast_allns()
      to send a message to all network namespaces (for objects
      that do not have an associated netns).
      
      The function genlmsg_multicast() is changed to multicast
      the message in just init_net, which is currently correct
      for all generic netlink families since they only work in
      init_net right now. Some will later want to work in all
      net namespaces because they do not care about the netns
      at all -- those will have to be converted to use one of
      the new functions genlmsg_multicast_allns() or
      genlmsg_multicast_netns() whenever they are made netns
      aware in some way.
      
      After this patch families can easily decide whether or
      not they should be available in all net namespaces. Many
      genl families us it for objects not related to networking
      and should therefore be available in all namespaces, but
      that will have to be done on a per family basis.
      
      Note that this doesn't touch on the checkpoint/restart
      problem where network namespaces could be used, genl
      families and multicast groups are numbered globally and
      I see no easy way of changing that, especially since it
      must be possible to multicast to all network namespaces
      for those families that do not care about netns.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      134e6375
  7. 10 Jul, 2009 15 commits
  8. 07 Jul, 2009 1 commit
  9. 19 Jun, 2009 3 commits
  10. 03 Jun, 2009 4 commits
    • Bob Copeland's avatar
      nl80211: use GFP_ATOMIC for michael mic failure message · 0f6399c4
      Bob Copeland authored
      
      
      nl80211_michael_mic_failure can be called in atomic context but
      does a GFP_KERNEL allocation.  Fixes the error below:
      
      [  126.793225] BUG: sleeping function called from invalid context at mm/slab.c:3055
      [  126.793234] in_atomic(): 1, irqs_disabled(): 0, pid: 0, name: swapper
      [  126.793241] 2 locks held by swapper/0:
      [  126.793246]  #0:  (&sc->rxbuflock){+.-.+.}, at: [<f94e1b46>] ath5k_tasklet_rx+0x34/0x55e [ath5k]
      [  126.793294]  #1:  (rcu_read_lock){.+.+.+}, at: [<f92872f3>] __ieee80211_rx+0x7e/0x563 [mac80211]
      [  126.793342] Pid: 0, comm: swapper Not tainted 2.6.30-rc7-wl #124
      [  126.793347] Call Trace:
      [  126.793361]  [<c014499d>] ? __debug_show_held_locks+0x1e/0x20
      [  126.793380]  [<c011e9a3>] __might_sleep+0x100/0x107
      [  126.793386]  [<c018ea99>] kmem_cache_alloc+0x35/0x170
      [  126.793393]  [<c02e8bb1>] ? __alloc_skb+0x2e/0x117
      [  126.793397]  [<c014517d>] ? mark_held_locks+0x43/0x5b
      [  126.793402]  [<c02e8bb1>] __alloc_skb+0x2e/0x117
      [  126.793419]  [<f851a836>] nl80211_michael_mic_failure+0x2a/0x1fa [cfg80211]
      [  126.793425]  [<c01453b8>] ? trace_hardirqs_on_caller+0xf6/0x130
      [  126.793430]  [<c01453fd>] ? trace_hardirqs_on+0xb/0xd
      [  126.793444]  [<f851b2b8>] cfg80211_michael_mic_failure+0x30/0x38 [cfg80211]
      [  126.793463]  [<f928bf69>] mac80211_ev_michael_mic_failure+0xfd/0x108 [mac80211]
      [  126.793480]  [<f9279fbd>] ieee80211_rx_h_michael_mic_verify+0xd4/0x117 [mac80211]
      [  126.793499]  [<f9285ef3>] ieee80211_invoke_rx_handlers+0xdde/0x1963 [mac80211]
      [  126.793505]  [<c0107152>] ? sched_clock+0x3f/0x64
      [  126.793511]  [<c0107152>] ? sched_clock+0x3f/0x64
      [  126.793516]  [<c01445d7>] ? trace_hardirqs_off+0xb/0xd
      [  126.793521]  [<c0107152>] ? sched_clock+0x3f/0x64
      [  126.793526]  [<c0146454>] ? __lock_acquire+0x62c/0x1271
      [  126.793545]  [<f9286fbb>] __ieee80211_rx_handle_packet+0x543/0x564 [mac80211]
      [  126.793564]  [<f9287757>] __ieee80211_rx+0x4e2/0x563 [mac80211]
      [  126.793577]  [<f94e1ff6>] ath5k_tasklet_rx+0x4e4/0x55e [ath5k]
      [  126.793583]  [<c0102b54>] ? restore_nocheck_notrace+0x0/0xe
      [  126.793589]  [<c0129aa2>] tasklet_action+0x92/0xe5
      [  126.793594]  [<c0129f22>] __do_softirq+0xb1/0x182
      [  126.793599]  [<c012a023>] do_softirq+0x30/0x48
      [  126.793603]  [<c012a19b>] irq_exit+0x3d/0x74
      [  126.793609]  [<c0358016>] do_IRQ+0x76/0x8c
      [  126.793613]  [<c010312e>] common_interrupt+0x2e/0x34
      [  126.793618]  [<c014007b>] ? timer_list_show+0x277/0x939
      [  126.793630]  [<f88eb321>] ? acpi_idle_enter_bm+0x266/0x291 [processor]
      [  126.793636]  [<c02d00f6>] cpuidle_idle_call+0x6a/0x9c
      [  126.793640]  [<c0101cc8>] cpu_idle+0x53/0x87
      [  126.793645]  [<c0344510>] rest_init+0x6c/0x6e
      [  126.793651]  [<c04dd74d>] start_kernel+0x286/0x28b
      [  126.793656]  [<c04dd037>] __init_begin+0x37/0x3c
      Signed-off-by: default avatarBob Copeland <me@bobcopeland.com>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      0f6399c4
    • Johannes Berg's avatar
      cfg80211: disallow interfering with stations on non-AP (part 2) · 034d655e
      Johannes Berg authored
      
      
      On non-AP interfaces userspace has no business interfering with
      the station management, this can confuse mac80211 (and other
      drivers probably wouldn't support it anyway). Allow adding and
      removing stations only on AP interfaces.
      
      (Reconcile this w/ previous version of patch posted with same
      subject... -- JWL)
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      034d655e
    • Johannes Berg's avatar
      nl80211: bounce scan request back to userspace · 362a415d
      Johannes Berg authored
      
      
      When a scan finishes only the program that asked for it
      knows what kind of scan it was; let's tell everybody else
      about the scan parameters as well so they can evaluate
      the result of the scan better. Also helps with debugging.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      362a415d
    • Johannes Berg's avatar
      cfg80211: validate AID of stations being added · 51b50fbe
      Johannes Berg authored
      
      
      We have some validation code in mac80211 but said code will
      force an invalid AID to 0 which isn't a valid AID either;
      instead require a valid AID (1-2007) to be passed in from
      userspace in cfg80211 already. Also move the code before
      the race comment since it can only be executed during STA
      addition and thus is not racy.
      Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
      Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
      51b50fbe
  11. 27 May, 2009 1 commit
  12. 21 May, 2009 1 commit
  13. 20 May, 2009 1 commit