25 Jan, 2020

1 commit

  • skb->csum is updated incorrectly, when manipulation for
    NF_NAT_MANIP_SRC\DST is done on IPV6 packet.

    Fix:
    There is no need to update skb->csum in inet_proto_csum_replace16(),
    because update in two fields a.) IPv6 src/dst address and b.) L4 header
    checksum cancels each other for skb->csum calculation. Whereas
    inet_proto_csum_replace4 function needs to update skb->csum, because
    update in 3 fields a.) IPv4 src/dst address, b.) IPv4 Header checksum
    and c.) L4 header checksum results in same diff as L4 Header checksum
    for skb->csum calculation.

    [ pablo@netfilter.org: a few comestic documentation edits ]
    Signed-off-by: Praveen Chaudhary
    Signed-off-by: Zhenggen Xu
    Signed-off-by: Andy Stracner
    Reviewed-by: Florian Westphal
    Signed-off-by: Pablo Neira Ayuso

    Praveen Chaudhary
     

31 May, 2019

1 commit

  • Based on 1 normalized pattern(s):

    this program is free software you can redistribute it and or modify
    it under the terms of the gnu general public license as published by
    the free software foundation either version 2 of the license or at
    your option any later version

    extracted by the scancode license scanner the SPDX license identifier

    GPL-2.0-or-later

    has been chosen to replace the boilerplate/reference in 3029 file(s).

    Signed-off-by: Thomas Gleixner
    Reviewed-by: Allison Randal
    Cc: linux-spdx@vger.kernel.org
    Link: https://lkml.kernel.org/r/20190527070032.746973796@linutronix.de
    Signed-off-by: Greg Kroah-Hartman

    Thomas Gleixner
     

05 Aug, 2018

1 commit


26 Mar, 2018

1 commit


03 May, 2017

1 commit

  • Pull networking updates from David Millar:
    "Here are some highlights from the 2065 networking commits that
    happened this development cycle:

    1) XDP support for IXGBE (John Fastabend) and thunderx (Sunil Kowuri)

    2) Add a generic XDP driver, so that anyone can test XDP even if they
    lack a networking device whose driver has explicit XDP support
    (me).

    3) Sparc64 now has an eBPF JIT too (me)

    4) Add a BPF program testing framework via BPF_PROG_TEST_RUN (Alexei
    Starovoitov)

    5) Make netfitler network namespace teardown less expensive (Florian
    Westphal)

    6) Add symmetric hashing support to nft_hash (Laura Garcia Liebana)

    7) Implement NAPI and GRO in netvsc driver (Stephen Hemminger)

    8) Support TC flower offload statistics in mlxsw (Arkadi Sharshevsky)

    9) Multiqueue support in stmmac driver (Joao Pinto)

    10) Remove TCP timewait recycling, it never really could possibly work
    well in the real world and timestamp randomization really zaps any
    hint of usability this feature had (Soheil Hassas Yeganeh)

    11) Support level3 vs level4 ECMP route hashing in ipv4 (Nikolay
    Aleksandrov)

    12) Add socket busy poll support to epoll (Sridhar Samudrala)

    13) Netlink extended ACK support (Johannes Berg, Pablo Neira Ayuso,
    and several others)

    14) IPSEC hw offload infrastructure (Steffen Klassert)"

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next: (2065 commits)
    tipc: refactor function tipc_sk_recv_stream()
    tipc: refactor function tipc_sk_recvmsg()
    net: thunderx: Optimize page recycling for XDP
    net: thunderx: Support for XDP header adjustment
    net: thunderx: Add support for XDP_TX
    net: thunderx: Add support for XDP_DROP
    net: thunderx: Add basic XDP support
    net: thunderx: Cleanup receive buffer allocation
    net: thunderx: Optimize CQE_TX handling
    net: thunderx: Optimize RBDR descriptor handling
    net: thunderx: Support for page recycling
    ipx: call ipxitf_put() in ioctl error path
    net: sched: add helpers to handle extended actions
    qed*: Fix issues in the ptp filter config implementation.
    qede: Fix concurrency issue in PTP Tx path processing.
    stmmac: Add support for SIMATIC IOT2000 platform
    net: hns: fix ethtool_get_strings overflow in hns driver
    tcp: fix wraparound issue in tcp_lp
    bpf, arm64: fix jit branch offset related to ldimm64
    bpf, arm64: implement jiting of BPF_XADD
    ...

    Linus Torvalds
     

15 Apr, 2017

1 commit

  • If "scope_len" is sizeof(scope_id) then we would put the NUL terminator
    one space beyond the end of the buffer.

    Fixes: b1a951fe469e ("net/utils: generic inet_pton_with_scope helper")
    Signed-off-by: Dan Carpenter
    Signed-off-by: Jens Axboe

    Dan Carpenter
     

04 Apr, 2017

1 commit

  • Several locations in the stack need to handle ipv4/ipv6
    (with scope) and port strings conversion to sockaddr.
    Add a helper that takes either AF_INET, AF_INET6 or
    AF_UNSPEC (for wildcard) to centralize this handling.

    Suggested-by: Christoph Hellwig
    Reviewed-by: Christoph Hellwig
    Acked-by: David S. Miller
    Signed-off-by: Sagi Grimberg
    Signed-off-by: Jens Axboe

    Sagi Grimberg
     

25 Mar, 2017

1 commit


25 Dec, 2016

1 commit


29 Jun, 2016

1 commit


08 Oct, 2015

1 commit

  • There's no good reason why users outside of networking should not
    be using this facility, f.e. for initializing their seeds.

    Therefore, make it accessible from there as get_random_once().

    Signed-off-by: Hannes Frederic Sowa
    Signed-off-by: Daniel Borkmann
    Acked-by: Alexei Starovoitov
    Signed-off-by: David S. Miller

    Hannes Frederic Sowa
     

18 Aug, 2015

2 commits


26 May, 2015

1 commit

  • make C=2 CF=-D__CHECK_ENDIAN__ net/core/utils.o
    ...
    net/core/utils.c:307:72: warning: incorrect type in argument 2 (different base types)
    net/core/utils.c:307:72: expected restricted __wsum [usertype] addend
    net/core/utils.c:307:72: got restricted __be32 [usertype] from
    net/core/utils.c:308:34: warning: incorrect type in argument 2 (different base types)
    net/core/utils.c:308:34: expected restricted __wsum [usertype] addend
    net/core/utils.c:308:34: got restricted __be32 [usertype] to
    net/core/utils.c:310:70: warning: incorrect type in argument 2 (different base types)
    net/core/utils.c:310:70: expected restricted __wsum [usertype] addend
    net/core/utils.c:310:70: got restricted __be32 [usertype] from
    net/core/utils.c:310:77: warning: incorrect type in argument 2 (different base types)
    net/core/utils.c:310:77: expected restricted __wsum [usertype] addend
    net/core/utils.c:310:77: got restricted __be32 [usertype] to
    net/core/utils.c:312:72: warning: incorrect type in argument 2 (different base types)
    net/core/utils.c:312:72: expected restricted __wsum [usertype] addend
    net/core/utils.c:312:72: got restricted __be32 [usertype] from
    net/core/utils.c:313:35: warning: incorrect type in argument 2 (different base types)
    net/core/utils.c:313:35: expected restricted __wsum [usertype] addend
    net/core/utils.c:313:35: got restricted __be32 [usertype] to

    Note we can use csum_replace4() helper

    Fixes: 58e3cac5613aa ("net: optimise inet_proto_csum_replace4()")
    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     

12 Nov, 2014

1 commit

  • Use the more common dynamic_debug capable net_dbg_ratelimited
    and remove the LIMIT_NETDEBUG macro.

    All messages are still ratelimited.

    Some KERN_ uses are changed to KERN_DEBUG.

    This may have some negative impact on messages that were
    emitted at KERN_INFO that are not not enabled at all unless
    DEBUG is defined or dynamic_debug is enabled. Even so,
    these messages are now _not_ emitted by default.

    This also eliminates the use of the net_msg_warn sysctl
    "/proc/sys/net/core/warnings". For backward compatibility,
    the sysctl is not removed, but it has no function. The extern
    declaration of net_msg_warn is removed from sock.h and made
    static in net/core/sysctl_net_core.c

    Miscellanea:

    o Update the sysctl documentation
    o Remove the embedded uses of pr_fmt
    o Coalesce format fragments
    o Realign arguments

    Signed-off-by: Joe Perches
    Signed-off-by: David S. Miller

    Joe Perches
     

27 Sep, 2014

1 commit

  • csum_partial() is a generic function which is not optimised for small fixed
    length calculations, and its use requires to store "from" and "to" values in
    memory while we already have them available in registers. This also has impact,
    especially on RISC processors. In the same spirit as the change done by
    Eric Dumazet on csum_replace2(), this patch rewrites inet_proto_csum_replace4()
    taking into account RFC1624.

    I spotted during a NATted tcp transfert that csum_partial() is one of top 5
    consuming functions (around 8%), and the second user of csum_partial() is
    inet_proto_csum_replace4().

    Signed-off-by: Christophe Leroy
    Acked-by: Eric Dumazet
    Signed-off-by: David S. Miller

    LEROY Christophe
     

14 May, 2014

1 commit

  • net_get_random_once depends on the static keys infrastructure to patch up
    the branch to the slow path during boot. This was realized by abusing the
    static keys api and defining a new initializer to not enable the call
    site while still indicating that the branch point should get patched
    up. This was needed to have the fast path considered likely by gcc.

    The static key initialization during boot up normally walks through all
    the registered keys and either patches in ideal nops or enables the jump
    site but omitted that step on x86 if ideal nops where already placed at
    static_key branch points. Thus net_get_random_once branches not always
    became active.

    This patch switches net_get_random_once to the ordinary static_key
    api and thus places the kernel fast path in the - by gcc considered -
    unlikely path. Microbenchmarks on Intel and AMD x86-64 showed that
    the unlikely path actually beats the likely path in terms of cycle cost
    and that different nop patterns did not make much difference, thus this
    switch should not be noticeable.

    Fixes: a48e42920ff38b ("net: introduce new macro net_get_random_once")
    Reported-by: Tuomas Räsänen
    Cc: Linus Torvalds
    Signed-off-by: Hannes Frederic Sowa
    Signed-off-by: David S. Miller

    Hannes Frederic Sowa
     

26 Oct, 2013

1 commit

  • I initial build non irq safe version of net_get_random_once because I
    would liked to have the freedom to defer even the extraction process of
    get_random_bytes until the nonblocking pool is fully seeded.

    I don't think this is a good idea anymore and thus this patch makes
    net_get_random_once irq safe. Now someone using net_get_random_once does
    not need to care from where it is called.

    Cc: David S. Miller
    Cc: Eric Dumazet
    Signed-off-by: Hannes Frederic Sowa
    Signed-off-by: David S. Miller

    Hannes Frederic Sowa
     

20 Oct, 2013

1 commit

  • net_get_random_once is a new macro which handles the initialization
    of secret keys. It is possible to call it in the fast path. Only the
    initialization depends on the spinlock and is rather slow. Otherwise
    it should get used just before the key is used to delay the entropy
    extration as late as possible to get better randomness. It returns true
    if the key got initialized.

    The usage of static_keys for net_get_random_once is a bit uncommon so
    it needs some further explanation why this actually works:

    === In the simple non-HAVE_JUMP_LABEL case we actually have ===
    no constrains to use static_key_(true|false) on keys initialized with
    STATIC_KEY_INIT_(FALSE|TRUE). So this path just expands in favor of
    the likely case that the initialization is already done. The key is
    initialized like this:

    ___done_key = { .enabled = ATOMIC_INIT(0) }

    The check

    if (!static_key_true(&___done_key)) \

    expands into (pseudo code)

    if (!likely(___done_key > 0))

    , so we take the fast path as soon as ___done_key is increased from the
    helper function.

    === If HAVE_JUMP_LABELs are available this depends ===
    on patching of jumps into the prepared NOPs, which is done in
    jump_label_init at boot-up time (from start_kernel). It is forbidden
    and dangerous to use net_get_random_once in functions which are called
    before that!

    At compilation time NOPs are generated at the call sites of
    net_get_random_once. E.g. net/ipv6/inet6_hashtable.c:inet6_ehashfn (we
    need to call net_get_random_once two times in inet6_ehashfn, so two NOPs):

    71: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
    76: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)

    Both will be patched to the actual jumps to the end of the function to
    call __net_get_random_once at boot time as explained above.

    arch_static_branch is optimized and inlined for false as return value and
    actually also returns false in case the NOP is placed in the instruction
    stream. So in the fast case we get a "return false". But because we
    initialize ___done_key with (enabled != (entries & 1)) this call-site
    will get patched up at boot thus returning true. The final check looks
    like this:

    if (!static_key_true(&___done_key)) \
    ___ret = __net_get_random_once(buf, \

    expands to

    if (!!static_key_false(&___done_key)) \
    ___ret = __net_get_random_once(buf, \

    So we get true at boot time and as soon as static_key_slow_inc is called
    on the key it will invert the logic and return false for the fast path.
    static_key_slow_inc will change the branch because it got initialized
    with .enabled == 0. After static_key_slow_inc is called on the key the
    branch is replaced with a nop again.

    === Misc: ===
    The helper defers the increment into a workqueue so we don't
    have problems calling this code from atomic sections. A seperate boolean
    (___done) guards the case where we enter net_get_random_once again before
    the increment happend.

    Cc: Ingo Molnar
    Cc: Steven Rostedt
    Cc: Jason Baron
    Cc: Peter Zijlstra
    Cc: Eric Dumazet
    Cc: "David S. Miller"
    Signed-off-by: Hannes Frederic Sowa
    Signed-off-by: David S. Miller

    Hannes Frederic Sowa
     

06 Jun, 2013

1 commit

  • Since we have at least one user of this function outside of CONFIG_NET
    scope, we have to provide this function independently. The proposed
    solution is to move it under lib/net_utils.c with corresponding
    configuration variable and select wherever it is needed.

    Signed-off-by: Andy Shevchenko
    Reported-by: Arnd Bergmann
    Acked-by: David S. Miller
    Acked-by: Arnd Bergmann
    Signed-off-by: Greg Kroah-Hartman

    Andy Shevchenko
     

28 Mar, 2013

1 commit


13 Oct, 2012

2 commits


30 Aug, 2012

1 commit


13 Apr, 2012

1 commit


29 Mar, 2012

1 commit


28 May, 2011

1 commit

  • Ingo Molnar noticed that we have this unnecessary ratelimit.h
    dependency in linux/net.h, which hid compilation problems from
    people doing builds only with CONFIG_NET enabled.

    Move this stuff out to a seperate net/net_ratelimit.h file and
    include that in the only two places where this thing is needed.

    Signed-off-by: David S. Miller
    Acked-by: Ingo Molnar

    David S. Miller
     

10 May, 2011

1 commit

  • mac_pton() parses MAC address in form XX:XX:XX:XX:XX:XX and only in that form.

    mac_pton() doesn't dirty result until it's sure string representation is valid.

    mac_pton() doesn't care about characters _after_ last octet,
    it's up to caller to deal with it.

    mac_pton() diverges from 0/-E return value convention.
    Target usage:

    if (!mac_pton(str, whatever->mac))
    return -EINVAL;
    /* ->mac being u8 [ETH_ALEN] is filled at this point. */
    /* optionally check str[3 * ETH_ALEN - 1] for termination */

    Use mac_pton() in pktgen and netconsole for start.

    Signed-off-by: Alexey Dobriyan
    Signed-off-by: David S. Miller

    Alexey Dobriyan
     

24 Sep, 2010

1 commit


22 Sep, 2010

1 commit


13 Jul, 2010

1 commit


22 Sep, 2009

1 commit

  • Decouple kernel.h from ratelimit.h: the global declaration of
    printk's ratelimit_state is not needed, and it leads to messy
    circular dependencies due to ratelimit.h's (new) adding of a
    spinlock_types.h include.

    Cc: Peter Zijlstra
    Cc: Andrew Morton
    Cc: Linus Torvalds
    Cc: David S. Miller
    LKML-Reference:
    Signed-off-by: Ingo Molnar

    Ingo Molnar
     

26 Mar, 2009

1 commit


26 Jul, 2008

1 commit

  • All ratelimit user use same jiffies and burst params, so some messages
    (callbacks) will be lost.

    For example:
    a call printk_ratelimit(5 * HZ, 1)
    b call printk_ratelimit(5 * HZ, 1) before the 5*HZ timeout of a, then b will
    will be supressed.

    - rewrite __ratelimit, and use a ratelimit_state as parameter. Thanks for
    hints from andrew.

    - Add WARN_ON_RATELIMIT, update rcupreempt.h

    - remove __printk_ratelimit

    - use __ratelimit in net_ratelimit

    Signed-off-by: Dave Young
    Cc: "David S. Miller"
    Cc: "Paul E. McKenney"
    Cc: Dave Young
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Dave Young
     

29 Jan, 2008

2 commits


08 Aug, 2007

1 commit


31 May, 2007

1 commit

  • in4_pton converts a textual representation of an ip4 address
    into an integer representation. However, when the textual representation
    is of in the form ip:port, e.g. 192.168.1.1:5060, and 'delim' is set to
    -1, the function bails out with an error when reading the colon.

    It makes sense to allow the colon as a delimiting character without
    explicitly having to set it through the 'delim' variable as there can be
    no ambiguity in the point where the ip address is completely parsed. This
    function is indeed called from nf_conntrack_sip.c in this way to parse
    textual ip:port combinations which fails due to the reason stated above.

    Signed-off-by: Jerome Borsboom
    Signed-off-by: David S. Miller

    Jerome Borsboom
     

26 Apr, 2007

2 commits