1. 02 3月, 2022 1 次提交
  2. 20 8月, 2021 2 次提交
    • L
      batman-adv: bcast: remove remaining skb-copy calls · a006aa51
      Linus Lüssing 提交于
      We currently have two code paths for broadcast packets:
      
      A) self-generated, via batadv_interface_tx()->
         batadv_send_bcast_packet().
      B) received/forwarded, via batadv_recv_bcast_packet()->
         batadv_forw_bcast_packet().
      
      For A), self-generated broadcast packets:
      
      The only modifications to the skb data is the ethernet header which is
      added/pushed to the skb in
      batadv_send_broadcast_skb()->batadv_send_skb_packet(). However before
      doing so, batadv_skb_head_push() is called which calls skb_cow_head() to
      unshare the space for the to be pushed ethernet header. So for this
      case, it is safe to use skb clones.
      
      For B), received/forwarded packets:
      
      The same applies as in A) for the to be forwarded packets. Only the
      ethernet header is added. However after (queueing for) forwarding the
      packet in batadv_recv_bcast_packet()->batadv_forw_bcast_packet(), a
      packet is additionally decapsulated and is sent up the stack through
      batadv_recv_bcast_packet()->batadv_interface_rx().
      
      Protocols higher up the stack are already required to check if the
      packet is shared and create a copy for further modifications. When the
      next (protocol) layer works correctly, it cannot happen that it tries to
      operate on the data behind the skb clone which is still queued up for
      forwarding.
      Co-authored-by: NSven Eckelmann <sven@narfation.org>
      Signed-off-by: NSven Eckelmann <sven@narfation.org>
      Signed-off-by: NLinus Lüssing <linus.luessing@c0d3.blue>
      Signed-off-by: NSimon Wunderlich <sw@simonwunderlich.de>
      a006aa51
    • S
      batman-adv: Drop NULL check before dropping references · a2b7b148
      Sven Eckelmann 提交于
      The check if a batman-adv related object is NULL or not is now directly in
      the batadv_*_put functions. It is not needed anymore to perform this check
      outside these function:
      
      The changes were generated using a coccinelle semantic patch:
      
        @@
        expression E;
        @@
        - if (likely(E != NULL))
        (
        batadv_backbone_gw_put
        |
        batadv_claim_put
        |
        batadv_dat_entry_put
        |
        batadv_gw_node_put
        |
        batadv_hardif_neigh_put
        |
        batadv_hardif_put
        |
        batadv_nc_node_put
        |
        batadv_nc_path_put
        |
        batadv_neigh_ifinfo_put
        |
        batadv_neigh_node_put
        |
        batadv_orig_ifinfo_put
        |
        batadv_orig_node_put
        |
        batadv_orig_node_vlan_put
        |
        batadv_softif_vlan_put
        |
        batadv_tp_vars_put
        |
        batadv_tt_global_entry_put
        |
        batadv_tt_local_entry_put
        |
        batadv_tt_orig_list_entry_put
        |
        batadv_tt_req_node_put
        |
        batadv_tvlv_container_put
        |
        batadv_tvlv_handler_put
        )(E);
      Signed-off-by: NSven Eckelmann <sven@narfation.org>
      Signed-off-by: NSimon Wunderlich <sw@simonwunderlich.de>
      a2b7b148
  3. 19 8月, 2021 1 次提交
    • L
      batman-adv: bcast: remove remaining skb-copy calls · 808cfdfa
      Linus Lüssing 提交于
      We currently have two code paths for broadcast packets:
      
      A) self-generated, via batadv_interface_tx()->
         batadv_send_bcast_packet().
      B) received/forwarded, via batadv_recv_bcast_packet()->
         batadv_forw_bcast_packet().
      
      For A), self-generated broadcast packets:
      
      The only modifications to the skb data is the ethernet header which is
      added/pushed to the skb in
      batadv_send_broadcast_skb()->batadv_send_skb_packet(). However before
      doing so, batadv_skb_head_push() is called which calls skb_cow_head() to
      unshare the space for the to be pushed ethernet header. So for this
      case, it is safe to use skb clones.
      
      For B), received/forwarded packets:
      
      The same applies as in A) for the to be forwarded packets. Only the
      ethernet header is added. However after (queueing for) forwarding the
      packet in batadv_recv_bcast_packet()->batadv_forw_bcast_packet(), a
      packet is additionally decapsulated and is sent up the stack through
      batadv_recv_bcast_packet()->batadv_interface_rx().
      
      Protocols higher up the stack are already required to check if the
      packet is shared and create a copy for further modifications. When the
      next (protocol) layer works correctly, it cannot happen that it tries to
      operate on the data behind the skb clone which is still queued up for
      forwarding.
      Co-authored-by: NSven Eckelmann <sven@narfation.org>
      Signed-off-by: NSven Eckelmann <sven@narfation.org>
      Signed-off-by: NLinus Lüssing <linus.luessing@c0d3.blue>
      Signed-off-by: NSimon Wunderlich <sw@simonwunderlich.de>
      808cfdfa
  4. 09 8月, 2021 1 次提交
    • S
      batman-adv: Drop NULL check before dropping references · 79a0bffb
      Sven Eckelmann 提交于
      The check if a batman-adv related object is NULL or not is now directly in
      the batadv_*_put functions. It is not needed anymore to perform this check
      outside these function:
      
      The changes were generated using a coccinelle semantic patch:
      
        @@
        expression E;
        @@
        - if (likely(E != NULL))
        (
        batadv_backbone_gw_put
        |
        batadv_claim_put
        |
        batadv_dat_entry_put
        |
        batadv_gw_node_put
        |
        batadv_hardif_neigh_put
        |
        batadv_hardif_put
        |
        batadv_nc_node_put
        |
        batadv_nc_path_put
        |
        batadv_neigh_ifinfo_put
        |
        batadv_neigh_node_put
        |
        batadv_orig_ifinfo_put
        |
        batadv_orig_node_put
        |
        batadv_orig_node_vlan_put
        |
        batadv_softif_vlan_put
        |
        batadv_tp_vars_put
        |
        batadv_tt_global_entry_put
        |
        batadv_tt_local_entry_put
        |
        batadv_tt_orig_list_entry_put
        |
        batadv_tt_req_node_put
        |
        batadv_tvlv_container_put
        |
        batadv_tvlv_handler_put
        )(E);
      Signed-off-by: NSven Eckelmann <sven@narfation.org>
      Signed-off-by: NSimon Wunderlich <sw@simonwunderlich.de>
      79a0bffb
  5. 17 5月, 2021 2 次提交
  6. 06 2月, 2021 1 次提交
    • S
      batman-adv: Drop publication years from copyright info · cfa55c6d
      Sven Eckelmann 提交于
      The batman-adv source code was using the year of publication (to net-next)
      as "last" year for the copyright statement. The whole source code mentioned
      in the MAINTAINERS "BATMAN ADVANCED" section was handled as a single entity
      regarding the publishing year.
      
      This avoided having outdated (in sense of year information - not copyright
      holder) publishing information inside several files. But since the simple
      "update copyright year" commit (without other changes) in the file was not
      well received in the upstream kernel, the option to not have a copyright
      year (for initial and last publication) in the files are chosen instead.
      More detailed information about the years can still be retrieved from the
      SCM system.
      Signed-off-by: NSven Eckelmann <sven@narfation.org>
      Acked-by: NMarek Lindner <mareklindner@neomailbox.ch>
      Signed-off-by: NSimon Wunderlich <sw@simonwunderlich.de>
      cfa55c6d
  7. 19 8月, 2020 1 次提交
  8. 26 6月, 2020 1 次提交
  9. 01 1月, 2020 1 次提交
  10. 25 3月, 2019 1 次提交
  11. 04 1月, 2019 1 次提交
  12. 27 2月, 2018 1 次提交
  13. 16 12月, 2017 4 次提交
  14. 28 9月, 2017 1 次提交
  15. 29 7月, 2017 1 次提交
  16. 23 5月, 2017 1 次提交
  17. 26 3月, 2017 2 次提交
  18. 28 1月, 2017 1 次提交
  19. 26 1月, 2017 2 次提交
  20. 09 11月, 2016 2 次提交
    • 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: Remove dev_queue_xmit return code exception · 7d72d174
      Sven Eckelmann 提交于
      No caller of batadv_send_skb_to_orig is expecting the results to be -1
      (-EPERM) anymore when the skbuff was not consumed. They will instead expect
      that the skbuff is always consumed. Having such return code filter is
      therefore not needed anymore.
      Signed-off-by: NSven Eckelmann <sven@narfation.org>
      Signed-off-by: NSimon Wunderlich <sw@simonwunderlich.de>
      7d72d174
  21. 30 10月, 2016 4 次提交
  22. 19 10月, 2016 1 次提交
  23. 09 8月, 2016 2 次提交
  24. 06 7月, 2016 1 次提交
  25. 04 7月, 2016 1 次提交
  26. 30 6月, 2016 3 次提交