1. 20 Nov, 2013 8 commits
    • Jack Morgenstein's avatar
      net/mlx4_core: Fix call to __mlx4_unregister_mac · 5bf90657
      Jack Morgenstein authored
      [ Upstream commit c32b7dfb ]
      
      In function mlx4_master_deactivate_admin_state() __mlx4_unregister_mac was
      called using the MAC index. It should be called with the value of the MAC itself.
      Signed-off-by: default avatarJack Morgenstein <jackm@dev.mellanox.co.il>
      Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      5bf90657
    • Jason Wang's avatar
      net: flow_dissector: fail on evil iph->ihl · 666a76c7
      Jason Wang authored
      [ Upstream commit 6f092343 ]
      
      We don't validate iph->ihl which may lead a dead loop if we meet a IPIP
      skb whose iph->ihl is zero. Fix this by failing immediately when iph->ihl
      is evil (less than 5).
      
      This issue were introduced by commit ec5efe79
      (rps: support IPIP encapsulation).
      Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
      Cc: Eric Dumazet <edumazet@google.com>
      Cc: Petr Matousek <pmatouse@redhat.com>
      Cc: Michael S. Tsirkin <mst@redhat.com>
      Cc: Daniel Borkmann <dborkman@redhat.com>
      Acked-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>
      666a76c7
    • Jason Wang's avatar
      virtio-net: correctly handle cpu hotplug notifier during resuming · 69ce0106
      Jason Wang authored
      [ Upstream commit ec9debbd ]
      
      commit 3ab098df (virtio-net: don't respond to
      cpu hotplug notifier if we're not ready) tries to bypass the cpu hotplug
      notifier by checking the config_enable and does nothing is it was false. So it
      need to try to hold the config_lock mutex which may happen in atomic
      environment which leads the following warnings:
      
      [  622.944441] CPU0 attaching NULL sched-domain.
      [  622.944446] CPU1 attaching NULL sched-domain.
      [  622.944485] CPU0 attaching NULL sched-domain.
      [  622.950795] BUG: sleeping function called from invalid context at kernel/mutex.c:616
      [  622.950796] in_atomic(): 1, irqs_disabled(): 1, pid: 10, name: migration/1
      [  622.950796] no locks held by migration/1/10.
      [  622.950798] CPU: 1 PID: 10 Comm: migration/1 Not tainted 3.12.0-rc5-wl-01249-gb91e82d #317
      [  622.950799] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
      [  622.950802]  0000000000000000 ffff88001d42dba0 ffffffff81a32f22 ffff88001bfb9c70
      [  622.950803]  ffff88001d42dbb0 ffffffff810edb02 ffff88001d42dc38 ffffffff81a396ed
      [  622.950805]  0000000000000046 ffff88001d42dbe8 ffffffff810e861d 0000000000000000
      [  622.950805] Call Trace:
      [  622.950810]  [<ffffffff81a32f22>] dump_stack+0x54/0x74
      [  622.950815]  [<ffffffff810edb02>] __might_sleep+0x112/0x114
      [  622.950817]  [<ffffffff81a396ed>] mutex_lock_nested+0x3c/0x3c6
      [  622.950818]  [<ffffffff810e861d>] ? up+0x39/0x3e
      [  622.950821]  [<ffffffff8153ea7c>] ? acpi_os_signal_semaphore+0x21/0x2d
      [  622.950824]  [<ffffffff81565ed1>] ? acpi_ut_release_mutex+0x5e/0x62
      [  622.950828]  [<ffffffff816d04ec>] virtnet_cpu_callback+0x33/0x87
      [  622.950830]  [<ffffffff81a42576>] notifier_call_chain+0x3c/0x5e
      [  622.950832]  [<ffffffff810e86a8>] __raw_notifier_call_chain+0xe/0x10
      [  622.950835]  [<ffffffff810c5556>] __cpu_notify+0x20/0x37
      [  622.950836]  [<ffffffff810c5580>] cpu_notify+0x13/0x15
      [  622.950838]  [<ffffffff81a237cd>] take_cpu_down+0x27/0x3a
      [  622.950841]  [<ffffffff81136289>] stop_machine_cpu_stop+0x93/0xf1
      [  622.950842]  [<ffffffff81136167>] cpu_stopper_thread+0xa0/0x12f
      [  622.950844]  [<ffffffff811361f6>] ? cpu_stopper_thread+0x12f/0x12f
      [  622.950847]  [<ffffffff81119710>] ? lock_release_holdtime.part.7+0xa3/0xa8
      [  622.950848]  [<ffffffff81135e4b>] ? cpu_stop_should_run+0x3f/0x47
      [  622.950850]  [<ffffffff810ea9b0>] smpboot_thread_fn+0x1c5/0x1e3
      [  622.950852]  [<ffffffff810ea7eb>] ? lg_global_unlock+0x67/0x67
      [  622.950854]  [<ffffffff810e36b7>] kthread+0xd8/0xe0
      [  622.950857]  [<ffffffff81a3bfad>] ? wait_for_common+0x12f/0x164
      [  622.950859]  [<ffffffff810e35df>] ? kthread_create_on_node+0x124/0x124
      [  622.950861]  [<ffffffff81a45ffc>] ret_from_fork+0x7c/0xb0
      [  622.950862]  [<ffffffff810e35df>] ? kthread_create_on_node+0x124/0x124
      [  622.950876] smpboot: CPU 1 is now offline
      [  623.194556] SMP alternatives: lockdep: fixing up alternatives
      [  623.194559] smpboot: Booting Node 0 Processor 1 APIC 0x1
      ...
      
      A correct fix is to unregister the hotcpu notifier during restore and register a
      new one in resume.
      Reported-by: default avatarFengguang Wu <fengguang.wu@intel.com>
      Tested-by: default avatarFengguang Wu <fengguang.wu@intel.com>
      Cc: Wanlong Gao <gaowanlong@cn.fujitsu.com>
      Cc: Rusty Russell <rusty@rustcorp.com.au>
      Cc: Michael S. Tsirkin <mst@redhat.com>
      Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
      Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
      Reviewed-by: default avatarWanlong Gao <gaowanlong@cn.fujitsu.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      69ce0106
    • Wei Liu's avatar
      xen-netback: use jiffies_64 value to calculate credit timeout · fb1494fa
      Wei Liu authored
      [ Upstream commit 059dfa6a ]
      
      time_after_eq() only works if the delta is < MAX_ULONG/2.
      
      For a 32bit Dom0, if netfront sends packets at a very low rate, the time
      between subsequent calls to tx_credit_exceeded() may exceed MAX_ULONG/2
      and the test for timer_after_eq() will be incorrect. Credit will not be
      replenished and the guest may become unable to send packets (e.g., if
      prior to the long gap, all credit was exhausted).
      
      Use jiffies_64 variant to mitigate this problem for 32bit Dom0.
      Suggested-by: default avatarJan Beulich <jbeulich@suse.com>
      Signed-off-by: default avatarWei Liu <wei.liu2@citrix.com>
      Reviewed-by: default avatarDavid Vrabel <david.vrabel@citrix.com>
      Cc: Ian Campbell <ian.campbell@citrix.com>
      Cc: Jason Luan <jianhai.luan@oracle.com>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      fb1494fa
    • Ben Hutchings's avatar
      cxgb3: Fix length calculation in write_ofld_wr() on 32-bit architectures · 0b5be496
      Ben Hutchings authored
      [ Upstream commit 262e827f ]
      
      The length calculation here is now invalid on 32-bit architectures,
      since sk_buff::tail is a pointer and sk_buff::transport_header is
      an integer offset:
      
      drivers/net/ethernet/chelsio/cxgb3/sge.c: In function 'write_ofld_wr':
      drivers/net/ethernet/chelsio/cxgb3/sge.c:1603:9: warning: passing argument 4 of 'make_sgl' makes integer from pointer without a cast [enabled by default]
               adap->pdev);
               ^
      drivers/net/ethernet/chelsio/cxgb3/sge.c:964:28: note: expected 'unsigned int' but argument is of type 'sk_buff_data_t'
       static inline unsigned int make_sgl(const struct sk_buff *skb,
                                  ^
      
      Use the appropriate skb accessor functions.
      
      Compile-tested only.
      Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
      Fixes: 1a37e412 ('net: Use 16bits for *_headers fields of struct skbuff')
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0b5be496
    • Hannes Frederic Sowa's avatar
      ipv6: reset dst.expires value when clearing expire flag · 262eb452
      Hannes Frederic Sowa authored
      [ Upstream commit 01ba16d6 ]
      
      On receiving a packet too big icmp error we update the expire value by
      calling rt6_update_expires. This function uses dst_set_expires which is
      implemented that it can only reduce the expiration value of the dst entry.
      
      If we insert new routing non-expiry information into the ipv6 fib where
      we already have a matching rt6_info we only clear the RTF_EXPIRES flag
      in rt6i_flags and leave the dst.expires value as is.
      
      When new mtu information arrives for that cached dst_entry we again
      call dst_set_expires. This time it won't update the dst.expire value
      because we left the dst.expire value intact from the last update. So
      dst_set_expires won't touch dst.expires.
      
      Fix this by resetting dst.expires when clearing the RTF_EXPIRE flag.
      dst_set_expires checks for a zero expiration and updates the
      dst.expires.
      
      In the past this (not updating dst.expires) was necessary because
      dst.expire was placed in a union with the dst_entry *from reference
      and rt6_clean_expires did assign NULL to it. This split happend in
      ecd98837 ("ipv6: fix race condition
      regarding dst->expires and dst->from").
      Reported-by: default avatarSteinar H. Gunderson <sgunderson@bigfoot.com>
      Reported-by: default avatarValentijn Sessink <valentyn@blub.net>
      Cc: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
      Acked-by: default avatarEric Dumazet <edumazet@google.com>
      Tested-by: default avatarValentijn Sessink <valentyn@blub.net>
      Signed-off-by: default avatarHannes Frederic Sowa <hannes@stressinduktion.org>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      262eb452
    • Hannes Frederic Sowa's avatar
      ipv6: ip6_dst_check needs to check for expired dst_entries · 8ffff756
      Hannes Frederic Sowa authored
      [ Upstream commit e3bc10bd ]
      
      On receiving a packet too big icmp error we check if our current cached
      dst_entry in the socket is still valid. This validation check did not
      care about the expiration of the (cached) route.
      
      The error path I traced down:
      The socket receives a packet too big mtu notification. It still has a
      valid dst_entry and thus issues the ip6_rt_pmtu_update on this dst_entry,
      setting RTF_EXPIRE and updates the dst.expiration value (which could
      fail because of not up-to-date expiration values, see previous patch).
      
      In some seldom cases we race with a) the ip6_fib gc or b) another routing
      lookup which would result in a recreation of the cached rt6_info from its
      parent non-cached rt6_info. While copying the rt6_info we reinitialize the
      metrics store by copying it over from the parent thus invalidating the
      just installed pmtu update (both dsts use the same key to the inetpeer
      storage). The dst_entry with the just invalidated metrics data would
      just get its RTF_EXPIRES flag cleared and would continue to stay valid
      for the socket.
      
      We should have not issued the pmtu update on the already expired dst_entry
      in the first placed. By checking the expiration on the dst entry and
      doing a relookup in case it is out of date we close the race because
      we would install a new rt6_info into the fib before we issue the pmtu
      update, thus closing this race.
      
      Not reliably updating the dst.expire value was fixed by the patch "ipv6:
      reset dst.expires value when clearing expire flag".
      Reported-by: default avatarSteinar H. Gunderson <sgunderson@bigfoot.com>
      Reported-by: default avatarValentijn Sessink <valentyn@blub.net>
      Cc: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
      Signed-off-by: default avatarHannes Frederic Sowa <hannes@stressinduktion.org>
      Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
      Tested-by: default avatarValentijn Sessink <valentyn@blub.net>
      Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8ffff756
    • Pravin B Shelar's avatar
      ip_gre: Fix WCCPv2 header parsing. · b9099fea
      Pravin B Shelar authored
      [ No applicable upstream commit, the upstream implementation is
        now completely different and doesn't have this bug. ]
      
      In case of WCCPv2 GRE header has extra four bytes.  Following
      patch pull those extra four bytes so that skb offsets are set
      correctly.
      
      CC: Eric Dumazet <eric.dumazet@gmail.com>
      Reported-by: default avatarPeter Schmitt <peter.schmitt82@yahoo.de>
      Tested-by: default avatarPeter Schmitt <peter.schmitt82@yahoo.de>
      Signed-off-by: default avatarPravin B Shelar <pshelar@nicira.com>
      Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      b9099fea
  2. 13 Nov, 2013 32 commits