1. 04 12月, 2017 1 次提交
  2. 28 9月, 2017 1 次提交
  3. 29 7月, 2017 2 次提交
  4. 16 6月, 2017 1 次提交
    • J
      networking: introduce and use skb_put_data() · 59ae1d12
      Johannes Berg 提交于
      A common pattern with skb_put() is to just want to memcpy()
      some data into the new space, introduce skb_put_data() for
      this.
      
      An spatch similar to the one for skb_put_zero() converts many
      of the places using it:
      
          @@
          identifier p, p2;
          expression len, skb, data;
          type t, t2;
          @@
          (
          -p = skb_put(skb, len);
          +p = skb_put_data(skb, data, len);
          |
          -p = (t)skb_put(skb, len);
          +p = skb_put_data(skb, data, len);
          )
          (
          p2 = (t2)p;
          -memcpy(p2, data, len);
          |
          -memcpy(p, data, len);
          )
      
          @@
          type t, t2;
          identifier p, p2;
          expression skb, data;
          @@
          t *p;
          ...
          (
          -p = skb_put(skb, sizeof(t));
          +p = skb_put_data(skb, data, sizeof(t));
          |
          -p = (t *)skb_put(skb, sizeof(t));
          +p = skb_put_data(skb, data, sizeof(t));
          )
          (
          p2 = (t2)p;
          -memcpy(p2, data, sizeof(*p));
          |
          -memcpy(p, data, sizeof(*p));
          )
      
          @@
          expression skb, len, data;
          @@
          -memcpy(skb_put(skb, len), data, len);
          +skb_put_data(skb, data, len);
      
      (again, manually post-processed to retain some comments)
      Reviewed-by: NStephen Hemminger <stephen@networkplumber.org>
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      59ae1d12
  5. 23 5月, 2017 2 次提交
  6. 26 3月, 2017 1 次提交
  7. 05 3月, 2017 1 次提交
    • S
      batman-adv: Initialize gw sel_class via batadv_algo · 1a9070ec
      Sven Eckelmann 提交于
      The gateway selection class variable is shared between different algorithm
      versions. But the interpretation of the content is algorithm specific. The
      initialization is therefore also algorithm specific.
      
      But this was implemented incorrectly and the initialization for BATMAN_V
      always overwrote the value previously written for BATMAN_IV. This could
      only be avoided when BATMAN_V was disabled during compile time.
      
      Using a special batadv_algo hook for this initialization avoids this
      problem.
      
      Fixes: 50164d8f ("batman-adv: B.A.T.M.A.N. V - implement GW selection logic")
      Signed-off-by: NSven Eckelmann <sven@narfation.org>
      Signed-off-by: NSimon Wunderlich <sw@simonwunderlich.de>
      1a9070ec
  8. 26 1月, 2017 1 次提交
  9. 09 11月, 2016 3 次提交
    • L
      batman-adv: fix rare race conditions on interface removal · 9b4aec64
      Linus Lüssing 提交于
      In rare cases during shutdown the following general protection fault can
      happen:
      
        general protection fault: 0000 [#1] SMP
        Modules linked in: batman_adv(O-) [...]
        CPU: 3 PID: 1714 Comm: rmmod Tainted: G           O    4.6.0-rc6+ #1
        [...]
        Call Trace:
         [<ffffffffa0363294>] batadv_hardif_disable_interface+0x29a/0x3a6 [batman_adv]
         [<ffffffffa0373db4>] batadv_softif_destroy_netlink+0x4b/0xa4 [batman_adv]
         [<ffffffff813b52f3>] __rtnl_link_unregister+0x48/0x92
         [<ffffffff813b9240>] rtnl_link_unregister+0xc1/0xdb
         [<ffffffff8108547c>] ? bit_waitqueue+0x87/0x87
         [<ffffffffa03850d2>] batadv_exit+0x1a/0xf48 [batman_adv]
         [<ffffffff810c26f9>] SyS_delete_module+0x136/0x1b0
         [<ffffffff8144dc65>] entry_SYSCALL_64_fastpath+0x18/0xa8
         [<ffffffff8108aaca>] ? trace_hardirqs_off_caller+0x37/0xa6
        Code: 89 f7 e8 21 bd 0d e1 4d 85 e4 75 0e 31 f6 48 c7 c7 50 d7 3b a0 e8 50 16 f2 e0 49 8b 9c 24 28 01 00 00 48 85 db 0f 84 b2 00 00 00 <48> 8b 03 4d 85 ed 48 89 45 c8 74 09 4c 39 ab f8 00 00 00 75 1c
        RIP  [<ffffffffa0371852>] batadv_purge_outstanding_packets+0x1c8/0x291 [batman_adv]
         RSP <ffff88001da5fd78>
        ---[ end trace 803b9bdc6a4a952b ]---
        Kernel panic - not syncing: Fatal exception in interrupt
        Kernel Offset: disabled
        ---[ end Kernel panic - not syncing: Fatal exception in interrupt
      
      It does not happen often, but may potentially happen when frequently
      shutting down and reinitializing an interface. With some carefully
      placed msleep()s/mdelay()s it can be reproduced easily.
      
      The issue is, that on interface removal, any still running worker thread
      of a forwarding packet will race with the interface purging routine to
      free a forwarding packet. Temporarily giving up a spin-lock to be able
      to sleep in the purging routine is not safe.
      
      Furthermore, there is a potential general protection fault not just for
      the purging side shown above, but also on the worker side: Temporarily
      removing a forw_packet from the according forw_{bcast,bat}_list will make
      it impossible for the purging routine to catch and cancel it.
      
       # How this patch tries to fix it:
      
      With this patch we split the queue purging into three steps: Step 1),
      removing forward packets from the queue of an interface and by that
      claim it as our responsibility to free.
      
      Step 2), we are either lucky to cancel a pending worker before it starts
      to run. Or if it is already running, we wait and let it do its thing,
      except two things:
      
      Through the claiming in step 1) we prevent workers from a) re-arming
      themselves. And b) prevent workers from freeing packets which we still
      hold in the interface purging routine.
      
      Finally, step 3, we are sure that no forwarding packets are pending or
      even running anymore on the interface to remove. We can then safely free
      the claimed forwarding packets.
      Signed-off-by: NLinus Lüssing <linus.luessing@c0d3.blue>
      Signed-off-by: NSven Eckelmann <sven@narfation.org>
      Signed-off-by: NSimon Wunderlich <sw@simonwunderlich.de>
      9b4aec64
    • S
      batman-adv: Cache the type of wifi device for each hardif · 10b1bbb4
      Sven Eckelmann 提交于
      batman-adv is requiring the type of wifi device in different contexts. Some
      of them can take the rtnl semaphore and some of them already have the
      semaphore taken. But even others don't allow that the semaphore will be
      taken.
      
      The data has to be retrieved when the hardif is added to batman-adv because
      some of the wifi information for an hardif will only be available with rtnl
      lock. It can then be cached in the batadv_hard_iface and the functions
      is_wifi_netdev and is_cfg80211_netdev can just compare the correct bits
      without imposing extra locking requirements.
      Signed-off-by: NSven Eckelmann <sven.eckelmann@open-mesh.com>
      Signed-off-by: NSimon Wunderlich <sw@simonwunderlich.de>
      10b1bbb4
    • S
      batman-adv: Consume skb in receive handlers · b91a2543
      Sven Eckelmann 提交于
      Receiving functions in Linux consume the supplied skbuff. Doing the same in
      the batadv_rx_handler functions makes the behavior more similar to the rest
      of the Linux network code.
      Signed-off-by: NSven Eckelmann <sven@narfation.org>
      Signed-off-by: NSimon Wunderlich <sw@simonwunderlich.de>
      b91a2543
  10. 30 10月, 2016 1 次提交
  11. 19 10月, 2016 1 次提交
  12. 09 8月, 2016 8 次提交
  13. 04 7月, 2016 1 次提交
  14. 30 6月, 2016 6 次提交
  15. 18 5月, 2016 2 次提交
    • S
      batman-adv: Fix integer overflow in batadv_iv_ogm_calc_tq · d285f52c
      Sven Eckelmann 提交于
      The undefined behavior sanatizer detected an signed integer overflow in a
      setup with near perfect link quality
      
          UBSAN: Undefined behaviour in net/batman-adv/bat_iv_ogm.c:1246:25
          signed integer overflow:
          8713350 * 255 cannot be represented in type 'int'
      
      The problems happens because the calculation of mixed unsigned and signed
      integers resulted in an integer multiplication.
      
            batadv_ogm_packet::tq (u8 255)
          * tq_own (u8 255)
          * tq_asym_penalty (int 134; max 255)
          * tq_iface_penalty (int 255; max 255)
      
      The tq_iface_penalty, tq_asym_penalty and inv_asym_penalty can just be
      changed to unsigned int because they are not expected to become negative.
      
      Fixes: c0398768 ("batman-adv: add WiFi penalty")
      Signed-off-by: NSven Eckelmann <sven.eckelmann@open-mesh.com>
      Signed-off-by: NMarek Lindner <mareklindner@neomailbox.ch>
      Signed-off-by: NAntonio Quartulli <a@unstable.cc>
      d285f52c
    • S
      batman-adv: Fix unexpected free of bcast_own on add_if error · f7dcdf5f
      Sven Eckelmann 提交于
      The function batadv_iv_ogm_orig_add_if allocates new buffers for bcast_own
      and bcast_own_sum. It is expected that these buffers are unchanged in case
      either bcast_own or bcast_own_sum couldn't be resized.
      
      But the error handling of this function frees the already resized buffer
      for bcast_own when the allocation of the new bcast_own_sum buffer failed.
      This will lead to an invalid memory access when some code will try to
      access bcast_own.
      
      Instead the resized new bcast_own buffer has to be kept. This will not lead
      to problems because the size of the buffer was only increased and therefore
      no user of the buffer will try to access bytes outside of the new buffer.
      
      Fixes: d0015fdd ("batman-adv: provide orig_node routing API")
      Signed-off-by: NSven Eckelmann <sven@narfation.org>
      Signed-off-by: NMarek Lindner <mareklindner@neomailbox.ch>
      Signed-off-by: NAntonio Quartulli <a@unstable.cc>
      f7dcdf5f
  16. 10 5月, 2016 3 次提交
  17. 04 5月, 2016 2 次提交
  18. 29 2月, 2016 1 次提交
    • A
      batman-adv: keep track of when unicast packets are sent · 95d39278
      Antonio Quartulli 提交于
      To enable ELP to send probing packets over wireless links
      only if needed, batman-adv must keep track of the last time
      it sent a unicast packet towards every neighbour.
      
      For this purpose a 2 main changes are introduced:
      1) a new member of the elp_neigh_node structure stores the
         last time a unicast packet was sent towards this neighbour;
      2) a wrapper function for sending unicast packets is
         implemented. This function will simply update the member
         describe din point 1) and then forward the packet to the
         real sending routine.
      
      Point 2) implies that any code-path leading to a unicast
      sending now has to use the new wrapper.
      Signed-off-by: NAntonio Quartulli <antonio@open-mesh.com>
      Signed-off-by: NMarek Lindner <mareklindner@neomailbox.ch>
      95d39278
  19. 23 2月, 2016 2 次提交