1. 13 10月, 2016 1 次提交
    • E
      net_sched: do not broadcast RTM_GETTFILTER result · fa59b27c
      Eric Dumazet 提交于
      There are two ways to get tc filters from kernel to user space.
      
      1) Full dump (tc_dump_tfilter())
      2) RTM_GETTFILTER to get one precise filter, reducing overhead.
      
      The second operation is unfortunately broadcasting its result,
      polluting "tc monitor" users.
      
      This patch makes sure only the requester gets the result, using
      netlink_unicast() instead of rtnetlink_send()
      
      Jamal cooked an iproute2 patch to implement "tc filter get" operation,
      but other user space libraries already use RTM_GETTFILTER when a single
      filter is queried, instead of dumping all filters.
      Signed-off-by: NEric Dumazet <edumazet@google.com>
      Cc: Jamal Hadi Salim <jhs@mojatatu.com>
      Acked-by: NJamal Hadi Salim <jhs@mojatatu.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      fa59b27c
  2. 20 9月, 2016 1 次提交
  3. 18 8月, 2016 1 次提交
  4. 17 6月, 2016 1 次提交
  5. 11 6月, 2016 1 次提交
    • D
      net, cls: allow for deleting all filters for given parent · ea7f8277
      Daniel Borkmann 提交于
      Add a possibility where the user can just specify the parent and
      all filters under that parent are then being purged. Currently,
      for example for scripting, one needs to specify pref/prio to have
      a well-defined number for 'tc filter del' command for addressing
      the previously created instance or additionally filter handle in
      case of priorities being the same. Improve usage by allowing the
      option for tc to specify the parent and removing the whole chain
      for that given parent.
      
      Example usage after patch, no tc changes required:
      
        # tc qdisc replace dev foo clsact
        # tc filter add dev foo egress bpf da obj ./bpf.o
        # tc filter add dev foo egress bpf da obj ./bpf.o
        # tc filter show dev foo egress
        filter protocol all pref 49151 bpf
        filter protocol all pref 49151 bpf handle 0x1 bpf.o:[classifier] direct-action
        filter protocol all pref 49152 bpf
        filter protocol all pref 49152 bpf handle 0x1 bpf.o:[classifier] direct-action
        # tc filter del dev foo egress
        # tc filter show dev foo egress
        #
      
      Previously, RTM_DELTFILTER requests with invalid prio of 0 were
      rejected, so only netlink requests with RTM_NEWTFILTER and NLM_F_CREATE
      flag were allowed where the kernel would auto-generate a pref/prio.
      We can piggyback on that and use prio of 0 as a wildcard for
      requests of RTM_DELTFILTER.
      
      For notifying tc netlink monitoring users (e.g. libnl uses this
      for caching), there are two options, that is, sending individual
      tfilter_notify() notifications for each tcf_proto, or sending a
      single one indicating wildcard removal. I tried both and there
      are pros and cons for each, eventually I decided for sending
      individual tfilter_notify(), so that user space can support this
      seamlessly and there won't be a mess of changing each and every
      application to make sure expectations from the kernel won't break
      when they don't understand single notification. Since linear chains
      don't really scale, I expect only a handful of classifiers to be
      attached at max for a given parent anyway.
      Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
      Acked-by: NJamal Hadi Salim <jhs@mojatatu.com>
      Acked-by: NAlexei Starovoitov <ast@kernel.org>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      ea7f8277
  6. 08 6月, 2016 1 次提交
  7. 22 5月, 2015 1 次提交
    • D
      net: sched: fix call_rcu() race on classifier module unloads · c78e1746
      Daniel Borkmann 提交于
      Vijay reported that a loop as simple as ...
      
        while true; do
          tc qdisc add dev foo root handle 1: prio
          tc filter add dev foo parent 1: u32 match u32 0 0  flowid 1
          tc qdisc del dev foo root
          rmmod cls_u32
        done
      
      ... will panic the kernel. Moreover, he bisected the change
      apparently introducing it to 78fd1d0a ("netlink: Re-add
      locking to netlink_lookup() and seq walker").
      
      The removal of synchronize_net() from the netlink socket
      triggering the qdisc to be removed, seems to have uncovered
      an RCU resp. module reference count race from the tc API.
      Given that RCU conversion was done after e341694e ("netlink:
      Convert netlink_lookup() to use RCU protected hash table")
      which added the synchronize_net() originally, occasion of
      hitting the bug was less likely (not impossible though):
      
      When qdiscs that i) support attaching classifiers and,
      ii) have at least one of them attached, get deleted, they
      invoke tcf_destroy_chain(), and thus call into ->destroy()
      handler from a classifier module.
      
      After RCU conversion, all classifier that have an internal
      prio list, unlink them and initiate freeing via call_rcu()
      deferral.
      
      Meanhile, tcf_destroy() releases already reference to the
      tp->ops->owner module before the queued RCU callback handler
      has been invoked.
      
      Subsequent rmmod on the classifier module is then not prevented
      since all module references are already dropped.
      
      By the time, the kernel invokes the RCU callback handler from
      the module, that function address is then invalid.
      
      One way to fix it would be to add an rcu_barrier() to
      unregister_tcf_proto_ops() to wait for all pending call_rcu()s
      to complete.
      
      synchronize_rcu() is not appropriate as under heavy RCU
      callback load, registered call_rcu()s could be deferred
      longer than a grace period. In case we don't have any pending
      call_rcu()s, the barrier is allowed to return immediately.
      
      Since we came here via unregister_tcf_proto_ops(), there
      are no users of a given classifier anymore. Further nested
      call_rcu()s pointing into the module space are not being
      done anywhere.
      
      Only cls_bpf_delete_prog() may schedule a work item, to
      unlock pages eventually, but that is not in the range/context
      of cls_bpf anymore.
      
      Fixes: 25d8c0d5 ("net: rcu-ify tcf_proto")
      Fixes: 9888faef ("net: sched: cls_basic use RCU")
      Reported-by: NVijay Subramanian <subramanian.vijay@gmail.com>
      Signed-off-by: NDaniel Borkmann <daniel@iogearbox.net>
      Cc: John Fastabend <john.r.fastabend@intel.com>
      Cc: Eric Dumazet <edumazet@google.com>
      Cc: Thomas Graf <tgraf@suug.ch>
      Cc: Jamal Hadi Salim <jhs@mojatatu.com>
      Cc: Alexei Starovoitov <ast@plumgrid.com>
      Tested-by: NVijay Subramanian <subramanian.vijay@gmail.com>
      Acked-by: NAlexei Starovoitov <ast@plumgrid.com>
      Acked-by: NEric Dumazet <edumazet@google.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      c78e1746
  8. 10 5月, 2015 1 次提交
  9. 10 3月, 2015 1 次提交
    • C
      net_sched: destroy proto tp when all filters are gone · 1e052be6
      Cong Wang 提交于
      Kernel automatically creates a tp for each
      (kind, protocol, priority) tuple, which has handle 0,
      when we add a new filter, but it still is left there
      after we remove our own, unless we don't specify the
      handle (literally means all the filters under
      the tuple). For example this one is left:
      
        # tc filter show dev eth0
        filter parent 8001: protocol arp pref 49152 basic
      
      The user-space is hard to clean up these for kernel
      because filters like u32 are organized in a complex way.
      So kernel is responsible to remove it after all filters
      are gone.  Each type of filter has its own way to
      store the filters, so each type has to provide its
      way to check if all filters are gone.
      
      Cc: Jamal Hadi Salim <jhs@mojatatu.com>
      Signed-off-by: NCong Wang <cwang@twopensource.com>
      Signed-off-by: NCong Wang <xiyou.wangcong@gmail.com>
      Acked-by: Jamal Hadi Salim<jhs@mojatatu.com>
      Signed-off-by: NDavid S. Miller <davem@davemloft.net>
      1e052be6
  10. 05 2月, 2015 1 次提交
  11. 09 10月, 2014 1 次提交
  12. 29 9月, 2014 1 次提交
  13. 14 9月, 2014 2 次提交
  14. 18 7月, 2014 1 次提交
  15. 03 5月, 2014 1 次提交
  16. 28 4月, 2014 2 次提交
  17. 25 4月, 2014 1 次提交
  18. 14 1月, 2014 1 次提交
  19. 07 1月, 2014 1 次提交
  20. 21 12月, 2013 1 次提交
  21. 19 12月, 2013 3 次提交
  22. 08 4月, 2013 1 次提交
  23. 29 3月, 2013 1 次提交
  24. 27 3月, 2013 1 次提交
  25. 22 3月, 2013 1 次提交
  26. 15 1月, 2013 1 次提交
  27. 19 11月, 2012 1 次提交
  28. 11 9月, 2012 1 次提交
  29. 15 8月, 2012 1 次提交
  30. 27 6月, 2012 1 次提交
  31. 02 4月, 2012 1 次提交
  32. 06 7月, 2011 1 次提交
  33. 10 6月, 2011 1 次提交
    • G
      rtnetlink: Compute and store minimum ifinfo dump size · c7ac8679
      Greg Rose 提交于
      The message size allocated for rtnl ifinfo dumps was limited to
      a single page.  This is not enough for additional interface info
      available with devices that support SR-IOV and caused a bug in
      which VF info would not be displayed if more than approximately
      40 VFs were created per interface.
      
      Implement a new function pointer for the rtnl_register service that will
      calculate the amount of data required for the ifinfo dump and allocate
      enough data to satisfy the request.
      Signed-off-by: NGreg Rose <gregory.v.rose@intel.com>
      Signed-off-by: NJeff Kirsher <jeffrey.t.kirsher@intel.com>
      c7ac8679
  34. 20 1月, 2011 1 次提交
  35. 30 3月, 2010 1 次提交
    • T
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking... · 5a0e3ad6
      Tejun Heo 提交于
      include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h
      
      percpu.h is included by sched.h and module.h and thus ends up being
      included when building most .c files.  percpu.h includes slab.h which
      in turn includes gfp.h making everything defined by the two files
      universally available and complicating inclusion dependencies.
      
      percpu.h -> slab.h dependency is about to be removed.  Prepare for
      this change by updating users of gfp and slab facilities include those
      headers directly instead of assuming availability.  As this conversion
      needs to touch large number of source files, the following script is
      used as the basis of conversion.
      
        http://userweb.kernel.org/~tj/misc/slabh-sweep.py
      
      The script does the followings.
      
      * Scan files for gfp and slab usages and update includes such that
        only the necessary includes are there.  ie. if only gfp is used,
        gfp.h, if slab is used, slab.h.
      
      * When the script inserts a new include, it looks at the include
        blocks and try to put the new include such that its order conforms
        to its surrounding.  It's put in the include block which contains
        core kernel includes, in the same order that the rest are ordered -
        alphabetical, Christmas tree, rev-Xmas-tree or at the end if there
        doesn't seem to be any matching order.
      
      * If the script can't find a place to put a new include (mostly
        because the file doesn't have fitting include block), it prints out
        an error message indicating which .h file needs to be added to the
        file.
      
      The conversion was done in the following steps.
      
      1. The initial automatic conversion of all .c files updated slightly
         over 4000 files, deleting around 700 includes and adding ~480 gfp.h
         and ~3000 slab.h inclusions.  The script emitted errors for ~400
         files.
      
      2. Each error was manually checked.  Some didn't need the inclusion,
         some needed manual addition while adding it to implementation .h or
         embedding .c file was more appropriate for others.  This step added
         inclusions to around 150 files.
      
      3. The script was run again and the output was compared to the edits
         from #2 to make sure no file was left behind.
      
      4. Several build tests were done and a couple of problems were fixed.
         e.g. lib/decompress_*.c used malloc/free() wrappers around slab
         APIs requiring slab.h to be added manually.
      
      5. The script was run on all .h files but without automatically
         editing them as sprinkling gfp.h and slab.h inclusions around .h
         files could easily lead to inclusion dependency hell.  Most gfp.h
         inclusion directives were ignored as stuff from gfp.h was usually
         wildly available and often used in preprocessor macros.  Each
         slab.h inclusion directive was examined and added manually as
         necessary.
      
      6. percpu.h was updated not to include slab.h.
      
      7. Build test were done on the following configurations and failures
         were fixed.  CONFIG_GCOV_KERNEL was turned off for all tests (as my
         distributed build env didn't work with gcov compiles) and a few
         more options had to be turned off depending on archs to make things
         build (like ipr on powerpc/64 which failed due to missing writeq).
      
         * x86 and x86_64 UP and SMP allmodconfig and a custom test config.
         * powerpc and powerpc64 SMP allmodconfig
         * sparc and sparc64 SMP allmodconfig
         * ia64 SMP allmodconfig
         * s390 SMP allmodconfig
         * alpha SMP allmodconfig
         * um on x86_64 SMP allmodconfig
      
      8. percpu.h modifications were reverted so that it could be applied as
         a separate patch and serve as bisection point.
      
      Given the fact that I had only a couple of failures from tests on step
      6, I'm fairly confident about the coverage of this conversion patch.
      If there is a breakage, it's likely to be something in one of the arch
      headers which should be easily discoverable easily on most builds of
      the specific arch.
      Signed-off-by: NTejun Heo <tj@kernel.org>
      Guess-its-ok-by: NChristoph Lameter <cl@linux-foundation.org>
      Cc: Ingo Molnar <mingo@redhat.com>
      Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
      5a0e3ad6
  36. 23 3月, 2010 1 次提交