06 Dec, 2016

21 commits

  • File is in uapi directory but not being copied on
    make install_headers

    Fixes commit 4ec9c8fbbc22 ("netfilter: nft_log: complete
    NFTA_LOG_FLAGS attr support").

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    stephen hemminger
     
  • Fixes commit 735cffe5d800 ("net_sched: Introduce skbmod action")
    Not used by iproute2 but maybe in future.

    Signed-off-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    stephen hemminger
     
  • When we unload the ep93xx_eth, whether we have opened the network
    interface or not, we will either hit a kernel paging request error, or a
    simple NULL pointer de-reference because:

    - if ep93xx_open has been called, we have created a valid DMA mapping
    for ep->descs, when we call ep93xx_stop, we also call
    ep93xx_free_buffers, ep->descs now has a stale value

    - if ep93xx_open has not been called, we have a NULL pointer for
    ep->descs, so performing any operation against that address just won't
    work

    Fix this by adding a NULL pointer check for ep->descs which means that
    ep93xx_free_buffers() was able to successfully tear down the descriptors
    and free the DMA cookie as well.

    Fixes: 1d22e05df818 ("[PATCH] Cirrus Logic ep93xx ethernet driver")
    Signed-off-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Florian Fainelli
     
  • Yuval Mintz says:

    ====================
    bnx2x: fixes series

    Two unrelated fixes for bnx2x - the first one is nice-to-have,
    while the other fixes fatal behaviour in older adapters.

    Please consider applying them to `net'.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Only the 578xx adapters are capable of configuring UDP ports for
    the purpose of tunnelling - doing the same on 577xx might lead to
    a firmware assertion.
    We're already not claiming support for any related feature for such
    devices, but we also need to prevent the configuration of the UDP
    ports to the device in this case.

    Fixes: f34fa14cc033 ("bnx2x: Add vxlan RSS support")
    Reported-by: Anikina Anna
    Signed-off-by: Yuval Mintz
    Signed-off-by: David S. Miller

    Mintz, Yuval
     
  • Until interface is up [and assuming ringparams weren't explicitly
    configured] when queried for the size of its rings bnx2x would
    claim they're the maximal size by default.
    That is incorrect as by default the maximal number of buffers would
    be equally divided between the various rx rings.

    This prevents the user from actually setting the number of elements
    on each rx ring to be of maximal size prior to transitioning the
    interface into up state.

    To fix this, make a rough estimation about the number of buffers.
    It wouldn't always be accurate, but it would be much better than
    current estimation and would allow users to increase number of
    buffers during early initialization of the interface.

    Reported-by: Seymour, Shane
    Signed-off-by: Yuval Mintz
    Signed-off-by: David S. Miller

    Mintz, Yuval
     
  • In function hfc4s8s_probe(), the value of return variable err should be
    negative on failures. However, when the call to request_region() returns
    NULL, the value of err is 0. This patch fixes the bug, assigning
    "-EBUSY" to err on the path that request_region() fails.

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=188931

    Signed-off-by: Pan Bian
    Signed-off-by: David S. Miller

    Pan Bian
     
  • Macro BNX2X_ALLOC_AND_SET(arr, lbl, func) calls kmalloc() to allocate
    memory, and jumps to label "lbl" if the allocation fails. Label "lbl"
    first cleans memory and then returns variable rc. Before calling the
    macro, the value of variable rc is 0. Because 0 means no error, the
    callers of bnx2x_init_firmware() may be misled. This patch fixes the bug,
    assigning "-ENOMEM" to rc before calling macro NX2X_ALLOC_AND_SET().

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=189141

    Signed-off-by: Pan Bian
    Signed-off-by: David S. Miller

    Pan Bian
     
  • When calling dma_mapping_error(), the value of return variable rc is 0.
    And when the call returns an unexpected value, rc is not set to a
    negative errno. Thus, it will return 0 on the error path, and its
    callers cannot detect the bug. This patch fixes the bug, assigning
    "-ENOMEM" to err.

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=189041

    Signed-off-by: Pan Bian
    Acked-by: Yuval Mintz
    Signed-off-by: David S. Miller

    Pan Bian
     
  • It returns variable "error" when ioremap_nocache() returns a NULL
    pointer. The value of "error" is 0 then, which will mislead the callers
    to believe that there is no error. This patch fixes the bug, returning
    "-ENOMEM".

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=189021

    Signed-off-by: Pan Bian
    Signed-off-by: David S. Miller

    Pan Bian
     
  • When the calls to kzalloc() fail, the value of return variable ret may
    be 0. 0 means success in this context. This patch fixes the bug,
    assigning "-ENOMEM" to ret before calling kzalloc().

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=188971

    Signed-off-by: Pan Bian
    Signed-off-by: David S. Miller

    Pan Bian
     
  • The check of the return value of sock_register() is ineffective.
    "if(!err)" seems to be a typo. It is better to propagate the error code
    to the callers of caif_sktinit_module(). This patch removes the check
    statment and directly returns the result of sock_register().

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=188751
    Signed-off-by: Pan Bian
    Signed-off-by: David S. Miller

    Pan Bian
     
  • Prior to commit c0371da6047a ("put iov_iter into msghdr") in v3.19, there
    was no check that the iovec contained enough bytes for an ICMP header,
    and the read loop would walk across neighboring stack contents. Since the
    iov_iter conversion, bad arguments are noticed, but the returned error is
    EFAULT. Returning EINVAL is a clearer error and also solves the problem
    prior to v3.19.

    This was found using trinity with KASAN on v3.18:

    BUG: KASAN: stack-out-of-bounds in memcpy_fromiovec+0x60/0x114 at addr ffffffc071077da0
    Read of size 8 by task trinity-c2/9623
    page:ffffffbe034b9a08 count:0 mapcount:0 mapping: (null) index:0x0
    flags: 0x0()
    page dumped because: kasan: bad access detected
    CPU: 0 PID: 9623 Comm: trinity-c2 Tainted: G BU 3.18.0-dirty #15
    Hardware name: Google Tegra210 Smaug Rev 1,3+ (DT)
    Call trace:
    [] dump_backtrace+0x0/0x1ac arch/arm64/kernel/traps.c:90
    [] show_stack+0x10/0x1c arch/arm64/kernel/traps.c:171
    [< inline >] __dump_stack lib/dump_stack.c:15
    [] dump_stack+0x7c/0xd0 lib/dump_stack.c:50
    [< inline >] print_address_description mm/kasan/report.c:147
    [< inline >] kasan_report_error mm/kasan/report.c:236
    [] kasan_report+0x380/0x4b8 mm/kasan/report.c:259
    [< inline >] check_memory_region mm/kasan/kasan.c:264
    [] __asan_load8+0x20/0x70 mm/kasan/kasan.c:507
    [] memcpy_fromiovec+0x5c/0x114 lib/iovec.c:15
    [< inline >] memcpy_from_msg include/linux/skbuff.h:2667
    [] ping_common_sendmsg+0x50/0x108 net/ipv4/ping.c:674
    [] ping_v4_sendmsg+0xd8/0x698 net/ipv4/ping.c:714
    [] inet_sendmsg+0xe0/0x12c net/ipv4/af_inet.c:749
    [< inline >] __sock_sendmsg_nosec net/socket.c:624
    [< inline >] __sock_sendmsg net/socket.c:632
    [] sock_sendmsg+0x124/0x164 net/socket.c:643
    [< inline >] SYSC_sendto net/socket.c:1797
    [] SyS_sendto+0x178/0x1d8 net/socket.c:1761

    CVE-2016-8399

    Reported-by: Qidan He
    Fixes: c319b4d76b9e ("net: ipv4: add IPPROTO_ICMP socket kind")
    Cc: stable@vger.kernel.org
    Signed-off-by: Kees Cook
    Signed-off-by: David S. Miller

    Kees Cook
     
  • In function lanai_dev_open(), when the call to ioremap() fails, the
    value of return variable result is 0. 0 means no error in this context.
    This patch fixes the bug, assigning "-ENOMEM" to result when ioremap()
    returns a NULL pointer.

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=188791

    Signed-off-by: Pan Bian
    Signed-off-by: David S. Miller

    Pan Bian
     
  • In function lan78xx_probe(), variable ret takes the errno code on
    failures. However, when the call to usb_alloc_urb() fails, its value
    will keeps 0. 0 indicates success in the context, which is inconsistent
    with the execution result. This patch fixes the bug, assigning
    "-ENOMEM" to ret when usb_alloc_urb() returns a NULL pointer.

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=188771

    Signed-off-by: Pan Bian
    Acked-by: Woojung Huh
    Signed-off-by: David S. Miller

    Pan Bian
     
  • Function br_sysfs_addbr() does not set error code when the call
    kobject_create_and_add() returns a NULL pointer. It may be better to
    return "-ENOMEM" when kobject_create_and_add() fails.

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=188781

    Signed-off-by: Pan Bian
    Acked-by: Stephen Hemminger
    Signed-off-by: David S. Miller

    Pan Bian
     
  • Adding space after switch keyword before open
    parenthesis for readability purpose.

    This patch fixes the checkpatch.pl warning:
    space required before the open parenthesis '('

    Signed-off-by: Suraj Deshmukh
    Signed-off-by: David S. Miller

    Suraj Deshmukh
     
  • Function bnxt_hwrm_stat_ctx_alloc() always returns 0, even if the call
    to _hwrm_send_message() fails. It may be better to propagate the errors
    to the caller of bnxt_hwrm_stat_ctx_alloc().

    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=188661

    Signed-off-by: Pan Bian
    Acked-by: Michael Chan
    Signed-off-by: David S. Miller

    Pan Bian
     
  • Alexander Duyck says:

    ====================
    IPv4 FIB suffix length fixes

    In reviewing the patch from Robert Shearman and looking over the code I
    realized there were a few different bugs we were still carrying in the IPv4
    FIB lookup code.

    These two patches are based off of Robert's original patch, but take things
    one step further by splitting them up to address two additional issues I
    found.

    So first have Robert's original patch which was addressing the fact that
    us calling update_suffix in resize is expensive when it is called per add.
    To address that I incorporated the core bit of the patch which was us
    dropping the update_suffix call from resize.

    The first patch in the series does a rename and fix on the push_suffix and
    pull_suffix code. Specifically we drop the need to pass a leaf and
    secondly we fix things so we pull the suffix as long as the value of the
    suffix in the node is dropping.

    The second patch addresses the original issue reported as well as
    optimizing the code for the fact that update_suffix is only really meant to
    go through and clean things up when we are decreasing a suffix. I had
    originally added code for it to somehow cause an increase, but if we push
    the suffix when a new leaf is added we only ever have to handle pulling
    down the suffix with update_suffix so I updated the code to reflect that.

    As far as side effects the only ones I think that will be obvious should be
    the fact that some routes may be able to be found earlier since before we
    relied on resize to update the suffix lengths, and now we are updating them
    before we add or remove the leaf.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • It has been reported that update_suffix can be expensive when it is called
    on a large node in which most of the suffix lengths are the same. The time
    required to add 200K entries had increased from around 3 seconds to almost
    49 seconds.

    In order to address this we need to move the code for updating the suffix
    out of resize and instead just have it handled in the cases where we are
    pushing a node that increases the suffix length, or will decrease the
    suffix length.

    Fixes: 5405afd1a306 ("fib_trie: Add tracking value for suffix length")
    Reported-by: Robert Shearman
    Signed-off-by: Alexander Duyck
    Reviewed-by: Robert Shearman
    Tested-by: Robert Shearman
    Signed-off-by: David S. Miller

    Alexander Duyck
     
  • It wasn't necessary to pass a leaf in when doing the suffix updates so just
    drop it. Instead just pass the suffix and work with that.

    Since we dropped the leaf there is no need to include that in the name so
    the names are updated to node_push_suffix and node_pull_suffix.

    Finally I noticed that the logic for pulling the suffix length back
    actually had some issues. Specifically it would stop prematurely if there
    was a longer suffix, but it was not as long as the original suffix. I
    updated the code to address that in node_pull_suffix.

    Fixes: 5405afd1a306 ("fib_trie: Add tracking value for suffix length")
    Suggested-by: Robert Shearman
    Signed-off-by: Alexander Duyck
    Reviewed-by: Robert Shearman
    Tested-by: Robert Shearman
    Signed-off-by: David S. Miller

    Alexander Duyck
     

04 Dec, 2016

2 commits


03 Dec, 2016

17 commits

  • Pull ARM SoC fixes from Arnd Bergmann:
    "This should be the last set of bugfixes for arm-soc in v4.9. None of
    these are critical regressions, but it would be nice to still get them
    merged.

    - On the Juno platform, the idle latency was described wrong, leading
    to suboptimal cpuidle tuning.

    - Also on the same platform, PCI I/O space was set up incorrectly and
    could not work.

    - On the sti platform, a syntactically incorrect DT entry caused
    warnings.

    - The newly added 'gr8' platform has somewhat confusing file names,
    which we rename for consistency"

    * tag 'fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
    arm64: dts: juno: fix cluster sleep state entry latency on all SoC versions
    arm64: dts: juno: Correct PCI IO window
    ARM: dts: STiH407-family: fix i2c nodes
    ARM: gr8: Rename the DTSI and relevant DTS

    Linus Torvalds
     
  • Pull networking fixes from David Miller:

    1) Lots more phydev and probe error path leaks in various drivers by
    Johan Hovold.

    2) Fix race in packet_set_ring(), from Philip Pettersson.

    3) Use after free in dccp_invalid_packet(), from Eric Dumazet.

    4) Signnedness overflow in SO_{SND,RCV}BUFFORCE, also from Eric
    Dumazet.

    5) When tunneling between ipv4 and ipv6 we can be left with the wrong
    skb->protocol value as we enter the IPSEC engine and this causes all
    kinds of problems. Set it before the output path does any
    dst_output() calls, from Eli Cooper.

    6) bcmgenet uses wrong device struct pointer in DMA API calls, fix from
    Florian Fainelli.

    7) Various netfilter nat bug fixes from FLorian Westphal.

    8) Fix memory leak in ipvlan_link_new(), from Gao Feng.

    9) Locking fixes, particularly wrt. socket lookups, in l2tp from
    Guillaume Nault.

    10) Avoid invoking rhash teardowns in atomic context by moving netlink
    cb->done() dump completion from a worker thread. Fix from Herbert
    Xu.

    11) Buffer refcount problems in tun and macvtap on errors, from Jason
    Wang.

    12) We don't set Kconfig symbol DEFAULT_TCP_CONG properly when the user
    selects BBR. Fix from Julian Wollrath.

    13) Fix deadlock in transmit path on altera TSE driver, from Lino
    Sanfilippo.

    14) Fix unbalanced reference counting in dsa_switch_tree, from Nikita
    Yushchenko.

    15) tc_tunnel_key needs to be properly exported to userspace via uapi,
    fix from Roi Dayan.

    16) rds_tcp_init_net() doesn't unregister notifier in error path, fix
    from Sowmini Varadhan.

    17) Stale packet header pointer access after pskb_expand_head() in
    genenve driver, fix from Sabrina Dubroca.

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (103 commits)
    net: avoid signed overflows for SO_{SND|RCV}BUFFORCE
    geneve: avoid use-after-free of skb->data
    tipc: check minimum bearer MTU
    net: renesas: ravb: unintialized return value
    sh_eth: remove unchecked interrupts for RZ/A1
    net: bcmgenet: Utilize correct struct device for all DMA operations
    NET: usb: qmi_wwan: add support for Telit LE922A PID 0x1040
    cdc_ether: Fix handling connection notification
    ip6_offload: check segs for NULL in ipv6_gso_segment.
    RDS: TCP: unregister_netdevice_notifier() in error path of rds_tcp_init_net
    Revert: "ip6_tunnel: Update skb->protocol to ETH_P_IPV6 in ip6_tnl_xmit()"
    ipv6: Set skb->protocol properly for local output
    ipv4: Set skb->protocol properly for local output
    packet: fix race condition in packet_set_ring
    net: ethernet: altera: TSE: do not use tx queue lock in tx completion handler
    net: ethernet: altera: TSE: Remove unneeded dma sync for tx buffers
    net: ethernet: stmmac: fix of-node and fixed-link-phydev leaks
    net: ethernet: stmmac: platform: fix outdated function header
    net: ethernet: stmmac: dwmac-meson8b: fix probe error path
    net: ethernet: stmmac: dwmac-generic: fix probe error path
    ...

    Linus Torvalds
     
  • CAP_NET_ADMIN users should not be allowed to set negative
    sk_sndbuf or sk_rcvbuf values, as it can lead to various memory
    corruptions, crashes, OOM...

    Note that before commit 82981930125a ("net: cleanups in
    sock_setsockopt()"), the bug was even more serious, since SO_SNDBUF
    and SO_RCVBUF were vulnerable.

    This needs to be backported to all known linux kernels.

    Again, many thanks to syzkaller team for discovering this gem.

    Signed-off-by: Eric Dumazet
    Reported-by: Andrey Konovalov
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • geneve{,6}_build_skb can end up doing a pskb_expand_head(), which
    makes the ip_hdr(skb) reference we stashed earlier stale. Since it's
    only needed as an argument to ip_tunnel_ecn_encap(), move this
    directly in the function call.

    Fixes: 08399efc6319 ("geneve: ensure ECN info is handled properly in all tx/rx paths")
    Signed-off-by: Sabrina Dubroca
    Reviewed-by: John W. Linville
    Signed-off-by: David S. Miller

    Sabrina Dubroca
     
  • Qian Zhang (张谦) reported a potential socket buffer overflow in
    tipc_msg_build() which is also known as CVE-2016-8632: due to
    insufficient checks, a buffer overflow can occur if MTU is too short for
    even tipc headers. As anyone can set device MTU in a user/net namespace,
    this issue can be abused by a regular user.

    As agreed in the discussion on Ben Hutchings' original patch, we should
    check the MTU at the moment a bearer is attached rather than for each
    processed packet. We also need to repeat the check when bearer MTU is
    adjusted to new device MTU. UDP case also needs a check to avoid
    overflow when calculating bearer MTU.

    Fixes: b97bf3fd8f6a ("[TIPC] Initial merge")
    Signed-off-by: Michal Kubecek
    Reported-by: Qian Zhang (张谦)
    Acked-by: Ying Xue
    Signed-off-by: David S. Miller

    Michal Kubeček
     
  • …ux/kernel/git/mkl/linux-can

    Marc Kleine-Budde says:

    ====================
    pull-request: can 2016-12-02

    this is a pull request for net/master.

    There are two patches by Stephane Grosjean, who adds support for the new
    PCAN-USB X6 USB interface to the pcan_usb driver.
    ====================

    Signed-off-by: David S. Miller <davem@davemloft.net>

    David S. Miller
     
  • We want to set the other "err" variable here so that we can return it
    later. My version of GCC misses this issue but I caught it with a
    static checker.

    Fixes: 9f70eb339f52 ("net: ethernet: renesas: ravb: fix fixed-link phydev leaks")
    Signed-off-by: Dan Carpenter
    Acked-by: Sergei Shtylyov
    Reviewed-by: Johan Hovold
    Signed-off-by: David S. Miller

    Dan Carpenter
     
  • When streaming a lot of data and the RZ/A1 can't keep up, some status bits
    will get set that are not being checked or cleared which cause the
    following messages and the Ethernet driver to stop working. This
    patch fixes that issue.

    irq 21: nobody cared (try booting with the "irqpoll" option)
    handlers:
    [] sh_eth_interrupt
    Disabling IRQ #21

    Fixes: db893473d313a4ad ("sh_eth: Add support for r7s72100")
    Signed-off-by: Chris Brandt
    Acked-by: Sergei Shtylyov
    Signed-off-by: David S. Miller

    Chris Brandt
     
  • __bcmgenet_tx_reclaim() and bcmgenet_free_rx_buffers() are not using the
    same struct device during unmap that was used for the map operation,
    which makes DMA-API debugging warn about it. Fix this by always using
    &priv->pdev->dev throughout the driver, using an identical device
    reference for all map/unmap calls.

    Fixes: 1c1008c793fa ("net: bcmgenet: add main driver file")
    Signed-off-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Florian Fainelli
     
  • Ozgur Karatas reported that the very first entry in the CREDITS file had
    the wrong tag for name (M: instead of N: - it happened when moving the
    entry from the MAINTAINERS file, where 'M:' stands for "Maintainer").

    And when I went looking, I found a couple of other cases of wrong
    tagging too.

    Reported-by: Ozgur Karatas
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • This patch adds support for PID 0x1040 of Telit LE922A.

    The qmi adapter requires to have DTR set for proper working,
    so QMI_WWAN_QUIRK_DTR has been enabled.

    Signed-off-by: Daniele Palmas
    Acked-by: Bjørn Mork
    Signed-off-by: David S. Miller

    Daniele Palmas
     
  • Commit bfe9b9d2df66 ("cdc_ether: Improve ZTE MF823/831/910 handling")
    introduced a work-around in usbnet_cdc_status() for devices that exported
    cdc carrier on twice on connect. Before the commit, this behavior caused
    the link state to be incorrect. It was assumed that all CDC Ethernet
    devices would either export this behavior, or send one off and then one on
    notification (which seems to be the default behavior).

    Unfortunately, it turns out multiple devices sends a connection
    notification multiple times per second (via an interrupt), even when
    connection state does not change. This has been observed with several
    different USB LAN dongles (at least), for example 13b1:0041 (Linksys).
    After bfe9b9d2df66, the link state has been set as down and then up for
    each notification. This has caused a flood of Netlink NEWLINK messages and
    syslog to be flooded with messages similar to:

    cdc_ether 2-1:2.0 eth1: kevent 12 may have been dropped

    This commit fixes the behavior by reverting usbnet_cdc_status() to how it
    was before bfe9b9d2df66. The work-around has been moved to a separate
    status-function which is only called when a known, affect device is
    detected.

    v1->v2:

    * Do not open-code netif_carrier_ok() (thanks Henning Schild).
    * Call netif_carrier_off() instead of usb_link_change(). This prevents
    calling schedule_work() twice without giving the work queue a chance to be
    processed (thanks Bjørn Mork).

    Fixes: bfe9b9d2df66 ("cdc_ether: Improve ZTE MF823/831/910 handling")
    Reported-by: Henning Schild
    Signed-off-by: Kristian Evensen
    Signed-off-by: David S. Miller

    Kristian Evensen
     
  • segs needs to be checked for being NULL in ipv6_gso_segment() before calling
    skb_shinfo(segs), otherwise kernel can run into a NULL-pointer dereference:

    [ 97.811262] BUG: unable to handle kernel NULL pointer dereference at 00000000000000cc
    [ 97.819112] IP: [] ipv6_gso_segment+0x119/0x2f0
    [ 97.825214] PGD 0 [ 97.827047]
    [ 97.828540] Oops: 0000 [#1] SMP
    [ 97.831678] Modules linked in: vhost_net vhost macvtap macvlan nfsv3 rpcsec_gss_krb5
    nfsv4 dns_resolver nfs fscache xt_CHECKSUM iptable_mangle ipt_MASQUERADE nf_nat_masquerade_ipv4
    iptable_nat nf_nat_ipv4 nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack
    ipt_REJECT nf_reject_ipv4 tun ebtable_filter ebtables ip6table_filter ip6_tables iptable_filter
    bridge stp llc snd_hda_codec_realtek snd_hda_codec_hdmi snd_hda_codec_generic snd_hda_intel
    snd_hda_codec edac_mce_amd snd_hda_core edac_core snd_hwdep kvm_amd snd_seq kvm snd_seq_device
    snd_pcm irqbypass snd_timer ppdev parport_serial snd parport_pc k10temp pcspkr soundcore parport
    sp5100_tco shpchp sg wmi i2c_piix4 acpi_cpufreq nfsd auth_rpcgss nfs_acl lockd grace sunrpc
    ip_tables xfs libcrc32c sr_mod cdrom sd_mod ata_generic pata_acpi amdkfd amd_iommu_v2 radeon
    broadcom bcm_phy_lib i2c_algo_bit drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops
    ttm ahci serio_raw tg3 firewire_ohci libahci pata_atiixp drm ptp libata firewire_core pps_core
    i2c_core crc_itu_t fjes dm_mirror dm_region_hash dm_log dm_mod
    [ 97.927721] CPU: 1 PID: 3504 Comm: vhost-3495 Not tainted 4.9.0-7.el7.test.x86_64 #1
    [ 97.935457] Hardware name: AMD Snook/Snook, BIOS ESK0726A 07/26/2010
    [ 97.941806] task: ffff880129a1c080 task.stack: ffffc90001bcc000
    [ 97.947720] RIP: 0010:[] [] ipv6_gso_segment+0x119/0x2f0
    [ 97.956251] RSP: 0018:ffff88012fc43a10 EFLAGS: 00010207
    [ 97.961557] RAX: 0000000000000000 RBX: ffff8801292c8700 RCX: 0000000000000594
    [ 97.968687] RDX: 0000000000000593 RSI: ffff880129a846c0 RDI: 0000000000240000
    [ 97.975814] RBP: ffff88012fc43a68 R08: ffff880129a8404e R09: 0000000000000000
    [ 97.982942] R10: 0000000000000000 R11: ffff880129a84076 R12: 00000020002949b3
    [ 97.990070] R13: ffff88012a580000 R14: 0000000000000000 R15: ffff88012a580000
    [ 97.997198] FS: 0000000000000000(0000) GS:ffff88012fc40000(0000) knlGS:0000000000000000
    [ 98.005280] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 98.011021] CR2: 00000000000000cc CR3: 0000000126c5d000 CR4: 00000000000006e0
    [ 98.018149] Stack:
    [ 98.020157] 00000000ffffffff ffff88012fc43ac8 ffffffffa017ad0a 000000000000000e
    [ 98.027584] 0000001300000000 0000000077d59998 ffff8801292c8700 00000020002949b3
    [ 98.035010] ffff88012a580000 0000000000000000 ffff88012a580000 ffff88012fc43a98
    [ 98.042437] Call Trace:
    [ 98.044879] [ 98.046803] [] ? tg3_start_xmit+0x84a/0xd60 [tg3]
    [ 98.053156] [] skb_mac_gso_segment+0xb0/0x130
    [ 98.059158] [] __skb_gso_segment+0x73/0x110
    [ 98.064985] [] validate_xmit_skb+0x12d/0x2b0
    [ 98.070899] [] validate_xmit_skb_list+0x42/0x70
    [ 98.077073] [] sch_direct_xmit+0xd0/0x1b0
    [ 98.082726] [] __dev_queue_xmit+0x486/0x690
    [ 98.088554] [] ? cpumask_next_and+0x35/0x50
    [ 98.094380] [] dev_queue_xmit+0x10/0x20
    [ 98.099863] [] br_dev_queue_push_xmit+0xa7/0x170 [bridge]
    [ 98.106907] [] br_forward_finish+0x41/0xc0 [bridge]
    [ 98.113430] [] ? nf_iterate+0x52/0x60
    [ 98.118735] [] ? nf_hook_slow+0x6b/0xc0
    [ 98.124216] [] __br_forward+0x14c/0x1e0 [bridge]
    [ 98.130480] [] ? br_dev_queue_push_xmit+0x170/0x170 [bridge]
    [ 98.137785] [] br_forward+0x9d/0xb0 [bridge]
    [ 98.143701] [] br_handle_frame_finish+0x267/0x560 [bridge]
    [ 98.150834] [] br_handle_frame+0x174/0x2f0 [bridge]
    [ 98.157355] [] ? sched_clock+0x9/0x10
    [ 98.162662] [] ? sched_clock_cpu+0x72/0xa0
    [ 98.168403] [] __netif_receive_skb_core+0x1e5/0xa20
    [ 98.174926] [] ? timerqueue_add+0x59/0xb0
    [ 98.180580] [] __netif_receive_skb+0x18/0x60
    [ 98.186494] [] process_backlog+0x95/0x140
    [ 98.192145] [] net_rx_action+0x16d/0x380
    [ 98.197713] [] __do_softirq+0xd1/0x283
    [ 98.203106] [] do_softirq_own_stack+0x1c/0x30
    [ 98.209107] [ 98.211029] [] do_softirq+0x50/0x60
    [ 98.216166] [] netif_rx_ni+0x33/0x80
    [ 98.221386] [] tun_get_user+0x487/0x7f0 [tun]
    [ 98.227388] [] tun_sendmsg+0x4b/0x60 [tun]
    [ 98.233129] [] handle_tx+0x282/0x540 [vhost_net]
    [ 98.239392] [] handle_tx_kick+0x15/0x20 [vhost_net]
    [ 98.245916] [] vhost_worker+0x9e/0xf0 [vhost]
    [ 98.251919] [] ? vhost_umem_alloc+0x40/0x40 [vhost]
    [ 98.258440] [] ? do_syscall_64+0x67/0x180
    [ 98.264094] [] kthread+0xd9/0xf0
    [ 98.268965] [] ? kthread_park+0x60/0x60
    [ 98.274444] [] ret_from_fork+0x25/0x30
    [ 98.279836] Code: 8b 93 d8 00 00 00 48 2b 93 d0 00 00 00 4c 89 e6 48 89 df 66 89 93 c2 00 00 00 ff 10 48 3d 00 f0 ff ff 49 89 c2 0f 87 52 01 00 00 8b 92 cc 00 00 00 48 8b 80 d0 00 00 00 44 0f b7 74 10 06 66
    [ 98.299425] RIP [] ipv6_gso_segment+0x119/0x2f0
    [ 98.305612] RSP
    [ 98.309094] CR2: 00000000000000cc
    [ 98.312406] ---[ end trace 726a2c7a2d2d78d0 ]---

    Signed-off-by: Artem Savkov
    Acked-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Artem Savkov
     
  • If some error is encountered in rds_tcp_init_net, make sure to
    unregister_netdevice_notifier(), else we could trigger a panic
    later on, when the modprobe from a netns fails.

    Signed-off-by: Sowmini Varadhan
    Acked-by: Santosh Shilimkar
    Signed-off-by: David S. Miller

    Sowmini Varadhan
     
  • This reverts commit ae148b085876fa771d9ef2c05f85d4b4bf09ce0d
    ("ip6_tunnel: Update skb->protocol to ETH_P_IPV6 in ip6_tnl_xmit()").

    skb->protocol is now set in __ip_local_out() and __ip6_local_out() before
    dst_output() is called. It is no longer necessary to do it for each tunnel.

    Cc: stable@vger.kernel.org
    Signed-off-by: Eli Cooper
    Signed-off-by: David S. Miller

    Eli Cooper
     
  • When xfrm is applied to TSO/GSO packets, it follows this path:

    xfrm_output() -> xfrm_output_gso() -> skb_gso_segment()

    where skb_gso_segment() relies on skb->protocol to function properly.

    This patch sets skb->protocol to ETH_P_IPV6 before dst_output() is called,
    fixing a bug where GSO packets sent through an ipip6 tunnel are dropped
    when xfrm is involved.

    Cc: stable@vger.kernel.org
    Signed-off-by: Eli Cooper
    Signed-off-by: David S. Miller

    Eli Cooper
     
  • When xfrm is applied to TSO/GSO packets, it follows this path:

    xfrm_output() -> xfrm_output_gso() -> skb_gso_segment()

    where skb_gso_segment() relies on skb->protocol to function properly.

    This patch sets skb->protocol to ETH_P_IP before dst_output() is called,
    fixing a bug where GSO packets sent through a sit tunnel are dropped
    when xfrm is involved.

    Cc: stable@vger.kernel.org
    Signed-off-by: Eli Cooper
    Signed-off-by: David S. Miller

    Eli Cooper