23 May, 2014

2 commits

  • In commit 61b905da33 ("net: Rename skb->rxhash to skb->hash"), skb->rxhash
    was renamed to skb->hash. Update references in Documentation
    accordingly.

    Signed-off-by: Tobias Klauser
    Acked-by: Daniel Borkmann
    Signed-off-by: David S. Miller

    Tobias Klauser
     
  • The stmmac_open call was calling clk_disable_unprepare on phy init
    failure, but it never calls clk_prepare_enable, this causes
    a WARN_ON in the clk framework to trigger if for some reason phy init
    fails.

    Signed-off-by: Hans de Goede
    Acked-by: Giuseppe Cavallaro
    Acked-by: Chen-Yu Tsai
    Signed-off-by: David S. Miller

    Hans de Goede
     

22 May, 2014

2 commits

  • When GRE support was added in linux-3.14, CHECKSUM_COMPLETE handling
    broke on GRE+IPv6 because we did not update/use the appropriate csum :

    GRO layer is supposed to use/update NAPI_GRO_CB(skb)->csum instead of
    skb->csum

    Tested using a GRE tunnel and IPv6 traffic. GRO aggregation now happens
    at the first level (ethernet device) instead of being done in gre
    tunnel. Native IPv6+TCP is still properly aggregated.

    Fixes: bf5a755f5e918 ("net-gre-gro: Add GRE support to the GRO stack")
    Signed-off-by: Eric Dumazet
    Cc: Jerry Chu
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • Kelly reported the following crash:

    IP: [] tcf_action_exec+0x46/0x90
    PGD 3009067 PUD 300c067 PMD 11ff30067 PTE 800000011634b060
    Oops: 0000 [#1] SMP DEBUG_PAGEALLOC
    CPU: 1 PID: 639 Comm: dhclient Not tainted 3.15.0-rc4+ #342
    Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    task: ffff8801169ecd00 ti: ffff8800d21b8000 task.ti: ffff8800d21b8000
    RIP: 0010:[] [] tcf_action_exec+0x46/0x90
    RSP: 0018:ffff8800d21b9b90 EFLAGS: 00010283
    RAX: 00000000ffffffff RBX: ffff88011634b8e8 RCX: ffff8800cf7133d8
    RDX: ffff88011634b900 RSI: ffff8800cf7133e0 RDI: ffff8800d210f840
    RBP: ffff8800d21b9bb0 R08: ffffffff8287bf60 R09: 0000000000000001
    R10: ffff8800d2b22b24 R11: 0000000000000001 R12: ffff8800d210f840
    R13: ffff8800d21b9c50 R14: ffff8800cf7133e0 R15: ffff8800cad433d8
    FS: 00007f49723e1840(0000) GS:ffff88011a800000(0000) knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: ffff88011634b8f0 CR3: 00000000ce469000 CR4: 00000000000006e0
    Stack:
    ffff8800d2170188 ffff8800d210f840 ffff8800d2171b90 0000000000000000
    ffff8800d21b9be8 ffffffff817c55bb ffff8800d21b9c50 ffff8800d2171b90
    ffff8800d210f840 ffff8800d21b0300 ffff8800d21b9c50 ffff8800d21b9c18
    Call Trace:
    [] tcindex_classify+0x88/0x9b
    [] tc_classify_compat+0x3e/0x7b
    [] tc_classify+0x25/0x9f
    [] htb_enqueue+0x55/0x27a
    [] dsmark_enqueue+0x165/0x1a4
    [] __dev_queue_xmit+0x35e/0x536
    [] dev_queue_xmit+0x10/0x12
    [] packet_sendmsg+0xb26/0xb9a
    [] ? __lock_acquire+0x3ae/0xdf3
    [] __sock_sendmsg_nosec+0x25/0x27
    [] sock_aio_write+0xd0/0xe7
    [] do_sync_write+0x59/0x78
    [] vfs_write+0xb5/0x10a
    [] SyS_write+0x49/0x7f
    [] system_call_fastpath+0x16/0x1b

    This is because we memcpy struct tcindex_filter_result which contains
    struct tcf_exts, obviously struct list_head can not be simply copied.
    This is a regression introduced by commit 33be627159913b094bb578
    (net_sched: act: use standard struct list_head).

    It's not very easy to fix it as the code is a mess:

    if (old_r)
    memcpy(&cr, r, sizeof(cr));
    else {
    memset(&cr, 0, sizeof(cr));
    tcf_exts_init(&cr.exts, TCA_TCINDEX_ACT, TCA_TCINDEX_POLICE);
    }
    ...
    tcf_exts_change(tp, &cr.exts, &e);
    ...
    memcpy(r, &cr, sizeof(cr));

    the above code should equal to:

    tcindex_filter_result_init(&cr);
    if (old_r)
    cr.res = r->res;
    ...
    if (old_r)
    tcf_exts_change(tp, &r->exts, &e);
    else
    tcf_exts_change(tp, &cr.exts, &e);
    ...
    r->res = cr.res;

    after this change, since there is no need to copy struct tcf_exts.

    And it also fixes other places zero'ing struct's contains struct tcf_exts.

    Fixes: commit 33be627159913b0 (net_sched: act: use standard struct list_head)
    Reported-by: Kelly Anderson
    Tested-by: Kelly Anderson
    Cc: David S. Miller
    Signed-off-by: Cong Wang
    Signed-off-by: David S. Miller

    Cong Wang
     

21 May, 2014

3 commits

  • We need to initialize the fallback device to have a correct mtu
    set on this device. Otherwise the mtu is set to null and the device
    is unusable.

    Fixes: fd58156e456d ("IPIP: Use ip-tunneling code.")
    Cc: Pravin B Shelar
    Signed-off-by: Steffen Klassert
    Signed-off-by: David S. Miller

    Steffen Klassert
     
  • Marc Kleine-Budde says:

    ====================
    pull-request: can 2014-05-19

    this is a pull request for net/master, for the v3.15 release cycle,
    with a single patch.

    Oliver Hartkopp's patch removes a Kconfig option in the c_can driver,
    which was added as a workaround during the v3.15 development. With all
    cleanup patches this workaround is not needed anymore.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Pablo Neira Ayuso says:

    ====================
    Netfilter/nftables fixes for net

    The following patchset contains nftables fixes for your net tree, they
    are:

    1) Fix crash when using the goto action in a rule by making sure that
    we always fall back on the base chain. Otherwise, this may try to
    access the counter memory area of non-base chains, which does not
    exists.

    2) Fix several aspects of the rule tracing that are currently broken:

    * Reset rule number counter after goto/jump action, otherwise the
    tracing reports a bogus rule number.
    * Fix tracing of the goto action.
    * Fix bogus rule number counter after goto.
    * Fix missing return trace after finishing the walk through the
    non-base chain.
    * Fix missing trace when matching non-terminal rule.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     

20 May, 2014

1 commit

  • The new function vlan_get_encap_level() uses vlan_dev_priv()
    which is only conditionally avaialble when VLAN support is
    enabled. Make vlan_get_encap_level() conditionally available
    as well.

    Fixes: 44a4085538c8 ("bonding: Fix stacked device detection in arp monitoring")
    Reported-by: Stephen Rothwell
    CC: Stephen Rothwell
    Signed-off-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Vlad Yasevich
     

19 May, 2014

3 commits

  • In 2b9aecdce2 ("can: c_can: Disable rx split as workaround") a new Kconfig
    option was introduced as a workaround. The tests performed by Alexander Stein
    confirmed this option to be obsolete with all the other cleanups and fixes
    that had been discussed that time:
    http://marc.info/?l=linux-can&m=139746476821294&w=2

    Both (author and tester) agreed to remove this Kconfig option again:
    http://marc.info/?l=linux-can&m=139883820714229&w=2

    As some more cleanups took place since then a simple revert is not possible.
    This patch removes the entire option as it would behave when disabled.
    Further beautification’s can be done later.

    Signed-off-by: Oliver Hartkopp
    Tested-by: Alexander Stein
    Signed-off-by: Marc Kleine-Budde

    Oliver Hartkopp
     
  • Pravin will be maintaining Open vSwitch going forward.

    CC: Pravin Shelar
    Signed-off-by: Jesse Gross
    Signed-off-by: David S. Miller

    Jesse Gross
     
  • These "return 0;" uses seem wrong as there are
    rc variables where error return values are set
    but unused.

    Signed-off-by: Joe Perches
    Acked-by: Dmitry Kravkov
    Signed-off-by: David S. Miller

    Joe Perches
     

17 May, 2014

20 commits

  • Vlad Yasevich says:

    ====================
    Fixed stacked vlan usage on top of bonds

    Bonding device driver now support q-in-q on top for bonds. There are
    a few issues here though.

    First, when arp monitoring is used, bonding driver will not correctly
    tag traffic if the source of the arp device was configured on top of
    q-in-q. It may also incorrectly pick the wrong vlan id if the ordering
    of that upper devices isn't as expected (there is no guarntee on ordering).

    Second, the alb/tlb may use what would be considered 'inner' vlans in
    its learning announcements, as it simply announces all vlans configured
    on top of the bond without regard for encapsulation/stacking.

    This series fixes the above 2 issues. This series also depends on the
    functionality introduced in
    http://patchwork.ozlabs.org/patch/349766/

    Since v1:
    - Changed how patch1 verifies the device path. We no longer use the
    _all_upper version of the function. We find the path and if it was
    found, then collect the vlan information.
    - Use the constant to devine maximum vlan nest level support on top
    of bonding. This can be changed if 2 is too low.
    - Inlude patch2 into the series.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • ALB/TLB learning packets use all vlans configured on top
    of the bond. This ends up being incorrect if we have a stack
    of vlans on top of the bond. ALB/TLB should only use
    first level/outer most vlans in its announcements.

    Signed-off-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Vlad Yasevich
     
  • Prior to commit fbd929f2dce460456807a51e18d623db3db9f077
    bonding: support QinQ for bond arp interval

    the arp monitoring code allowed for proper detection of devices
    stacked on top of vlans. Since the above commit, the
    code can still detect a device stacked on top of single
    vlan, but not a device stacked on top of Q-in-Q configuration.
    The search will only set the inner vlan tag if the route
    device is the vlan device. However, this is not always the
    case, as it is possible to extend the stacked configuration.

    With this patch it is possible to provision devices on
    top Q-in-Q vlan configuration that should be used as
    a source of ARP monitoring information.

    For example:
    ip link add link bond0 vlan10 type vlan proto 802.1q id 10
    ip link add link vlan10 vlan100 type vlan proto 802.1q id 100
    ip link add link vlan100 type macvlan

    Note: This patch limites the number of stacked VLANs to 2,
    just like before. The original, however had another issue
    in that if we had more then 2 levels of VLANs, we would end
    up generating incorrectly tagged traffic. This is no longer
    possible.

    Fixes: fbd929f2dce460456807a51e18d623db3db9f077 (bonding: support QinQ for bond arp interval)
    CC: Jay Vosburgh
    CC: Veaceslav Falico
    CC: Andy Gospodarek
    CC: Ding Tianhong
    CC: Patric McHardy
    Signed-off-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Vlad Yasevich
     
  • Vlad Yasevich says:

    ====================
    Fix lockdep issues with stacked devices

    Recent commit dc8eaaa006350d24030502a4521542e74b5cb39f
    vlan: Fix lockdep warning when vlan dev handle notification

    attempted to solve lockdep issues with vlans where multiple
    vlans were stacked. However, the code does not work correctly
    when the vlan stack is interspersed with other devices in between
    the vlans. Additionally, similar lockdep issues show up with other
    devices.

    This series provides a generic way to solve these issue for any
    devices that can be stacked. It also addresses the concern for
    vlan and macvlan devices. I am not sure whether it makes sense
    to do so for other types like team, vxlan, and bond.

    Thanks
    -vlad

    Since v2:
    - Remove rcu variants from patch1, since that function is called
    only under rtnl.
    - Fix whitespace problems reported by checkpatch

    Since v1:
    - Fixed up a goofed-up rebase.
    * is_vlan_dev() should be bool and that change belongs in patch3.
    * patch4 should not have any vlan changes in it.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Macvlan devices try to avoid stacking, but that's not always
    successfull or even desired. As an example, the following
    configuration is perefectly legal and valid:

    eth0 ] dev_uc_sync+0x3c/0x80
    [ 115.620686]
    but task is already holding lock:
    [ 115.620723] (&macvlan_netdev_addr_lock_key){+.....}, at: [] dev_set_rx_mode+0x1e/0x40
    [ 115.620795]
    which lock already depends on the new lock.

    [ 115.620853]
    the existing dependency chain (in reverse order) is:
    [ 115.620894]
    -> #1 (&macvlan_netdev_addr_lock_key){+.....}:
    [ 115.620935] [] lock_acquire+0xa2/0x130
    [ 115.620974] [] _raw_spin_lock_nested+0x37/0x50
    [ 115.621019] [] vlan_dev_set_rx_mode+0x53/0x110 [8021q]
    [ 115.621066] [] __dev_set_rx_mode+0x57/0xa0
    [ 115.621105] [] dev_set_rx_mode+0x26/0x40
    [ 115.621143] [] __dev_open+0xde/0x140
    [ 115.621174] [] __dev_change_flags+0x9d/0x170
    [ 115.621174] [] dev_change_flags+0x29/0x60
    [ 115.621174] [] do_setlink+0x321/0x9a0
    [ 115.621174] [] rtnl_newlink+0x51f/0x730
    [ 115.621174] [] rtnetlink_rcv_msg+0x95/0x250
    [ 115.621174] [] netlink_rcv_skb+0xa9/0xc0
    [ 115.621174] [] rtnetlink_rcv+0x2a/0x40
    [ 115.621174] [] netlink_unicast+0xf0/0x1c0
    [ 115.621174] [] netlink_sendmsg+0x2ff/0x740
    [ 115.621174] [] sock_sendmsg+0x8b/0xc0
    [ 115.621174] [] ___sys_sendmsg+0x369/0x380
    [ 115.621174] [] __sys_sendmsg+0x42/0x80
    [ 115.621174] [] SyS_sendmsg+0x12/0x20
    [ 115.621174] [] system_call_fastpath+0x16/0x1b
    [ 115.621174]
    -> #0 (&vlan_netdev_addr_lock_key/1){+.....}:
    [ 115.621174] [] __lock_acquire+0x1773/0x1a60
    [ 115.621174] [] lock_acquire+0xa2/0x130
    [ 115.621174] [] _raw_spin_lock_nested+0x37/0x50
    [ 115.621174] [] dev_uc_sync+0x3c/0x80
    [ 115.621174] [] macvlan_set_mac_lists+0xca/0x110 [macvlan]
    [ 115.621174] [] __dev_set_rx_mode+0x57/0xa0
    [ 115.621174] [] dev_set_rx_mode+0x26/0x40
    [ 115.621174] [] __dev_open+0xde/0x140
    [ 115.621174] [] __dev_change_flags+0x9d/0x170
    [ 115.621174] [] dev_change_flags+0x29/0x60
    [ 115.621174] [] do_setlink+0x321/0x9a0
    [ 115.621174] [] rtnl_newlink+0x51f/0x730
    [ 115.621174] [] rtnetlink_rcv_msg+0x95/0x250
    [ 115.621174] [] netlink_rcv_skb+0xa9/0xc0
    [ 115.621174] [] rtnetlink_rcv+0x2a/0x40
    [ 115.621174] [] netlink_unicast+0xf0/0x1c0
    [ 115.621174] [] netlink_sendmsg+0x2ff/0x740
    [ 115.621174] [] sock_sendmsg+0x8b/0xc0
    [ 115.621174] [] ___sys_sendmsg+0x369/0x380
    [ 115.621174] [] __sys_sendmsg+0x42/0x80
    [ 115.621174] [] SyS_sendmsg+0x12/0x20
    [ 115.621174] [] system_call_fastpath+0x16/0x1b
    [ 115.621174]
    other info that might help us debug this:

    [ 115.621174] Possible unsafe locking scenario:

    [ 115.621174] CPU0 CPU1
    [ 115.621174] ---- ----
    [ 115.621174] lock(&macvlan_netdev_addr_lock_key);
    [ 115.621174] lock(&vlan_netdev_addr_lock_key/1);
    [ 115.621174] lock(&macvlan_netdev_addr_lock_key);
    [ 115.621174] lock(&vlan_netdev_addr_lock_key/1);
    [ 115.621174]
    *** DEADLOCK ***

    [ 115.621174] 2 locks held by ip/1704:
    [ 115.621174] #0: (rtnl_mutex){+.+.+.}, at: [] rtnetlink_rcv+0x1b/0x40
    [ 115.621174] #1: (&macvlan_netdev_addr_lock_key){+.....}, at: [] dev_set_rx_mode+0x1e/0x40
    [ 115.621174]
    stack backtrace:
    [ 115.621174] CPU: 3 PID: 1704 Comm: ip Not tainted 3.15.0-rc1+ #24
    [ 115.621174] Hardware name: Hewlett-Packard HP xw8400 Workstation/0A08h, BIOS 786D5 v02.38 10/25/2010
    [ 115.621174] ffffffff82339ae0 ffff880465f79568 ffffffff816ee20c ffffffff82339ae0
    [ 115.621174] ffff880465f795a8 ffffffff816e9e1b ffff880465f79600 ffff880465b019c8
    [ 115.621174] 0000000000000001 0000000000000002 ffff880465b019c8 ffff880465b01230
    [ 115.621174] Call Trace:
    [ 115.621174] [] dump_stack+0x4d/0x66
    [ 115.621174] [] print_circular_bug+0x200/0x20e
    [ 115.621174] [] __lock_acquire+0x1773/0x1a60
    [ 115.621174] [] ? trace_hardirqs_on_caller+0xb2/0x1d0
    [ 115.621174] [] lock_acquire+0xa2/0x130
    [ 115.621174] [] ? dev_uc_sync+0x3c/0x80
    [ 115.621174] [] _raw_spin_lock_nested+0x37/0x50
    [ 115.621174] [] ? dev_uc_sync+0x3c/0x80
    [ 115.621174] [] dev_uc_sync+0x3c/0x80
    [ 115.621174] [] macvlan_set_mac_lists+0xca/0x110 [macvlan]
    [ 115.621174] [] __dev_set_rx_mode+0x57/0xa0
    [ 115.621174] [] dev_set_rx_mode+0x26/0x40
    [ 115.621174] [] __dev_open+0xde/0x140
    [ 115.621174] [] __dev_change_flags+0x9d/0x170
    [ 115.621174] [] dev_change_flags+0x29/0x60
    [ 115.621174] [] ? mem_cgroup_bad_page_check+0x21/0x30
    [ 115.621174] [] do_setlink+0x321/0x9a0
    [ 115.621174] [] ? __lock_acquire+0x37c/0x1a60
    [ 115.621174] [] rtnl_newlink+0x51f/0x730
    [ 115.621174] [] ? rtnl_newlink+0xe9/0x730
    [ 115.621174] [] rtnetlink_rcv_msg+0x95/0x250
    [ 115.621174] [] ? trace_hardirqs_on+0xd/0x10
    [ 115.621174] [] ? rtnetlink_rcv+0x1b/0x40
    [ 115.621174] [] ? rtnetlink_rcv+0x40/0x40
    [ 115.621174] [] netlink_rcv_skb+0xa9/0xc0
    [ 115.621174] [] rtnetlink_rcv+0x2a/0x40
    [ 115.621174] [] netlink_unicast+0xf0/0x1c0
    [ 115.621174] [] netlink_sendmsg+0x2ff/0x740
    [ 115.621174] [] sock_sendmsg+0x8b/0xc0
    [ 115.621174] [] ? might_fault+0x5f/0xb0
    [ 115.621174] [] ? might_fault+0xa8/0xb0
    [ 115.621174] [] ? might_fault+0x5f/0xb0
    [ 115.621174] [] ? verify_iovec+0x5e/0xe0
    [ 115.621174] [] ___sys_sendmsg+0x369/0x380
    [ 115.621174] [] ? __do_page_fault+0x11d/0x570
    [ 115.621174] [] ? up_read+0x1f/0x40
    [ 115.621174] [] ? __do_page_fault+0x214/0x570
    [ 115.621174] [] ? mntput_no_expire+0x6b/0x1c0
    [ 115.621174] [] ? mntput_no_expire+0x17/0x1c0
    [ 115.621174] [] ? mntput+0x24/0x40
    [ 115.621174] [] __sys_sendmsg+0x42/0x80
    [ 115.621174] [] SyS_sendmsg+0x12/0x20
    [ 115.621174] [] system_call_fastpath+0x16/0x1b

    Fix this by correctly providing macvlan lockdep class.

    Signed-off-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Vlad Yasevich
     
  • This reverts commit dc8eaaa006350d24030502a4521542e74b5cb39f.
    vlan: Fix lockdep warning when vlan dev handle notification

    Instead we use the new new API to find the lock subclass of
    our vlan device. This way we can support configurations where
    vlans are interspersed with other devices:
    bond -> vlan -> macvlan -> vlan

    Signed-off-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Vlad Yasevich
     
  • Currently netif_addr_lock_nested assumes that there can be only
    a single nesting level between 2 devices. However, if we
    have multiple devices of the same type stacked, this fails.
    For example:
    eth0
    Signed-off-by: David S. Miller

    Vlad Yasevich
     
  • Multiple devices in the kernel can be stacked/nested and they
    need to know their nesting level for the purposes of lockdep.
    This patch provides a generic function that determines a nesting
    level of a particular device by its type (ex: vlan, macvlan, etc).
    We only care about nesting of the same type of devices.

    For example:
    eth0
    Signed-off-by: David S. Miller

    Vlad Yasevich
     
  • Starting from linux-3.13, GRO attempts to build full size skbs.

    Problem is the commit assumed one particular field in skb->cb[]
    was clean, but it is not the case on some stacked devices.

    Timo reported a crash in case traffic is decrypted before
    reaching a GRE device.

    Fix this by initializing NAPI_GRO_CB(skb)->last at the right place,
    this also removes one conditional.

    Thanks a lot to Timo for providing full reports and bisecting this.

    Fixes: 8a29111c7ca6 ("net: gro: allow to build full sized skb")
    Bisected-by: Timo Teras
    Signed-off-by: Eric Dumazet
    Tested-by: Timo Teräs
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • The connected check fails to check for ip_gre nbma mode tunnels
    properly. ip_gre creates temporary tnl_params with daddr specified
    to pass-in the actual target on per-packet basis from neighbor
    layer. Detect these tunnels by inspecting the actual tunnel
    configuration.

    Minimal test case:
    ip route add 192.168.1.1/32 via 10.0.0.1
    ip route add 192.168.1.2/32 via 10.0.0.2
    ip tunnel add nbma0 mode gre key 1 tos c0
    ip addr add 172.17.0.0/16 dev nbma0
    ip link set nbma0 up
    ip neigh add 172.17.0.1 lladdr 192.168.1.1 dev nbma0
    ip neigh add 172.17.0.2 lladdr 192.168.1.2 dev nbma0
    ping 172.17.0.1
    ping 172.17.0.2

    The second ping should be going to 192.168.1.2 and head 10.0.0.2;
    but cached gre tunnel level route is used and it's actually going
    to 192.168.1.1 via 10.0.0.1.

    The lladdr's need to go to separate dst for the bug to trigger.
    Test case uses separate route entries, but this can also happen
    when the route entry is same: if there is a nexthop exception or
    the GRE tunnel is IPsec'ed in which case the dst points to xfrm
    bundle unique to the gre lladdr.

    Fixes: 7d442fab0a67 ("ipv4: Cache dst in tunnels")
    Signed-off-by: Timo Teräs
    Cc: Tom Herbert
    Cc: Eric Dumazet
    Signed-off-by: David S. Miller

    Timo Teräs
     
  • Adding more than one chip on device-tree currently causes the probing
    routine to always use the first chips data pointer.

    Signed-off-by: Fabian Godehardt
    Acked-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Fabian Godehardt
     
  • Currently, "ip -6 route get mark xyz" ignores the mark passed in
    by userspace. Make it honour the mark, just like IPv4 does.

    Signed-off-by: Lorenzo Colitti
    Signed-off-by: David S. Miller

    Lorenzo Colitti
     
  • Include changes:
    - fix NULL dereference in batadv_orig_hardif_seq_print_text()
    - fix reference counting imbalance when using fragmentation
    - avoid access to orig_node objects after they have been free'd
    - fix local TT check for outgoing arp requests in DAT

    David S. Miller
     
  • When the NAPI budget was not all used, xenvif_poll() would call
    napi_complete() /after/ enabling the interrupt. This resulted in a
    race between the napi_complete() and the napi_schedule() in the
    interrupt handler. The use of local_irq_save/restore() avoided by
    race iff the handler is running on the same CPU but not if it was
    running on a different CPU.

    Fix this properly by calling napi_complete() before reenabling
    interrupts (in the xenvif_napi_schedule_or_enable_irq() call).

    Signed-off-by: David Vrabel
    Acked-by: Wei Liu
    Acked-by: Ian Campbell
    Signed-off-by: David S. Miller

    David Vrabel
     
  • John W. Linville says:

    ====================
    pull request: wireless 2014-05-15

    Please pull this batch of fixes for the 3.15 stream...

    For the mac80211 bits, Johannes says:

    "One fix is to get better VHT performance and the other fixes tracing
    garbage or other potential issues with the interface name tracing."

    And...

    "This has a fix from Emmanuel for a problem I failed to fix - when
    association is in progress then it needs to be cancelled while
    suspending (I had fixed the same for authentication). Also included a
    fix from myself for a userspace API problem that hit the iw tool and a
    fix to the remain-on-channel framework."

    For the iwlwifi bits, Emmanuel says:

    "Alex fixes the scan by disabling the fragmented scan. David prevents
    scan offload while associated, the firmware seems not to like it. I
    fix a stupid bug I made in BT Coex, and fix a bad #ifdef clause in rate
    scaling. Along with that there is a fix for a NULL pointer exception
    that can happen if we load the driver and our ISR gets called because
    the interrupt line is shared. The fix has been tested by the reporter."

    And...

    "We have here a fix from David Spinadel that makes a previous fix more
    complete, and an off-by-one issue fixed by Eliad in the same area.
    I fix the monitor that broke on the way."

    Beyond that...

    Daniel Kim's one-liner fixes a brcmfmac regression caused by a typo
    in an earlier commit..

    Rajkumar Manoharan fixes an ath9k oops reported by David Herrmann.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • There may be padding on the ticket contained in the key payload, so just ensure
    that the claimed token length is large enough, rather than exactly the right
    size.

    Signed-off-by: Nathaniel Wesley Filardo
    Signed-off-by: David Howells
    Signed-off-by: David S. Miller

    Nathaniel W Filardo
     
  • With commit be9dad1f9f26604fb ("net: phy: suspend phydev when going
    to HALTED"), an unused PHY device will be put in a low-power mode
    using BMCR_PDOWN. Some Ethernet drivers might be calling phy_start()
    and phy_stop() from ndo_open and ndo_close() respectively, while
    calling phy_connect() and phy_disconnect() from probe and remove.
    In such a case, the PHY will be powered down during the phy_stop()
    call, but will fail to be powered up in phy_start().
    This patch fixes this scenario.

    Signed-off-by: Jiancheng Xue
    Signed-off-by: Zhangfei Gao
    Signed-off-by: David S. Miller

    Zhangfei Gao
     
  • Or Gerlitz says:

    ====================
    mlx4: Fix VF MAC address change under RoCE usage

    This short series provides proper handling for the case where a
    VF netdevice change their MAC address under a RoCE use case. The code
    it deals with was introduced in 3.15-rc1

    Prior to this series the source MAC used for the VM RoCE CM
    packets remains as before the MAC modification. Hence RoCE CM
    packets sent by the VF will not carry the same source MAC
    address as the non-CM packets.

    Earlier 3.15-rc commit f24f790 "net/mlx4_core: Load the Eth driver
    first" handled just one instance of the problem, but this one
    provides a more generic and proper solution which covers all
    cases of VF mac change.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • When we receive a netdev event indicating a netdev change and/or
    a netdev address change, we must change the MAC index used by the
    proxy QP1 (in the QP context), otherwise RoCE CM packets sent by the
    VF will not carry the same source MAC address as the non-CM packets.

    We use the UPDATE_QP command to perform this change.

    In order to avoid modifying a QP context based on netdev event,
    while the driver attempts to destroy this QP (e.g either the mlx4_ib
    or ib_mad modules are unloaded), we use mutex locking in both flows.

    Since the relevant mlx4 proxy GSI QP is created indirectly by the
    mad module when they create their GSI QP, the mlx4 didn't need to
    keep track on that QP prior to this change.

    Now, when QP modifications are needed to this QP from within the
    driver, we added refernece to it.

    Signed-off-by: Matan Barak
    Signed-off-by: Or Gerlitz
    Signed-off-by: David S. Miller

    Matan Barak
     
  • This patch adds UPDATE_QP SRIOV wrapper support.

    The mechanism is a general one, but currently only source MAC
    index changes are allowed for VFs.

    Signed-off-by: Matan Barak
    Signed-off-by: Or Gerlitz
    Signed-off-by: David S. Miller

    Matan Barak
     

16 May, 2014

9 commits

  • I've missed to add a NULL entry to the bond_intmax_tbl when I introduced
    it with the conversion of arp_interval so add it now.

    CC: Jay Vosburgh
    CC: Veaceslav Falico
    CC: Andy Gospodarek

    Fixes: 7bdb04ed0dbf ("bonding: convert arp_interval to use the new option API")
    Signed-off-by: Nikolay Aleksandrov
    Acked-by: Veaceslav Falico
    Signed-off-by: David S. Miller

    Nikolay Aleksandrov
     
  • The original series for reintroducing grant mapping for netback had a patch [1]
    to handle receiving of packets from an another VIF. Grant copy on the receiving
    side needs the grant ref of the page to set up the op.
    The original patch assumed (wrongly) that the frags array haven't changed. In
    the case reported by Sander, the sending guest sent a packet where the linear
    buffer and the first frag were under PKT_PROT_LEN (=128) bytes.
    xenvif_tx_submit() then pulled up the linear area to 128 bytes, and ditched the
    first frag. The receiving side had an off-by-one problem when gathered the grant
    refs.
    This patch fixes that by checking whether the actual frag's page pointer is the
    same as the page in the original frag list. It can handle any kind of changes on
    the original frags array, like:
    - removing granted frags from the array at any point
    - adding local pages to the frags list anywhere
    - reordering the frags
    It's optimized to the most common case, when there is 1:1 relation between the
    frags and the list, plus works optimal when frags are removed from the end or
    the beginning.

    [1]: 3e2234: xen-netback: Handle foreign mapped pages on the guest RX path

    Reported-by: Sander Eikelenboom
    Signed-off-by: Zoltan Kiss
    Acked-by: Ian Campbell
    Signed-off-by: David S. Miller

    Zoltan Kiss
     
  • RFC 4861 states in 7.2.5:

    The IsRouter flag in the cache entry MUST be set based on the
    Router flag in the received advertisement. In those cases
    where the IsRouter flag changes from TRUE to FALSE as a result
    of this update, the node MUST remove that router from the
    Default Router List and update the Destination Cache entries
    for all destinations using that neighbor as a router as
    specified in Section 7.3.3. This is needed to detect when a
    node that is used as a router stops forwarding packets due to
    being configured as a host.

    Currently, when dealing with NA Message which IsRouter flag changes from
    TRUE to FALSE, the kernel only removes router from the Default Router List,
    and don't update the Destination Cache entries.

    Now in order to update those Destination Cache entries, i introduce
    function rt6_clean_tohost().

    Signed-off-by: Duan Jiong
    Acked-by: Hannes Frederic Sowa
    Signed-off-by: David S. Miller

    Duan Jiong
     
  • Conflicts:
    net/ipv4/ip_vti.c

    Steffen Klassert says:

    ====================
    pull request (net): ipsec 2014-05-15

    This pull request has a merge conflict in net/ipv4/ip_vti.c
    between commit 8d89dcdf80d8 ("vti: don't allow to add the same
    tunnel twice") and commit a32452366b72 ("vti4:Don't count header
    length twice"). It can be solved like it is done in linux-next.

    1) Fix a ipv6 xfrm output crash when a packet is rerouted
    by netfilter to not use IPsec.

    2) vti4 counts some header lengths twice leading to an incorrect
    device mtu. Fix this by counting these headers only once.

    3) We don't catch the case if an unsupported protocol is submitted
    to the xfrm protocol handlers, this can lead to NULL pointer
    dereferences. Fix this by adding the appropriate checks.

    4) vti6 may unregister pernet ops twice on init errors.
    Fix this by removing one of the calls to do it only once.
    From Mathias Krause.

    5) Set the vti tunnel mark before doing a lookup in the error
    handlers. Otherwise we don't find the correct xfrm state.
    ====================

    The conflict in ip_vti.c was simple, 'net' had a commit
    removing a line from vti_tunnel_init() and this tree
    being merged had a commit adding a line to the same
    location.

    Signed-off-by: David S. Miller

    David S. Miller
     
  • After the call to phy_init_hw failed in phy_attach_direct, phy_detach is called
    to detach the phy device from its network device. If the attached driver is a
    generic phy driver, this also detaches the driver. Subsequently phy_resume
    is called, which assumes without checking that a driver is attached to the
    device. This will result in a crash such as

    Unable to handle kernel paging request for data at address 0xffffffffffffff90
    Faulting instruction address: 0xc0000000003a0e18
    Oops: Kernel access of bad area, sig: 11 [#1]
    ...
    NIP [c0000000003a0e18] .phy_attach_direct+0x68/0x17c
    LR [c0000000003a0e6c] .phy_attach_direct+0xbc/0x17c
    Call Trace:
    [c0000003fc0475d0] [c0000000003a0e6c] .phy_attach_direct+0xbc/0x17c (unreliable)
    [c0000003fc047670] [c0000000003a0ff8] .phy_connect_direct+0x28/0x98
    [c0000003fc047700] [c0000000003f0074] .of_phy_connect+0x4c/0xa4

    Only call phy_resume if phy_init_hw was successful.

    Signed-off-by: Guenter Roeck
    Acked-by: Florian Fainelli
    Signed-off-by: David S. Miller

    Guenter Roeck
     
  • Vince Bridgers says:

    ====================
    Altera TSE: Fix Sparse errors and misc issues

    This is version 2 of a patch series to correct sparse errors, cppcheck
    warnings, and workaound a multicast filtering issue in the Altera TSE
    Ethernet driver. Multicast filtering is not working as expected, so if
    present in the hardware will not be used and promiscuous mode enabled
    instead. This workaround will be replaced with a working solution when
    completely debugged, integrated and tested.

    Version 2 is different from the first submission by breaking out the
    workaround as a seperate patch and addressing a few structure instance
    declarations by making them const per review comments.

    If you find this patch acceptable, please consider this for inclusion into
    the Altera TSE driver source code.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • This patch disables multicast hash filtering if present in the hardware
    and uses promiscuous mode instead until the problem with multicast
    filtering has been debugged, integrated and tested.

    Signed-off-by: Vince Bridgers
    Signed-off-by: David S. Miller

    Vince Bridgers
     
  • This patch fixes the many sparse errors and warnings contained in the
    initial submission of the Altera Triple Speed Ethernet driver, and a
    few minor cppcheck warnings. Changes are tested on ARM and NIOS2
    example designs, and compile tested against multiple architectures.
    Typical issues addressed were as follows:

    altera_tse_ethtool.c:136:19: warning: incorrect type in argument
    1 (different address spaces)
    altera_tse_ethtool.c:136:19: expected void const volatile
    [noderef] *addr
    altera_tse_ethtool.c:136:19: got unsigned int *
    ...
    altera_sgdma.c:129:31: warning: cast removes address space of
    expression

    Signed-off-by: Vince Bridgers
    Signed-off-by: David S. Miller

    Vince Bridgers
     
  • From: Cong Wang

    commit 50624c934db18ab90 (net: Delay default_device_exit_batch until no
    devices are unregistering) introduced rtnl_lock_unregistering() for
    default_device_exit_batch(). Same race could happen we when rmmod a driver
    which calls rtnl_link_unregister() as we call dev->destructor without rtnl
    lock.

    For long term, I think we should clean up the mess of netdev_run_todo()
    and net namespce exit code.

    Cc: Eric W. Biederman
    Cc: David S. Miller
    Signed-off-by: Cong Wang
    Signed-off-by: Cong Wang
    Signed-off-by: David S. Miller

    Cong Wang