1. 28 May, 2019 3 commits
  2. 27 May, 2019 11 commits
  3. 26 May, 2019 26 commits
    • David S. Miller's avatar
      Merge branch 'inet-frags-avoid-possible-races-at-netns-dismantle' · 8fb91c35
      David S. Miller authored
      Eric Dumazet says:
      
      ====================
      inet: frags: avoid possible races at netns dismantle
      
      This patch series fixes a race happening on netns dismantle with
      frag queues. While rhashtable_free_and_destroy() is running,
      concurrent timers might run inet_frag_kill() and attempt
      rhashtable_remove_fast() calls. This is not allowed by
      rhashtable logic.
      
      Since I do not want to add expensive synchronize_rcu() calls
      in the netns dismantle path, I had to no longer inline
      netns_frags structures, but dynamically allocate them.
      
      The ten first patches make this preparation, so that
      the last patch clearly shows the fix.
      
      As this patch series is not exactly trivial, I chose to
      target 5.3. We will backport it once soaked a bit.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8fb91c35
    • Eric Dumazet's avatar
      inet: frags: rework rhashtable dismantle · 3c8fc878
      Eric Dumazet authored
      syszbot found an interesting use-after-free [1] happening
      while IPv4 fragment rhashtable was destroyed at netns dismantle.
      
      While no insertions can possibly happen at the time a dismantling
      netns is destroying this rhashtable, timers can still fire and
      attempt to remove elements from this rhashtable.
      
      This is forbidden, since rhashtable_free_and_destroy() has
      no synchronization against concurrent inserts and deletes.
      
      Add a new fqdir->dead flag so that timers do not attempt
      a rhashtable_remove_fast() operation.
      
      We also have to respect an RCU grace period before starting
      the rhashtable_free_and_destroy() from process context,
      thus we use rcu_work infrastructure.
      
      This is a refinement of a prior rough attempt to fix this bug :
      https://marc.info/?l=linux-netdev&m=153845936820900&w=2
      
      Since the rhashtable cleanup is now deferred to a work queue,
      netns dismantles should be slightly faster.
      
      [1]
      BUG: KASAN: use-after-free in __read_once_size include/linux/compiler.h:194 [inline]
      BUG: KASAN: use-after-free in rhashtable_last_table+0x162/0x180 lib/rhashtable.c:212
      Read of size 8 at addr ffff8880a6497b70 by task kworker/0:0/5
      
      CPU: 0 PID: 5 Comm: kworker/0:0 Not tainted 5.2.0-rc1+ #2
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      Workqueue: events rht_deferred_worker
      Call Trace:
       __dump_stack lib/dump_stack.c:77 [inline]
       dump_stack+0x172/0x1f0 lib/dump_stack.c:113
       print_address_description.cold+0x7c/0x20d mm/kasan/report.c:188
       __kasan_report.cold+0x1b/0x40 mm/kasan/report.c:317
       kasan_report+0x12/0x20 mm/kasan/common.c:614
       __asan_report_load8_noabort+0x14/0x20 mm/kasan/generic_report.c:132
       __read_once_size include/linux/compiler.h:194 [inline]
       rhashtable_last_table+0x162/0x180 lib/rhashtable.c:212
       rht_deferred_worker+0x111/0x2030 lib/rhashtable.c:411
       process_one_work+0x989/0x1790 kernel/workqueue.c:2269
       worker_thread+0x98/0xe40 kernel/workqueue.c:2415
       kthread+0x354/0x420 kernel/kthread.c:255
       ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:352
      
      Allocated by task 32687:
       save_stack+0x23/0x90 mm/kasan/common.c:71
       set_track mm/kasan/common.c:79 [inline]
       __kasan_kmalloc mm/kasan/common.c:489 [inline]
       __kasan_kmalloc.constprop.0+0xcf/0xe0 mm/kasan/common.c:462
       kasan_kmalloc+0x9/0x10 mm/kasan/common.c:503
       __do_kmalloc_node mm/slab.c:3620 [inline]
       __kmalloc_node+0x4e/0x70 mm/slab.c:3627
       kmalloc_node include/linux/slab.h:590 [inline]
       kvmalloc_node+0x68/0x100 mm/util.c:431
       kvmalloc include/linux/mm.h:637 [inline]
       kvzalloc include/linux/mm.h:645 [inline]
       bucket_table_alloc+0x90/0x480 lib/rhashtable.c:178
       rhashtable_init+0x3f4/0x7b0 lib/rhashtable.c:1057
       inet_frags_init_net include/net/inet_frag.h:109 [inline]
       ipv4_frags_init_net+0x182/0x410 net/ipv4/ip_fragment.c:683
       ops_init+0xb3/0x410 net/core/net_namespace.c:130
       setup_net+0x2d3/0x740 net/core/net_namespace.c:316
       copy_net_ns+0x1df/0x340 net/core/net_namespace.c:439
       create_new_namespaces+0x400/0x7b0 kernel/nsproxy.c:107
       unshare_nsproxy_namespaces+0xc2/0x200 kernel/nsproxy.c:206
       ksys_unshare+0x440/0x980 kernel/fork.c:2692
       __do_sys_unshare kernel/fork.c:2760 [inline]
       __se_sys_unshare kernel/fork.c:2758 [inline]
       __x64_sys_unshare+0x31/0x40 kernel/fork.c:2758
       do_syscall_64+0xfd/0x680 arch/x86/entry/common.c:301
       entry_SYSCALL_64_after_hwframe+0x49/0xbe
      
      Freed by task 7:
       save_stack+0x23/0x90 mm/kasan/common.c:71
       set_track mm/kasan/common.c:79 [inline]
       __kasan_slab_free+0x102/0x150 mm/kasan/common.c:451
       kasan_slab_free+0xe/0x10 mm/kasan/common.c:459
       __cache_free mm/slab.c:3432 [inline]
       kfree+0xcf/0x220 mm/slab.c:3755
       kvfree+0x61/0x70 mm/util.c:460
       bucket_table_free+0x69/0x150 lib/rhashtable.c:108
       rhashtable_free_and_destroy+0x165/0x8b0 lib/rhashtable.c:1155
       inet_frags_exit_net+0x3d/0x50 net/ipv4/inet_fragment.c:152
       ipv4_frags_exit_net+0x73/0x90 net/ipv4/ip_fragment.c:695
       ops_exit_list.isra.0+0xaa/0x150 net/core/net_namespace.c:154
       cleanup_net+0x3fb/0x960 net/core/net_namespace.c:553
       process_one_work+0x989/0x1790 kernel/workqueue.c:2269
       worker_thread+0x98/0xe40 kernel/workqueue.c:2415
       kthread+0x354/0x420 kernel/kthread.c:255
       ret_from_fork+0x24/0x30 arch/x86/entry/entry_64.S:352
      
      The buggy address belongs to the object at ffff8880a6497b40
       which belongs to the cache kmalloc-1k of size 1024
      The buggy address is located 48 bytes inside of
       1024-byte region [ffff8880a6497b40, ffff8880a6497f40)
      The buggy address belongs to the page:
      page:ffffea0002992580 refcount:1 mapcount:0 mapping:ffff8880aa400ac0 index:0xffff8880a64964c0 compound_mapcount: 0
      flags: 0x1fffc0000010200(slab|head)
      raw: 01fffc0000010200 ffffea0002916e88 ffffea000218fe08 ffff8880aa400ac0
      raw: ffff8880a64964c0 ffff8880a6496040 0000000100000005 0000000000000000
      page dumped because: kasan: bad access detected
      
      Memory state around the buggy address:
       ffff8880a6497a00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
       ffff8880a6497a80: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
      >ffff8880a6497b00: fc fc fc fc fc fc fc fc fb fb fb fb fb fb fb fb
                                                                   ^
       ffff8880a6497b80: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
       ffff8880a6497c00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
      
      Fixes: 648700f7 ("inet: frags: use rhashtables for reassembly units")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Reported-by: default avatarsyzbot <syzkaller@googlegroups.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3c8fc878
    • Eric Dumazet's avatar
      net: dynamically allocate fqdir structures · 4907abc6
      Eric Dumazet authored
      Following patch will add rcu grace period before fqdir
      rhashtable destruction, so we need to dynamically allocate
      fqdir structures to not force expensive synchronize_rcu() calls
      in netns dismantle path.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      4907abc6
    • Eric Dumazet's avatar
      net: add a net pointer to struct fqdir · a39aca67
      Eric Dumazet authored
      fqdir will soon be dynamically allocated.
      
      We need to reach the struct net pointer from fqdir,
      so add it, and replace the various container_of() constructs
      by direct access to the new field.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a39aca67
    • Eric Dumazet's avatar
      net: rename inet_frags_init_net() to fdir_init() · 9cce45f2
      Eric Dumazet authored
      And pass an extra parameter, since we will soon
      dynamically allocate fqdir structures.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9cce45f2
    • Eric Dumazet's avatar
      ieee820154: 6lowpan: no longer reference init_net in lowpan_frags_ns_ctl_table · d2dfd435
      Eric Dumazet authored
      (struct net *)->ieee802154_lowpan.fqdir will soon be a pointer, so make
      sure lowpan_frags_ns_ctl_table[] does not reference init_net.
      
      lowpan_frags_ns_sysctl_register() can perform the needed initialization
      for all netns.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d2dfd435
    • Eric Dumazet's avatar
      netfilter: ipv6: nf_defrag: no longer reference init_net in nf_ct_frag6_sysctl_table · 3bb13dd4
      Eric Dumazet authored
      (struct net *)->nf_frag.fqdir will soon be a pointer, so make
      sure nf_ct_frag6_sysctl_table[] does not reference init_net.
      
      nf_ct_frag6_sysctl_register() can perform the needed initialization
      for all netns.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      3bb13dd4
    • Eric Dumazet's avatar
      ipv6: no longer reference init_net in ip6_frags_ns_ctl_table[] · 8668d0e2
      Eric Dumazet authored
      (struct net *)->ipv6.fqdir will soon be a pointer, so make
      sure ip6_frags_ns_ctl_table[] does not reference init_net.
      
      ip6_frags_ns_ctl_register() can perform the needed initialization
      for all netns.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8668d0e2
    • Eric Dumazet's avatar
      ipv4: no longer reference init_net in ip4_frags_ns_ctl_table[] · 8dfdb313
      Eric Dumazet authored
      (struct net *)->ipv4.fqdir will soon be a pointer, so make
      sure ip4_frags_ns_ctl_table[] does not reference init_net.
      
      ip4_frags_ns_ctl_register() can perform the needed initialization
      for all netns.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      8dfdb313
    • Eric Dumazet's avatar
      net: rename struct fqdir fields · 803fdd99
      Eric Dumazet authored
      Rename the @frags fields from structs netns_ipv4, netns_ipv6,
      netns_nf_frag and netns_ieee802154_lowpan to @fqdir
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      803fdd99
    • Eric Dumazet's avatar
      89fb9005
    • Eric Dumazet's avatar
      inet: rename netns_frags to fqdir · 6ce3b4dc
      Eric Dumazet authored
      1) struct netns_frags is renamed to struct fqdir
        This structure is really holding many frag queues in a hash table.
      
      2) (struct inet_frag_queue)->net field is renamed to fqdir
        since net is generally associated to a 'struct net' pointer
        in networking stack.
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      6ce3b4dc
    • Marek Vasut's avatar
      net: phy: tja11xx: Add TJA11xx PHY driver · ddf6ddb0
      Marek Vasut authored
      Add driver for the NXP TJA1100 and TJA1101 PHYs. These PHYs are special
      BroadRReach 100BaseT1 PHYs used in automotive.
      Signed-off-by: default avatarMarek Vasut <marex@denx.de>
      Cc: Andrew Lunn <andrew@lunn.ch>
      Cc: Florian Fainelli <f.fainelli@gmail.com>
      Cc: Guenter Roeck <linux@roeck-us.net>
      Cc: Heiner Kallweit <hkallweit1@gmail.com>
      Cc: Jean Delvare <jdelvare@suse.com>
      Cc: linux-hwmon@vger.kernel.org
      Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ddf6ddb0
    • David S. Miller's avatar
      Merge branch 'net-hns3-add-aRFS-feature-and-fix-FEC-bugs-for-HNS3-driver' · b25ba113
      David S. Miller authored
      Huazhong Tan says:
      
      ====================
      net: hns3: add aRFS feature and fix FEC bugs for HNS3 driver
      
      This patchset adds some new features support and fixes some bugs:
      [Patch 1/4 - 3/4] adds support for aRFS
      [Patch 4/4] fix FEC configuration issue
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      b25ba113
    • Jian Shen's avatar
      net: hns3: fix for FEC configuration · f438bfe9
      Jian Shen authored
      The FEC capbility may be changed with port speed changes. Driver
      needs to read the active FEC mode, and update FEC capability
      when port speed changes.
      
      Fixes: 7e6ec914 ("net: hns3: add support for FEC encoding control")
      Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      f438bfe9
    • Jian Shen's avatar
      net: hns3: add aRFS support for PF · d93ed94f
      Jian Shen authored
      This patch adds aRFS support for PF. The aRFS rules are also
      stored in the hardware flow director table, Use the existing
      filter management functions to insert TCPv4/UDPv4/TCPv6/UDPv6
      flow director filters. To avoid rule conflict, once user adds
      flow director rules with ethtool, the aRFS will be disabled,
      and clear exist aRFS rules. Once all user configure rules were
      removed, aRFS can work again.
      Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d93ed94f
    • Jian Shen's avatar
      net: hns3: refine the flow director handle · 44122887
      Jian Shen authored
      In order to be compatible with aRFS rules, this patch adds
      spin_lock for flow director rule adding, deleting, querying,
      and packages the rule configuration.
      Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      44122887
    • Jian Shen's avatar
      net: hns3: initialize CPU reverse mapping · ffab9691
      Jian Shen authored
      Allocate CPU rmap and add entry for each irq. CPU rmap is
      used in aRFS to get the queue number of the rx completion
      interrupts.
      
      In additional, remove the calling of
      irq_set_affinity_notifier() in hns3_nic_init_irq(), because
      we have registered notifier in irq_cpu_rmap_add() for each
      vector, otherwise it may cause use-after-free issue.
      Signed-off-by: default avatarJian Shen <shenjian15@huawei.com>
      Signed-off-by: default avatarHuazhong Tan <tanhuazhong@huawei.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      ffab9691
    • David S. Miller's avatar
      Merge branch 'ath79-add-ag71xx-support' · 18e88171
      David S. Miller authored
      Oleksij Rempel says:
      
      ====================
      MIPS: ath79: add ag71xx support
      
      2019.05.24 v6:
      - ag71xx: remove double union
      - ag71xx: reverse Christmas tree for all functions
      - ag71xx: add Reviewed-by: Andrew Lunn <andrew@lunn.ch>
      
      2019.05.20 v5:
      - ag71xx: remove MII_CMD_WRITE, the name is confusing. It is
        actually disables MII_CMD_READ.
      - ag71xx: rework ag71xx_mdio_mii_read/write
      - ag71xx: set proper mask for the addr in ag71xx_mdio_mii_read/write
      - Kconfig: remove MDIO_BITBANG
      - ag71xx: ./scripts/checkpatch.pl it.
      
      2019.05.19 v4:
      - DT: define eth and mdio clocks
      - ag71xx: remove module parameters
      - ag71xx: return proper error value on mdio_read/write
      - ag71xx: use proper mdio clock registration
      - ag71xx: add ag71xx_dma_wait_stop() for ag71xx_dma_reset()
      - ag71xx: remove ag71xx_speed_str()
      - ag71xx: use phydev->link/sped/duplex instead of ag-> variants
      - ag71xx: use WARN() instead of BUG()
      - ag71xx: drop big part of ag71xx_phy_link_adjust()
      - ag71xx: drop most of ag71xx_do_ioctl()
      - ag71xx: register eth clock
      - ag71xx: remove AG71XX_ETH0_NO_MDIO quirk.
      
      2019.04.22 v3:
      - ag71xx: use phy_modes() instead of ag71xx_get_phy_if_mode_name()
      - ag71xx: remove .ndo_poll_controller support
      - ag71xx: unregister_netdev before disconnecting phy.
      
      2019.04.18 v2:
      - ag71xx: add list of openwrt authors
      - ag71xx: remove redundant PHY_POLL assignment
      - ag71xx: use phy_attached_info instead of netif_info
      - ag71xx: remove redundant netif_carrier_off() on .stop.
      - DT: use "ethernet" instead of "eth"
      
      This patch series provide ethernet support for many Atheros/QCA
      MIPS based SoCs.
      
      I reworked ag71xx driver which was previously maintained within OpenWRT
      repository. So far, following changes was made to make upstreaming
      easier:
      - everything what can be some how used in user space was removed. Most
        of it was debug functionality.
      - most of deficetree bindings was removed. Not every thing made sense
        and most of it is SoC specific, so it is possible to detect it by
        compatible.
      - mac and mdio parts are merged in to one driver. It makes easier to
        maintaine SoC specific quirks.
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      18e88171
    • Oleksij Rempel's avatar
      net: ethernet: add ag71xx driver · d51b6ce4
      Oleksij Rempel authored
      Add support for Atheros/QCA AR7XXX/AR9XXX/QCA95XX built-in ethernet mac support
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      d51b6ce4
    • Oleksij Rempel's avatar
      MIPS: ath79: ar9331: add Ethernet nodes · 7ff836f0
      Oleksij Rempel authored
      Add ethernet nodes supported by ag71xx driver.
      Signed-off-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      7ff836f0
    • Oleksij Rempel's avatar
      dt-bindings: net: add qca,ar71xx.txt documentation · 46240936
      Oleksij Rempel authored
      Add binding documentation for Atheros/QCA networking IP core used
      in many routers.
      Signed-off-by: default avatarOleksij Rempel <o.rempel@pengutronix.de>
      Reviewed-by: default avatarRob Herring <robh@kernel.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      46240936
    • David S. Miller's avatar
      Merge branch 'qed-Improve-performance-on-100G-link-for-offload-protocols' · 9b3c520e
      David S. Miller authored
      Michal Kalderon says:
      
      ====================
      qed*: Improve performance on 100G link for offload protocols
      
      This patch series modifies the current implementation of PF selection.
      The refactoring of the llh code enables setting additional filters
      (mac / protocol) per PF, and improves performance for offload protocols
      (RoCE, iWARP, iSCSI, fcoe) on 100G link (was capped at 90G per single
      PF).
      
      Improved performance on 100G link is achieved by configuring engine
      affinty to each PF.
      The engine affinity is read from the Management FW and hw is configured accordingly.
      A new hw resource called PPFID is exposed and an API is introduced to utilize
      it. This additional resource enables setting the affinity of a PF and providing
      more classification rules per PF.
      qedr,qedi,qedf are also modified as part of the series. Without the
      changes functionality is broken.
      
      v1 --> v2
      ---------
      - Remove iWARP module parameter. Instead use devlink param infrastructure
        for setting the iwarp_cmt mode. Additional patch added to the series for
        adding the devlink support.
      
      - Fix kbuild test robot warning on qed_llh_filter initialization.
      
      - Remove comments inside function calls
      ====================
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      9b3c520e
    • Chad Dupuis's avatar
      qedf: Use hwfns and affin_hwfn_idx to get MSI-X vector index to use · a9b02c61
      Chad Dupuis authored
      MSI-X vector index is determined using qed device information and
      affinity to use.
      Signed-off-by: default avatarChad Dupuis <cdupuis@marvell.com>
      Signed-off-by: default avatarSaurav Kashyap <skashyap@marvell.com>
      Signed-off-by: default avatarMichal Kalderon <michal.kalderon@marvell.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      a9b02c61
    • Manish Rangankar's avatar
      qedi: Use hwfns and affin_hwfn_idx to get MSI-X vector index · 2bfbc570
      Manish Rangankar authored
      MSI-X vector index is determined using qed device information and
      affinity to use.
      Signed-off-by: default avatarManish Rangankar <mrangankar@marvell.com>
      Signed-off-by: default avatarAriel Elior <ariel.elior@marvell.com>
      Signed-off-by: default avatarMichal Kalderon <michal.kalderon@marvell.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      2bfbc570
    • Manish Rangankar's avatar
      Revert "scsi: qedi: Allocate IRQs based on msix_cnt" · 13b99d3d
      Manish Rangankar authored
       Always request for number of irqs equals to number of queues.
      
      This reverts commit 1a291bce.
      Signed-off-by: default avatarManish Rangankar <mrangankar@marvell.com>
      Signed-off-by: default avatarAriel Elior <ariel.elior@marvell.com>
      Signed-off-by: default avatarMichal Kalderon <michal.kalderon@marvell.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      13b99d3d