1. 14 Oct, 2020 40 commits
    • David Howells's avatar
      rxrpc: Downgrade the BUG() for unsupported token type in rxrpc_read() · 422f5c5d
      David Howells authored
      [ Upstream commit 9a059cd5 ]
      
      If rxrpc_read() (which allows KEYCTL_READ to read a key), sees a token of a
      type it doesn't recognise, it can BUG in a couple of places, which is
      unnecessary as it can easily get back to userspace.
      
      Fix this to print an error message instead.
      
      Fixes: 99455153
      
       ("RxRPC: Parse security index 5 keys (Kerberos 5)")
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      422f5c5d
    • Marc Dionne's avatar
      rxrpc: Fix rxkad token xdr encoding · 7e1f39b5
      Marc Dionne authored
      [ Upstream commit 56305118 ]
      
      The session key should be encoded with just the 8 data bytes and
      no length; ENCODE_DATA precedes it with a 4 byte length, which
      confuses some existing tools that try to parse this format.
      
      Add an ENCODE_BYTES macro that does not include a length, and use
      it for the key.  Also adjust the expected length.
      
      Note that commit 774521f3 ("rxrpc: Fix an assertion in
      rxrpc_read()") had fixed a BUG by changing the length rather than
      fixing the encoding.  The original length was correct.
      
      Fixes: 99455153
      
       ("RxRPC: Parse security index 5 keys (Kerberos 5)")
      Signed-off-by: default avatarMarc Dionne <marc.dionne@auristor.com>
      Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7e1f39b5
    • Aya Levin's avatar
      net/mlx5e: Fix VLAN create flow · 9a52da3f
      Aya Levin authored
      [ Upstream commit d4a16052 ]
      
      When interface is attached while in promiscuous mode and with VLAN
      filtering turned off, both configurations are not respected and VLAN
      filtering is performed.
      There are 2 flows which add the any-vid rules during interface attach:
      VLAN creation table and set rx mode. Each is relaying on the other to
      add any-vid rules, eventually non of them does.
      
      Fix this by adding any-vid rules on VLAN creation regardless of
      promiscuous mode.
      
      Fixes: 9df30601
      
       ("net/mlx5e: Restore vlan filter after seamless reset")
      Signed-off-by: default avatarAya Levin <ayal@nvidia.com>
      Reviewed-by: default avatarMoshe Shemesh <moshe@nvidia.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      9a52da3f
    • Aya Levin's avatar
      net/mlx5e: Fix VLAN cleanup flow · 6b9752d8
      Aya Levin authored
      [ Upstream commit 8c7353b6 ]
      
      Prior to this patch unloading an interface in promiscuous mode with RX
      VLAN filtering feature turned off - resulted in a warning. This is due
      to a wrong condition in the VLAN rules cleanup flow, which left the
      any-vid rules in the VLAN steering table. These rules prevented
      destroying the flow group and the flow table.
      
      The any-vid rules are removed in 2 flows, but none of them remove it in
      case both promiscuous is set and VLAN filtering is off. Fix the issue by
      changing the condition of the VLAN table cleanup flow to clean also in
      case of promiscuous mode.
      
      mlx5_core 0000:00:08.0: mlx5_destroy_flow_group:2123:(pid 28729): Flow group 20 wasn't destroyed, refcount > 1
      mlx5_core 0000:00:08.0: mlx5_destroy_flow_group:2123:(pid 28729): Flow group 19 wasn't destroyed, refcount > 1
      mlx5_core 0000:00:08.0: mlx5_destroy_flow_table:2112:(pid 28729): Flow table 262149 wasn't destroyed, refcount > 1
      ...
      ...
      ------------[ cut here ]------------
      FW pages counter is 11560 after reclaiming all pages
      WARNING: CPU: 1 PID: 28729 at
      drivers/net/ethernet/mellanox/mlx5/core/pagealloc.c:660
      mlx5_reclaim_startup_pages+0x178/0x230 [mlx5_core]
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS
      rel-1.12.1-0-ga5cab58e9a3f-prebuilt.qemu.org 04/01/2014
      Call Trace:
        mlx5_function_teardown+0x2f/0x90 [mlx5_core]
        mlx5_unload_one+0x71/0x110 [mlx5_core]
        remove_one+0x44/0x80 [mlx5_core]
        pci_device_remove+0x3e/0xc0
        device_release_driver_internal+0xfb/0x1c0
        device_release_driver+0x12/0x20
        pci_stop_bus_device+0x68/0x90
        pci_stop_and_remove_bus_device+0x12/0x20
        hv_eject_device_work+0x6f/0x170 [pci_hyperv]
        ? __schedule+0x349/0x790
        process_one_work+0x206/0x400
        worker_thread+0x34/0x3f0
        ? process_one_work+0x400/0x400
        kthread+0x126/0x140
        ? kthread_park+0x90/0x90
        ret_from_fork+0x22/0x30
         ---[ end trace 6283bde8d26170dc ]---
      
      Fixes: 9df30601
      
       ("net/mlx5e: Restore vlan filter after seamless reset")
      Signed-off-by: default avatarAya Levin <ayal@nvidia.com>
      Reviewed-by: default avatarMoshe Shemesh <moshe@nvidia.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      6b9752d8
    • Aya Levin's avatar
      net/mlx5e: Add resiliency in Striding RQ mode for packets larger than MTU · 47e83c69
      Aya Levin authored
      [ Upstream commit c3c94023 ]
      
      Prior to this fix, in Striding RQ mode the driver was vulnerable when
      receiving packets in the range (stride size - headroom, stride size].
      Where stride size is calculated by mtu+headroom+tailroom aligned to the
      closest power of 2.
      Usually, this filtering is performed by the HW, except for a few cases:
      - Between 2 VFs over the same PF with different MTUs
      - On bluefield, when the host physical function sets a larger MTU than
        the ARM has configured on its representor and uplink representor.
      
      When the HW filtering is not present, packets that are larger than MTU
      might be harmful for the RQ's integrity, in the following impacts:
      1) Overflow from one WQE to the next, causing a memory corruption that
      in most cases is unharmful: as the write happens to the headroom of next
      packet, which will be overwritten by build_skb(). In very rare cases,
      high stress/load, this is harmful. When the next WQE is not yet reposted
      and points to existing SKB head.
      2) Each oversize packet overflows to the headroom of the next WQE. On
      the last WQE of the WQ, where addresses wrap-around, the address of the
      remainder headroom does not belong to the next WQE, but it is out of the
      memory region range. This results in a HW CQE error that moves the RQ
      into an error state.
      
      Solution:
      Add a page buffer at the end of each WQE to absorb the leak. Actually
      the maximal overflow size is headroom but since all memory units must be
      of the same size, we use page size to comply with UMR WQEs. The increase
      in memory consumption is of a single page per RQ. Initialize the mkey
      with all MTTs pointing to a default page. When the channels are
      activated, UMR WQEs will redirect the RX WQEs to the actual memory from
      the RQ's pool, while the overflow MTTs remain mapped to the default page.
      
      Fixes: 73281b78
      
       ("net/mlx5e: Derive Striding RQ size from MTU")
      Signed-off-by: default avatarAya Levin <ayal@mellanox.com>
      Reviewed-by: default avatarTariq Toukan <tariqt@nvidia.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      47e83c69
    • Maor Gottlieb's avatar
      net/mlx5: Fix request_irqs error flow · 1e7a9472
      Maor Gottlieb authored
      [ Upstream commit 732ebfab ]
      
      Fix error flow handling in request_irqs which try to free irq
      that we failed to request.
      It fixes the below trace.
      
      WARNING: CPU: 1 PID: 7587 at kernel/irq/manage.c:1684 free_irq+0x4d/0x60
      CPU: 1 PID: 7587 Comm: bash Tainted: G        W  OE    4.15.15-1.el7MELLANOXsmp-x86_64 #1
      Hardware name: Advantech SKY-6200/SKY-6200, BIOS F2.00 08/06/2020
      RIP: 0010:free_irq+0x4d/0x60
      RSP: 0018:ffffc9000ef47af0 EFLAGS: 00010282
      RAX: ffff88001476ae00 RBX: 0000000000000655 RCX: 0000000000000000
      RDX: ffff88001476ae00 RSI: ffffc9000ef47ab8 RDI: ffff8800398bb478
      RBP: ffff88001476a838 R08: ffff88001476ae00 R09: 000000000000156d
      R10: 0000000000000000 R11: 0000000000000004 R12: ffff88001476a838
      R13: 0000000000000006 R14: ffff88001476a888 R15: 00000000ffffffe4
      FS:  00007efeadd32740(0000) GS:ffff88047fc40000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007fc9cc010008 CR3: 00000001a2380004 CR4: 00000000007606e0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      PKRU: 55555554
      Call Trace:
       mlx5_irq_table_create+0x38d/0x400 [mlx5_core]
       ? atomic_notifier_chain_register+0x50/0x60
       mlx5_load_one+0x7ee/0x1130 [mlx5_core]
       init_one+0x4c9/0x650 [mlx5_core]
       pci_device_probe+0xb8/0x120
       driver_probe_device+0x2a1/0x470
       ? driver_allows_async_probing+0x30/0x30
       bus_for_each_drv+0x54/0x80
       __device_attach+0xa3/0x100
       pci_bus_add_device+0x4a/0x90
       pci_iov_add_virtfn+0x2dc/0x2f0
       pci_enable_sriov+0x32e/0x420
       mlx5_core_sriov_configure+0x61/0x1b0 [mlx5_core]
       ? kstrtoll+0x22/0x70
       num_vf_store+0x4b/0x70 [mlx5_core]
       kernfs_fop_write+0x102/0x180
       __vfs_write+0x26/0x140
       ? rcu_all_qs+0x5/0x80
       ? _cond_resched+0x15/0x30
       ? __sb_start_write+0x41/0x80
       vfs_write+0xad/0x1a0
       SyS_write+0x42/0x90
       do_syscall_64+0x60/0x110
       entry_SYSCALL_64_after_hwframe+0x3d/0xa2
      
      Fixes: 24163189
      
       ("net/mlx5: Separate IRQ request/free from EQ life cycle")
      Signed-off-by: default avatarMaor Gottlieb <maorg@nvidia.com>
      Reviewed-by: default avatarEran Ben Elisha <eranbe@nvidia.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      1e7a9472
    • Eran Ben Elisha's avatar
      net/mlx5: Avoid possible free of command entry while timeout comp handler · 073fff81
      Eran Ben Elisha authored
      [ Upstream commit 50b2412b ]
      
      Upon command completion timeout, driver simulates a forced command
      completion. In a rare case where real interrupt for that command arrives
      simultaneously, it might release the command entry while the forced
      handler might still access it.
      
      Fix that by adding an entry refcount, to track current amount of allowed
      handlers. Command entry to be released only when this refcount is
      decremented to zero.
      
      Command refcount is always initialized to one. For callback commands,
      command completion handler is the symmetric flow to decrement it. For
      non-callback commands, it is wait_func().
      
      Before ringing the doorbell, increment the refcount for the real completion
      handler. Once the real completion handler is called, it will decrement it.
      
      For callback commands, once the delayed work is scheduled, increment the
      refcount. Upon callback command completion handler, we will try to cancel
      the timeout callback. In case of success, we need to decrement the callback
      refcount as it will never run.
      
      In addition, gather the entry index free and the entry free into a one
      flow for all command types release.
      
      Fixes: e126ba97
      
       ("mlx5: Add driver for Mellanox Connect-IB adapters")
      Signed-off-by: default avatarEran Ben Elisha <eranbe@mellanox.com>
      Reviewed-by: default avatarMoshe Shemesh <moshe@mellanox.com>
      Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      073fff81
    • Tonghao Zhang's avatar
      virtio-net: don't disable guest csum when disable LRO · 0955c774
      Tonghao Zhang authored
      [ Upstream commit 1a03b8a3 ]
      
      Open vSwitch and Linux bridge will disable LRO of the interface
      when this interface added to them. Now when disable the LRO, the
      virtio-net csum is disable too. That drops the forwarding performance.
      
      Fixes: a02e8964
      
       ("virtio-net: ethtool configurable LRO")
      Cc: Michael S. Tsirkin <mst@redhat.com>
      Cc: Jason Wang <jasowang@redhat.com>
      Cc: Willem de Bruijn <willemb@google.com>
      Signed-off-by: default avatarTonghao Zhang <xiangxia.m.yue@gmail.com>
      Acked-by: default avatarWillem de Bruijn <willemb@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0955c774
    • Wilken Gottwalt's avatar
      net: usb: ax88179_178a: fix missing stop entry in driver_info · 15f84bdf
      Wilken Gottwalt authored
      [ Upstream commit 9666ea66 ]
      
      Adds the missing .stop entry in the Belkin driver_info structure.
      
      Fixes: e20bd60b
      
       ("net: usb: asix88179_178a: Add support for the Belkin B2B128")
      Signed-off-by: default avatarWilken Gottwalt <wilken.gottwalt@mailbox.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      15f84bdf
    • Heiner Kallweit's avatar
      r8169: fix RTL8168f/RTL8411 EPHY config · 70877d04
      Heiner Kallweit authored
      [ Upstream commit 709a16be ]
      
      Mistakenly bit 2 was set instead of bit 3 as in the vendor driver.
      
      Fixes: a7a92cf8
      
       ("r8169: sync PCIe PHY init with vendor driver 8.047.01")
      Signed-off-by: default avatarHeiner Kallweit <hkallweit1@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      70877d04
    • Ido Schimmel's avatar
      mlxsw: spectrum_acl: Fix mlxsw_sp_acl_tcam_group_add()'s error path · 7a96cbd7
      Ido Schimmel authored
      [ Upstream commit 72865028 ]
      
      If mlxsw_sp_acl_tcam_group_id_get() fails, the mutex initialized earlier
      is not destroyed.
      
      Fix this by initializing the mutex after calling the function. This is
      symmetric to mlxsw_sp_acl_tcam_group_del().
      
      Fixes: 5ec2ee28
      
       ("mlxsw: spectrum_acl: Introduce a mutex to guard region list updates")
      Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
      Reviewed-by: default avatarJiri Pirko <jiri@nvidia.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7a96cbd7
    • Randy Dunlap's avatar
      mdio: fix mdio-thunder.c dependency & build error · f3b35c37
      Randy Dunlap authored
      [ Upstream commit 7dbbcf49 ]
      
      Fix build error by selecting MDIO_DEVRES for MDIO_THUNDER.
      Fixes this build error:
      
      ld: drivers/net/phy/mdio-thunder.o: in function `thunder_mdiobus_pci_probe':
      drivers/net/phy/mdio-thunder.c:78: undefined reference to `devm_mdiobus_alloc_size'
      
      Fixes: 379d7ac7
      
       ("phy: mdio-thunder: Add driver for Cavium Thunder SoC MDIO buses.")
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Signed-off-by: default avatarRandy Dunlap <rdunlap@infradead.org>
      Cc: Bartosz Golaszewski <bgolaszewski@baylibre.com>
      Cc: Andrew Lunn <andrew@lunn.ch>
      Cc: Heiner Kallweit <hkallweit1@gmail.com>
      Cc: netdev@vger.kernel.org
      Cc: David Daney <david.daney@cavium.com>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f3b35c37
    • Eric Dumazet's avatar
      bonding: set dev->needed_headroom in bond_setup_by_slave() · 8d103b1f
      Eric Dumazet authored
      [ Upstream commit f32f1933 ]
      
      syzbot managed to crash a host by creating a bond
      with a GRE device.
      
      For non Ethernet device, bonding calls bond_setup_by_slave()
      instead of ether_setup(), and unfortunately dev->needed_headroom
      was not copied from the new added member.
      
      [  171.243095] skbuff: skb_under_panic: text:ffffffffa184b9ea len:116 put:20 head:ffff883f84012dc0 data:ffff883f84012dbc tail:0x70 end:0xd00 dev:bond0
      [  171.243111] ------------[ cut here ]------------
      [  171.243112] kernel BUG at net/core/skbuff.c:112!
      [  171.243117] invalid opcode: 0000 [#1] SMP KASAN PTI
      [  171.243469] gsmi: Log Shutdown Reason 0x03
      [  171.243505] Call Trace:
      [  171.243506]  <IRQ>
      [  171.243512]  [<ffffffffa171be59>] skb_push+0x49/0x50
      [  171.243516]  [<ffffffffa184b9ea>] ipgre_header+0x2a/0xf0
      [  171.243520]  [<ffffffffa17452d7>] neigh_connected_output+0xb7/0x100
      [  171.243524]  [<ffffffffa186f1d3>] ip6_finish_output2+0x383/0x490
      [  171.243528]  [<ffffffffa186ede2>] __ip6_finish_output+0xa2/0x110
      [  171.243531]  [<ffffffffa186acbc>] ip6_finish_output+0x2c/0xa0
      [  171.243534]  [<ffffffffa186abe9>] ip6_output+0x69/0x110
      [  171.243537]  [<ffffffffa186ac90>] ? ip6_output+0x110/0x110
      [  171.243541]  [<ffffffffa189d952>] mld_sendpack+0x1b2/0x2d0
      [  171.243544]  [<ffffffffa189d290>] ? mld_send_report+0xf0/0xf0
      [  171.243548]  [<ffffffffa189c797>] mld_ifc_timer_expire+0x2d7/0x3b0
      [  171.243551]  [<ffffffffa189c4c0>] ? mld_gq_timer_expire+0x50/0x50
      [  171.243556]  [<ffffffffa0fea270>] call_timer_fn+0x30/0x130
      [  171.243559]  [<ffffffffa0fea17c>] expire_timers+0x4c/0x110
      [  171.243563]  [<ffffffffa0fea0e3>] __run_timers+0x213/0x260
      [  171.243566]  [<ffffffffa0fecb7d>] ? ktime_get+0x3d/0xa0
      [  171.243570]  [<ffffffffa0ff9c4e>] ? clockevents_program_event+0x7e/0xe0
      [  171.243574]  [<ffffffffa0f7e5d5>] ? sched_clock_cpu+0x15/0x190
      [  171.243577]  [<ffffffffa0fe973d>] run_timer_softirq+0x1d/0x40
      [  171.243581]  [<ffffffffa1c00152>] __do_softirq+0x152/0x2f0
      [  171.243585]  [<ffffffffa0f44e1f>] irq_exit+0x9f/0xb0
      [  171.243588]  [<ffffffffa1a02e1d>] smp_apic_timer_interrupt+0xfd/0x1a0
      [  171.243591]  [<ffffffffa1a01ea6>] apic_timer_interrupt+0x86/0x90
      
      Fixes: f5184d26
      
       ("net: Allow netdevices to specify needed head/tailroom")
      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>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      8d103b1f
    • Ivan Khoronzhuk's avatar
      net: ethernet: cavium: octeon_mgmt: use phy_start and phy_stop · 3ce96a55
      Ivan Khoronzhuk authored
      [ Upstream commit 4663ff60 ]
      
      To start also "phy state machine", with UP state as it should be,
      the phy_start() has to be used, in another case machine even is not
      triggered. After this change negotiation is supposed to be triggered
      by SM workqueue.
      
      It's not correct usage, but it appears after the following patch,
      so add it as a fix.
      
      Fixes: 74a992b3
      
       ("net: phy: add phy_check_link_status")
      Signed-off-by: default avatarIvan Khoronzhuk <ikhoronz@cisco.com>
      Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      3ce96a55
    • Sylwester Dziedziuch's avatar
      iavf: Fix incorrect adapter get in iavf_resume · e987ea08
      Sylwester Dziedziuch authored
      [ Upstream commit 75598a8f ]
      
      When calling iavf_resume there was a crash because wrong
      function was used to get iavf_adapter and net_device pointers.
      Changed how iavf_resume is getting iavf_adapter and net_device
      pointers from pci_dev.
      
      Fixes: 5eae00c5
      
       ("i40evf: main driver core")
      Signed-off-by: default avatarSylwester Dziedziuch <sylwesterx.dziedziuch@intel.com>
      Reviewed-by: default avatarAleksandr Loktionov <aleksandr.loktionov@intel.com>
      Tested-by: default avatarAaron Brown <aaron.f.brown@intel.com>
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e987ea08
    • Vaibhav Gupta's avatar
      iavf: use generic power management · 029ced5c
      Vaibhav Gupta authored
      [ Upstream commit bc5cbd73
      
       ]
      
      With the support of generic PM callbacks, drivers no longer need to use
      legacy .suspend() and .resume() in which they had to maintain PCI states
      changes and device's power state themselves. The required operations are
      done by PCI core.
      
      PCI drivers are not expected to invoke PCI helper functions like
      pci_save/restore_state(), pci_enable/disable_device(),
      pci_set_power_state(), etc. Their tasks are completed by PCI core itself.
      
      Compile-tested only.
      Signed-off-by: default avatarVaibhav Gupta <vaibhavgupta40@gmail.com>
      Tested-by: default avatarAndrew Bowers <andrewx.bowers@intel.com>
      Signed-off-by: default avatarTony Nguyen <anthony.l.nguyen@intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      029ced5c
    • Herbert Xu's avatar
      xfrm: Use correct address family in xfrm_state_find · 84ab35ea
      Herbert Xu authored
      [ Upstream commit e94ee171 ]
      
      The struct flowi must never be interpreted by itself as its size
      depends on the address family.  Therefore it must always be grouped
      with its original family value.
      
      In this particular instance, the original family value is lost in
      the function xfrm_state_find.  Therefore we get a bogus read when
      it's coupled with the wrong family which would occur with inter-
      family xfrm states.
      
      This patch fixes it by keeping the original family value.
      
      Note that the same bug could potentially occur in LSM through
      the xfrm_state_pol_flow_match hook.  I checked the current code
      there and it seems to be safe for now as only secid is used which
      is part of struct flowi_common.  But that API should be changed
      so that so that we don't get new bugs in the future.  We could
      do that by replacing fl with just secid or adding a family field.
      
      Reported-by: syzbot+577fbac3145a6eb2e7a5@syzkaller.appspotmail.com
      Fixes: 48b8d783
      
       ("[XFRM]: State selection update to use inner...")
      Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      84ab35ea
    • Necip Fazil Yildiran's avatar
      platform/x86: fix kconfig dependency warning for FUJITSU_LAPTOP · 4d3edb2e
      Necip Fazil Yildiran authored
      [ Upstream commit afdd1ebb
      
       ]
      
      When FUJITSU_LAPTOP is enabled and NEW_LEDS is disabled, it results in the
      following Kbuild warning:
      
      WARNING: unmet direct dependencies detected for LEDS_CLASS
        Depends on [n]: NEW_LEDS [=n]
        Selected by [y]:
        - FUJITSU_LAPTOP [=y] && X86 [=y] && X86_PLATFORM_DEVICES [=y] && ACPI [=y] && INPUT [=y] && BACKLIGHT_CLASS_DEVICE [=y] && (ACPI_VIDEO [=n] || ACPI_VIDEO [=n]=n)
      
      The reason is that FUJITSU_LAPTOP selects LEDS_CLASS without depending on
      or selecting NEW_LEDS while LEDS_CLASS is subordinate to NEW_LEDS.
      
      Honor the kconfig menu hierarchy to remove kconfig dependency warnings.
      Reported-by: default avatarHans de Goede <hdegoede@redhat.com>
      Fixes: d89bcc83
      
       ("platform/x86: fujitsu-laptop: select LEDS_CLASS")
      Signed-off-by: default avatarNecip Fazil Yildiran <fazilyildiran@gmail.com>
      Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      4d3edb2e
    • Voon Weifeng's avatar
      net: stmmac: removed enabling eee in EEE set callback · dd2786a3
      Voon Weifeng authored
      [ Upstream commit 7241c5a6 ]
      
      EEE should be only be enabled during stmmac_mac_link_up() when the
      link are up and being set up properly. set_eee should only do settings
      configuration and disabling the eee.
      
      Without this fix, turning on EEE using ethtool will return
      "Operation not supported". This is due to the driver is in a dead loop
      waiting for eee to be advertised in the for eee to be activated but the
      driver will only configure the EEE advertisement after the eee is
      activated.
      
      Ethtool should only return "Operation not supported" if there is no EEE
      capbility in the MAC controller.
      
      Fixes: 8a7493e5
      
       ("net: stmmac: Fix a race in EEE enable callback")
      Signed-off-by: default avatarVoon Weifeng <weifeng.voon@intel.com>
      Acked-by: default avatarMark Gross <mgross@linux.intel.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      dd2786a3
    • Antony Antony's avatar
      xfrm: clone whole liftime_cur structure in xfrm_do_migrate · e9a12de5
      Antony Antony authored
      [ Upstream commit 8366685b ]
      
      When we clone state only add_time was cloned. It missed values like
      bytes, packets.  Now clone the all members of the structure.
      
      v1->v3:
       - use memcpy to copy the entire structure
      
      Fixes: 80c9abaa
      
       ("[XFRM]: Extension for dynamic update of endpoint address(es)")
      Signed-off-by: default avatarAntony Antony <antony.antony@secunet.com>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      e9a12de5
    • Antony Antony's avatar
      xfrm: clone XFRMA_SEC_CTX in xfrm_do_migrate · 7ea7436c
      Antony Antony authored
      [ Upstream commit 7aa05d30 ]
      
      XFRMA_SEC_CTX was not cloned from the old to the new.
      Migrate this attribute during XFRMA_MSG_MIGRATE
      
      v1->v2:
       - return -ENOMEM on error
      v2->v3:
       - fix return type to int
      
      Fixes: 80c9abaa
      
       ("[XFRM]: Extension for dynamic update of endpoint address(es)")
      Signed-off-by: default avatarAntony Antony <antony.antony@secunet.com>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      7ea7436c
    • Antony Antony's avatar
      xfrm: clone XFRMA_REPLAY_ESN_VAL in xfrm_do_migrate · c1becfeb
      Antony Antony authored
      [ Upstream commit 91a46c6d ]
      
      XFRMA_REPLAY_ESN_VAL was not cloned completely from the old to the new.
      Migrate this attribute during XFRMA_MSG_MIGRATE
      
      v1->v2:
       - move curleft cloning to a separate patch
      
      Fixes: af2f464e
      
       ("xfrm: Assign esn pointers when cloning a state")
      Signed-off-by: default avatarAntony Antony <antony.antony@secunet.com>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      c1becfeb
    • Antony Antony's avatar
      xfrm: clone XFRMA_SET_MARK in xfrm_do_migrate · 0bea401a
      Antony Antony authored
      [ Upstream commit 545e5c57 ]
      
      XFRMA_SET_MARK and XFRMA_SET_MARK_MASK was not cloned from the old
      to the new. Migrate these two attributes during XFRMA_MSG_MIGRATE
      
      Fixes: 9b42c1f1
      
       ("xfrm: Extend the output_mark to support input direction and masking.")
      Signed-off-by: default avatarAntony Antony <antony.antony@secunet.com>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      0bea401a
    • Lu Baolu's avatar
      iommu/vt-d: Fix lockdep splat in iommu_flush_dev_iotlb() · f825fd53
      Lu Baolu authored
      [ Upstream commit 1a3f2fd7
      
       ]
      
      Lock(&iommu->lock) without disabling irq causes lockdep warnings.
      
      [   12.703950] ========================================================
      [   12.703962] WARNING: possible irq lock inversion dependency detected
      [   12.703975] 5.9.0-rc6+ #659 Not tainted
      [   12.703983] --------------------------------------------------------
      [   12.703995] systemd-udevd/284 just changed the state of lock:
      [   12.704007] ffffffffbd6ff4d8 (device_domain_lock){..-.}-{2:2}, at:
                     iommu_flush_dev_iotlb.part.57+0x2e/0x90
      [   12.704031] but this lock took another, SOFTIRQ-unsafe lock in the past:
      [   12.704043]  (&iommu->lock){+.+.}-{2:2}
      [   12.704045]
      
                     and interrupts could create inverse lock ordering between
                     them.
      
      [   12.704073]
                     other info that might help us debug this:
      [   12.704085]  Possible interrupt unsafe locking scenario:
      
      [   12.704097]        CPU0                    CPU1
      [   12.704106]        ----                    ----
      [   12.704115]   lock(&iommu->lock);
      [   12.704123]                                local_irq_disable();
      [   12.704134]                                lock(device_domain_lock);
      [   12.704146]                                lock(&iommu->lock);
      [   12.704158]   <Interrupt>
      [   12.704164]     lock(device_domain_lock);
      [   12.704174]
                      *** DEADLOCK ***
      Signed-off-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
      Link: https://lore.kernel.org/r/20200927062428.13713-1-baolu.lu@linux.intel.com
      
      Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      f825fd53
    • Philip Yang's avatar
      drm/amdgpu: prevent double kfree ttm->sg · bdffb36b
      Philip Yang authored
      [ Upstream commit 1d0e16ac
      
       ]
      
      Set ttm->sg to NULL after kfree, to avoid memory corruption backtrace:
      
      [  420.932812] kernel BUG at
      /build/linux-do9eLF/linux-4.15.0/mm/slub.c:295!
      [  420.934182] invalid opcode: 0000 [#1] SMP NOPTI
      [  420.935445] Modules linked in: xt_conntrack ipt_MASQUERADE
      [  420.951332] Hardware name: Dell Inc. PowerEdge R7525/0PYVT1, BIOS
      1.5.4 07/09/2020
      [  420.952887] RIP: 0010:__slab_free+0x180/0x2d0
      [  420.954419] RSP: 0018:ffffbe426291fa60 EFLAGS: 00010246
      [  420.955963] RAX: ffff9e29263e9c30 RBX: ffff9e29263e9c30 RCX:
      000000018100004b
      [  420.957512] RDX: ffff9e29263e9c30 RSI: fffff3d33e98fa40 RDI:
      ffff9e297e407a80
      [  420.959055] RBP: ffffbe426291fb00 R08: 0000000000000001 R09:
      ffffffffc0d39ade
      [  420.960587] R10: ffffbe426291fb20 R11: ffff9e49ffdd4000 R12:
      ffff9e297e407a80
      [  420.962105] R13: fffff3d33e98fa40 R14: ffff9e29263e9c30 R15:
      ffff9e2954464fd8
      [  420.963611] FS:  00007fa2ea097780(0000) GS:ffff9e297e840000(0000)
      knlGS:0000000000000000
      [  420.965144] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  420.966663] CR2: 00007f16bfffefb8 CR3: 0000001ff0c62000 CR4:
      0000000000340ee0
      [  420.968193] Call Trace:
      [  420.969703]  ? __page_cache_release+0x3c/0x220
      [  420.971294]  ? amdgpu_ttm_tt_unpopulate+0x5e/0x80 [amdgpu]
      [  420.972789]  kfree+0x168/0x180
      [  420.974353]  ? amdgpu_ttm_tt_set_user_pages+0x64/0xc0 [amdgpu]
      [  420.975850]  ? kfree+0x168/0x180
      [  420.977403]  amdgpu_ttm_tt_unpopulate+0x5e/0x80 [amdgpu]
      [  420.978888]  ttm_tt_unpopulate.part.10+0x53/0x60 [amdttm]
      [  420.980357]  ttm_tt_destroy.part.11+0x4f/0x60 [amdttm]
      [  420.981814]  ttm_tt_destroy+0x13/0x20 [amdttm]
      [  420.983273]  ttm_bo_cleanup_memtype_use+0x36/0x80 [amdttm]
      [  420.984725]  ttm_bo_release+0x1c9/0x360 [amdttm]
      [  420.986167]  amdttm_bo_put+0x24/0x30 [amdttm]
      [  420.987663]  amdgpu_bo_unref+0x1e/0x30 [amdgpu]
      [  420.989165]  amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu+0x9ca/0xb10
      [amdgpu]
      [  420.990666]  kfd_ioctl_alloc_memory_of_gpu+0xef/0x2c0 [amdgpu]
      Signed-off-by: default avatarPhilip Yang <Philip.Yang@amd.com>
      Reviewed-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
      Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
      Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
      Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
      bdffb36b
    • Dumitru Ceara's avatar
      openvswitch: handle DNAT tuple collision · 4034664a
      Dumitru Ceara authored
      commit 8aa7b526 upstream.
      
      With multiple DNAT rules it's possible that after destination
      translation the resulting tuples collide.
      
      For example, two openvswitch flows:
      nw_dst=10.0.0.10,tp_dst=10, actions=ct(commit,table=2,nat(dst=20.0.0.1:20))
      nw_dst=10.0.0.20,tp_dst=10, actions=ct(commit,table=2,nat(dst=20.0.0.1:20))
      
      Assuming two TCP clients initiating the following connections:
      10.0.0.10:5000->10.0.0.10:10
      10.0.0.10:5000->10.0.0.20:10
      
      Both tuples would translate to 10.0.0.10:5000->20.0.0.1:20 causing
      nf_conntrack_confirm() to fail because of tuple collision.
      
      Netfilter handles this case by allocating a null binding for SNAT at
      egress by default.  Perform the same operation in openvswitch for DNAT
      if no explicit SNAT is requested by the user and allocate a null binding
      for SNAT for packets in the "original" direction.
      
      Reported-at: https://bugzilla.redhat.com/1877128
      
      Suggested-by: default avatarFlorian Westphal <fw@strlen.de>
      Fixes: 05752523
      
       ("openvswitch: Interface with NAT.")
      Signed-off-by: default avatarDumitru Ceara <dceara@redhat.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      4034664a
    • Anant Thazhemadam's avatar
      net: team: fix memory leak in __team_options_register · f89128ad
      Anant Thazhemadam authored
      commit 9a9e7749 upstream.
      
      The variable "i" isn't initialized back correctly after the first loop
      under the label inst_rollback gets executed.
      
      The value of "i" is assigned to be option_count - 1, and the ensuing
      loop (under alloc_rollback) begins by initializing i--.
      Thus, the value of i when the loop begins execution will now become
      i = option_count - 2.
      
      Thus, when kfree(dst_opts[i]) is called in the second loop in this
      order, (i.e., inst_rollback followed by alloc_rollback),
      dst_optsp[option_count - 2] is the first element freed, and
      dst_opts[option_count - 1] does not get freed, and thus, a memory
      leak is caused.
      
      This memory leak can be fixed, by assigning i = option_count (instead of
      option_count - 1).
      
      Fixes: 80f7c668
      
       ("team: add support for per-port options")
      Reported-by: syzbot+69b804437cfec30deac3@syzkaller.appspotmail.com
      Tested-by: syzbot+69b804437cfec30deac3@syzkaller.appspotmail.com
      Signed-off-by: default avatarAnant Thazhemadam <anant.thazhemadam@gmail.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      f89128ad
    • Eric Dumazet's avatar
      team: set dev->needed_headroom in team_setup_by_port() · 003269d8
      Eric Dumazet authored
      commit 89d01748 upstream.
      
      Some devices set needed_headroom. If we ignore it, we might
      end up crashing in various skb_push() for example in ipgre_header()
      since some layers assume enough headroom has been reserved.
      
      Fixes: 1d76efe1
      
       ("team: add support for non-ethernet devices")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      003269d8
    • Eric Dumazet's avatar
      sctp: fix sctp_auth_init_hmacs() error path · fb3681c2
      Eric Dumazet authored
      commit d42ee76e upstream.
      
      After freeing ep->auth_hmacs we have to clear the pointer
      or risk use-after-free as reported by syzbot:
      
      BUG: KASAN: use-after-free in sctp_auth_destroy_hmacs net/sctp/auth.c:509 [inline]
      BUG: KASAN: use-after-free in sctp_auth_destroy_hmacs net/sctp/auth.c:501 [inline]
      BUG: KASAN: use-after-free in sctp_auth_free+0x17e/0x1d0 net/sctp/auth.c:1070
      Read of size 8 at addr ffff8880a8ff52c0 by task syz-executor941/6874
      
      CPU: 0 PID: 6874 Comm: syz-executor941 Not tainted 5.9.0-rc8-syzkaller #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      Call Trace:
       __dump_stack lib/dump_stack.c:77 [inline]
       dump_stack+0x198/0x1fd lib/dump_stack.c:118
       print_address_description.constprop.0.cold+0xae/0x497 mm/kasan/report.c:383
       __kasan_report mm/kasan/report.c:513 [inline]
       kasan_report.cold+0x1f/0x37 mm/kasan/report.c:530
       sctp_auth_destroy_hmacs net/sctp/auth.c:509 [inline]
       sctp_auth_destroy_hmacs net/sctp/auth.c:501 [inline]
       sctp_auth_free+0x17e/0x1d0 net/sctp/auth.c:1070
       sctp_endpoint_destroy+0x95/0x240 net/sctp/endpointola.c:203
       sctp_endpoint_put net/sctp/endpointola.c:236 [inline]
       sctp_endpoint_free+0xd6/0x110 net/sctp/endpointola.c:183
       sctp_destroy_sock+0x9c/0x3c0 net/sctp/socket.c:4981
       sctp_v6_destroy_sock+0x11/0x20 net/sctp/socket.c:9415
       sk_common_release+0x64/0x390 net/core/sock.c:3254
       sctp_close+0x4ce/0x8b0 net/sctp/socket.c:1533
       inet_release+0x12e/0x280 net/ipv4/af_inet.c:431
       inet6_release+0x4c/0x70 net/ipv6/af_inet6.c:475
       __sock_release+0xcd/0x280 net/socket.c:596
       sock_close+0x18/0x20 net/socket.c:1277
       __fput+0x285/0x920 fs/file_table.c:281
       task_work_run+0xdd/0x190 kernel/task_work.c:141
       exit_task_work include/linux/task_work.h:25 [inline]
       do_exit+0xb7d/0x29f0 kernel/exit.c:806
       do_group_exit+0x125/0x310 kernel/exit.c:903
       __do_sys_exit_group kernel/exit.c:914 [inline]
       __se_sys_exit_group kernel/exit.c:912 [inline]
       __x64_sys_exit_group+0x3a/0x50 kernel/exit.c:912
       do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
       entry_SYSCALL_64_after_hwframe+0x44/0xa9
      RIP: 0033:0x43f278
      Code: Bad RIP value.
      RSP: 002b:00007fffe0995c38 EFLAGS: 00000246 ORIG_RAX: 00000000000000e7
      RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 000000000043f278
      RDX: 0000000000000000 RSI: 000000000000003c RDI: 0000000000000000
      RBP: 00000000004bf068 R08: 00000000000000e7 R09: ffffffffffffffd0
      R10: 0000000020000000 R11: 0000000000000246 R12: 0000000000000001
      R13: 00000000006d1180 R14: 0000000000000000 R15: 0000000000000000
      
      Allocated by task 6874:
       kasan_save_stack+0x1b/0x40 mm/kasan/common.c:48
       kasan_set_track mm/kasan/common.c:56 [inline]
       __kasan_kmalloc.constprop.0+0xbf/0xd0 mm/kasan/common.c:461
       kmem_cache_alloc_trace+0x174/0x300 mm/slab.c:3554
       kmalloc include/linux/slab.h:554 [inline]
       kmalloc_array include/linux/slab.h:593 [inline]
       kcalloc include/linux/slab.h:605 [inline]
       sctp_auth_init_hmacs+0xdb/0x3b0 net/sctp/auth.c:464
       sctp_auth_init+0x8a/0x4a0 net/sctp/auth.c:1049
       sctp_setsockopt_auth_supported net/sctp/socket.c:4354 [inline]
       sctp_setsockopt+0x477e/0x97f0 net/sctp/socket.c:4631
       __sys_setsockopt+0x2db/0x610 net/socket.c:2132
       __do_sys_setsockopt net/socket.c:2143 [inline]
       __se_sys_setsockopt net/socket.c:2140 [inline]
       __x64_sys_setsockopt+0xba/0x150 net/socket.c:2140
       do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
       entry_SYSCALL_64_after_hwframe+0x44/0xa9
      
      Freed by task 6874:
       kasan_save_stack+0x1b/0x40 mm/kasan/common.c:48
       kasan_set_track+0x1c/0x30 mm/kasan/common.c:56
       kasan_set_free_info+0x1b/0x30 mm/kasan/generic.c:355
       __kasan_slab_free+0xd8/0x120 mm/kasan/common.c:422
       __cache_free mm/slab.c:3422 [inline]
       kfree+0x10e/0x2b0 mm/slab.c:3760
       sctp_auth_destroy_hmacs net/sctp/auth.c:511 [inline]
       sctp_auth_destroy_hmacs net/sctp/auth.c:501 [inline]
       sctp_auth_init_hmacs net/sctp/auth.c:496 [inline]
       sctp_auth_init_hmacs+0x2b7/0x3b0 net/sctp/auth.c:454
       sctp_auth_init+0x8a/0x4a0 net/sctp/auth.c:1049
       sctp_setsockopt_auth_supported net/sctp/socket.c:4354 [inline]
       sctp_setsockopt+0x477e/0x97f0 net/sctp/socket.c:4631
       __sys_setsockopt+0x2db/0x610 net/socket.c:2132
       __do_sys_setsockopt net/socket.c:2143 [inline]
       __se_sys_setsockopt net/socket.c:2140 [inline]
       __x64_sys_setsockopt+0xba/0x150 net/socket.c:2140
       do_syscall_64+0x2d/0x70 arch/x86/entry/common.c:46
       entry_SYSCALL_64_after_hwframe+0x44/0xa9
      
      Fixes: 1f485649
      
       ("[SCTP]: Implement SCTP-AUTH internals")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Cc: Vlad Yasevich <vyasevich@gmail.com>
      Cc: Neil Horman <nhorman@tuxdriver.com>
      Cc: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
      Acked-by: default avatarMarcelo Ricardo Leitner <marcelo.leitner@gmail.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fb3681c2
    • Cristian Ciocaltea's avatar
      i2c: owl: Clear NACK and BUS error bits · 040e3110
      Cristian Ciocaltea authored
      commit f5b3f433 upstream.
      
      When the NACK and BUS error bits are set by the hardware, the driver is
      responsible for clearing them by writing "1" into the corresponding
      status registers.
      
      Hence perform the necessary operations in owl_i2c_interrupt().
      
      Fixes: d211e62a
      
       ("i2c: Add Actions Semiconductor Owl family S900 I2C driver")
      Reported-by: default avatarManivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
      Signed-off-by: default avatarCristian Ciocaltea <cristian.ciocaltea@gmail.com>
      Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      040e3110
    • Nicolas Belin's avatar
      i2c: meson: fixup rate calculation with filter delay · abe997f6
      Nicolas Belin authored
      commit 1334d3b4 upstream.
      
      Apparently, 15 cycles of the peripheral clock are used by the controller
      for sampling and filtering. Because this was not known before, the rate
      calculation is slightly off.
      
      Clean up and fix the calculation taking this filtering delay into account.
      
      Fixes: 30021e37
      
       ("i2c: add support for Amlogic Meson I2C controller")
      Signed-off-by: default avatarNicolas Belin <nbelin@baylibre.com>
      Signed-off-by: default avatarJerome Brunet <jbrunet@baylibre.com>
      Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      abe997f6
    • Jerome Brunet's avatar
      i2c: meson: fix clock setting overwrite · 6db69c39
      Jerome Brunet authored
      commit 28683e84 upstream.
      
      When the slave address is written in do_start(), SLAVE_ADDR is written
      completely. This may overwrite some setting related to the clock rate
      or signal filtering.
      
      Fix this by writing only the bits related to slave address. To avoid
      causing unexpected changed, explicitly disable filtering or high/low
      clock mode which may have been left over by the bootloader.
      
      Fixes: 30021e37
      
       ("i2c: add support for Amlogic Meson I2C controller")
      Signed-off-by: default avatarJerome Brunet <jbrunet@baylibre.com>
      Signed-off-by: default avatarWolfram Sang <wsa@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      6db69c39
    • Vladimir Zapolskiy's avatar
      cifs: Fix incomplete memory allocation on setxattr path · 209549c1
      Vladimir Zapolskiy authored
      commit 64b7f674 upstream.
      
      On setxattr() syscall path due to an apprent typo the size of a dynamically
      allocated memory chunk for storing struct smb2_file_full_ea_info object is
      computed incorrectly, to be more precise the first addend is the size of
      a pointer instead of the wanted object size. Coincidentally it makes no
      difference on 64-bit platforms, however on 32-bit targets the following
      memcpy() writes 4 bytes of data outside of the dynamically allocated memory.
      
        =============================================================================
        BUG kmalloc-16 (Not tainted): Redzone overwritten
        -----------------------------------------------------------------------------
      
        Disabling lock debugging due to kernel taint
        INFO: 0x79e69a6f-0x9e5cdecf @offset=368. First byte 0x73 instead of 0xcc
        INFO: Slab 0xd36d2454 objects=85 used=51 fp=0xf7d0fc7a flags=0x35000201
        INFO: Object 0x6f171df3 @offset=352 fp=0x00000000
      
        Redzone 5d4ff02d: cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc cc  ................
        Object 6f171df3: 00 00 00 00 00 05 06 00 73 6e 72 75 62 00 66 69  ........snrub.fi
        Redzone 79e69a6f: 73 68 32 0a                                      sh2.
        Padding 56254d82: 5a 5a 5a 5a 5a 5a 5a 5a                          ZZZZZZZZ
        CPU: 0 PID: 8196 Comm: attr Tainted: G    B             5.9.0-rc8+ #3
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1 04/01/2014
        Call Trace:
         dump_stack+0x54/0x6e
         print_trailer+0x12c/0x134
         check_bytes_and_report.cold+0x3e/0x69
         check_object+0x18c/0x250
         free_debug_processing+0xfe/0x230
         __slab_free+0x1c0/0x300
         kfree+0x1d3/0x220
         smb2_set_ea+0x27d/0x540
         cifs_xattr_set+0x57f/0x620
         __vfs_setxattr+0x4e/0x60
         __vfs_setxattr_noperm+0x4e/0x100
         __vfs_setxattr_locked+0xae/0xd0
         vfs_setxattr+0x4e/0xe0
         setxattr+0x12c/0x1a0
         path_setxattr+0xa4/0xc0
         __ia32_sys_lsetxattr+0x1d/0x20
         __do_fast_syscall_32+0x40/0x70
         do_fast_syscall_32+0x29/0x60
         do_SYSENTER_32+0x15/0x20
         entry_SYSENTER_32+0x9f/0xf2
      
      Fixes: 5517554e
      
       ("cifs: Add support for writing attributes on SMB2+")
      Signed-off-by: default avatarVladimir Zapolskiy <vladimir@tuxera.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      209549c1
    • Sabrina Dubroca's avatar
      xfrmi: drop ignore_df check before updating pmtu · 0afdda28
      Sabrina Dubroca authored
      commit 45a36a18 upstream.
      
      xfrm interfaces currently test for !skb->ignore_df when deciding
      whether to update the pmtu on the skb's dst. Because of this, no pmtu
      exception is created when we do something like:
      
          ping -s 1438 <dest>
      
      By dropping this check, the pmtu exception will be created and the
      next ping attempt will work.
      
      Fixes: f203b76d
      
       ("xfrm: Add virtual xfrm interfaces")
      Reported-by: default avatarXiumei Mu <xmu@redhat.com>
      Signed-off-by: default avatarSabrina Dubroca <sd@queasysnail.net>
      Signed-off-by: default avatarSteffen Klassert <steffen.klassert@secunet.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0afdda28
    • Coly Li's avatar
      nvme-tcp: check page by sendpage_ok() before calling kernel_sendpage() · 49af88ac
      Coly Li authored
      commit 7d4194ab
      
       upstream.
      
      Currently nvme_tcp_try_send_data() doesn't use kernel_sendpage() to
      send slab pages. But for pages allocated by __get_free_pages() without
      __GFP_COMP, which also have refcount as 0, they are still sent by
      kernel_sendpage() to remote end, this is problematic.
      
      The new introduced helper sendpage_ok() checks both PageSlab tag and
      page_count counter, and returns true if the checking page is OK to be
      sent by kernel_sendpage().
      
      This patch fixes the page checking issue of nvme_tcp_try_send_data()
      with sendpage_ok(). If sendpage_ok() returns true, send this page by
      kernel_sendpage(), otherwise use sock_no_sendpage to handle this page.
      Signed-off-by: default avatarColy Li <colyli@suse.de>
      Cc: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Hannes Reinecke <hare@suse.de>
      Cc: Jan Kara <jack@suse.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Mikhail Skorzhinskii <mskorzhinskiy@solarflare.com>
      Cc: Philipp Reisner <philipp.reisner@linbit.com>
      Cc: Sagi Grimberg <sagi@grimberg.me>
      Cc: Vlastimil Babka <vbabka@suse.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      49af88ac
    • Coly Li's avatar
      tcp: use sendpage_ok() to detect misused .sendpage · 15cac17d
      Coly Li authored
      commit cf83a17e upstream.
      
      commit a10674bf ("tcp: detecting the misuse of .sendpage for Slab
      objects") adds the checks for Slab pages, but the pages don't have
      page_count are still missing from the check.
      
      Network layer's sendpage method is not designed to send page_count 0
      pages neither, therefore both PageSlab() and page_count() should be
      both checked for the sending page. This is exactly what sendpage_ok()
      does.
      
      This patch uses sendpage_ok() in do_tcp_sendpages() to detect misused
      .sendpage, to make the code more robust.
      
      Fixes: a10674bf
      
       ("tcp: detecting the misuse of .sendpage for Slab objects")
      Suggested-by: default avatarEric Dumazet <eric.dumazet@gmail.com>
      Signed-off-by: default avatarColy Li <colyli@suse.de>
      Cc: Vasily Averin <vvs@virtuozzo.com>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      15cac17d
    • Coly Li's avatar
      net: introduce helper sendpage_ok() in include/linux/net.h · d23dd386
      Coly Li authored
      commit c381b079
      
       upstream.
      
      The original problem was from nvme-over-tcp code, who mistakenly uses
      kernel_sendpage() to send pages allocated by __get_free_pages() without
      __GFP_COMP flag. Such pages don't have refcount (page_count is 0) on
      tail pages, sending them by kernel_sendpage() may trigger a kernel panic
      from a corrupted kernel heap, because these pages are incorrectly freed
      in network stack as page_count 0 pages.
      
      This patch introduces a helper sendpage_ok(), it returns true if the
      checking page,
      - is not slab page: PageSlab(page) is false.
      - has page refcount: page_count(page) is not zero
      
      All drivers who want to send page to remote end by kernel_sendpage()
      may use this helper to check whether the page is OK. If the helper does
      not return true, the driver should try other non sendpage method (e.g.
      sock_no_sendpage()) to handle the page.
      Signed-off-by: default avatarColy Li <colyli@suse.de>
      Cc: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
      Cc: Christoph Hellwig <hch@lst.de>
      Cc: Hannes Reinecke <hare@suse.de>
      Cc: Jan Kara <jack@suse.com>
      Cc: Jens Axboe <axboe@kernel.dk>
      Cc: Mikhail Skorzhinskii <mskorzhinskiy@solarflare.com>
      Cc: Philipp Reisner <philipp.reisner@linbit.com>
      Cc: Sagi Grimberg <sagi@grimberg.me>
      Cc: Vlastimil Babka <vbabka@suse.com>
      Cc: stable@vger.kernel.org
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      d23dd386
    • Hugh Dickins's avatar
      mm/khugepaged: fix filemap page_to_pgoff(page) != offset · 5c62d335
      Hugh Dickins authored
      commit 033b5d77
      
       upstream.
      
      There have been elusive reports of filemap_fault() hitting its
      VM_BUG_ON_PAGE(page_to_pgoff(page) != offset, page) on kernels built
      with CONFIG_READ_ONLY_THP_FOR_FS=y.
      
      Suren has hit it on a kernel with CONFIG_READ_ONLY_THP_FOR_FS=y and
      CONFIG_NUMA is not set: and he has analyzed it down to how khugepaged
      without NUMA reuses the same huge page after collapse_file() failed
      (whereas NUMA targets its allocation to the respective node each time).
      And most of us were usually testing with CONFIG_NUMA=y kernels.
      
      collapse_file(old start)
        new_page = khugepaged_alloc_page(hpage)
        __SetPageLocked(new_page)
        new_page->index = start // hpage->index=old offset
        new_page->mapping = mapping
        xas_store(&xas, new_page)
      
                                filemap_fault
                                  page = find_get_page(mapping, offset)
                                  // if offset falls inside hpage then
                                  // compound_head(page) == hpage
                                  lock_page_maybe_drop_mmap()
                                    __lock_page(page)
      
        // collapse fails
        xas_store(&xas, old page)
        new_page->mapping = NULL
        unlock_page(new_page)
      
      collapse_file(new start)
        new_page = khugepaged_alloc_page(hpage)
        __SetPageLocked(new_page)
        new_page->index = start // hpage->index=new offset
        new_page->mapping = mapping // mapping becomes valid again
      
                                  // since compound_head(page) == hpage
                                  // page_to_pgoff(page) got changed
                                  VM_BUG_ON_PAGE(page_to_pgoff(page) != offset)
      
      An initial patch replaced __SetPageLocked() by lock_page(), which did
      fix the race which Suren illustrates above.  But testing showed that it's
      not good enough: if the racing task's __lock_page() gets delayed long
      after its find_get_page(), then it may follow collapse_file(new start)'s
      successful final unlock_page(), and crash on the same VM_BUG_ON_PAGE.
      
      It could be fixed by relaxing filemap_fault()'s VM_BUG_ON_PAGE to a
      check and retry (as is done for mapping), with similar relaxations in
      find_lock_entry() and pagecache_get_page(): but it's not obvious what
      else might get caught out; and khugepaged non-NUMA appears to be unique
      in exposing a page to page cache, then revoking, without going through
      a full cycle of freeing before reuse.
      
      Instead, non-NUMA khugepaged_prealloc_page() release the old page
      if anyone else has a reference to it (1% of cases when I tested).
      
      Although never reported on huge tmpfs, I believe its find_lock_entry()
      has been at similar risk; but huge tmpfs does not rely on khugepaged
      for its normal working nearly so much as READ_ONLY_THP_FOR_FS does.
      Reported-by: default avatarDenis Lisov <dennis.lissov@gmail.com>
      Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=206569
      Link: https://lore.kernel.org/linux-mm/?q=20200219144635.3b7417145de19b65f258c943%40linux-foundation.org
      
      Reported-by: default avatarQian Cai <cai@lca.pw>
      Link: https://lore.kernel.org/linux-xfs/?q=20200616013309.GB815%40lca.pw
      
      Reported-and-analyzed-by: default avatarSuren Baghdasaryan <surenb@google.com>
      Fixes: 87c460a0
      
       ("mm/khugepaged: collapse_shmem() without freezing new_page")
      Signed-off-by: default avatarHugh Dickins <hughd@google.com>
      Cc: stable@vger.kernel.org # v4.9+
      Reviewed-by: default avatarMatthew Wilcox (Oracle) <willy@infradead.org>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5c62d335
    • Eric Dumazet's avatar
      macsec: avoid use-after-free in macsec_handle_frame() · 1317469f
      Eric Dumazet authored
      commit c7cc9200 upstream.
      
      De-referencing skb after call to gro_cells_receive() is not allowed.
      We need to fetch skb->len earlier.
      
      Fixes: 5491e7c6
      
       ("macsec: enable GRO and RPS on macsec devices")
      Signed-off-by: default avatarEric Dumazet <edumazet@google.com>
      Cc: Paolo Abeni <pabeni@redhat.com>
      Acked-by: default avatarPaolo Abeni <pabeni@redhat.com>
      Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      1317469f
    • Chaitanya Kulkarni's avatar
      nvme-core: put ctrl ref when module ref get fail · 20f96fee
      Chaitanya Kulkarni authored
      commit 4bab6909 upstream.
      
      When try_module_get() fails in the nvme_dev_open() it returns without
      releasing the ctrl reference which was taken earlier.
      
      Put the ctrl reference which is taken before calling the
      try_module_get() in the error return code path.
      
      Fixes: 52a3974f
      
       "nvme-core: get/put ctrl and transport module in nvme_dev_open/release()"
      Signed-off-by: default avatarChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
      Reviewed-by: default avatarLogan Gunthorpe <logang@deltatee.com>
      Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      20f96fee