31 Mar, 2014

10 commits

  • Linus Torvalds
     
  • Pull vfs fixes from Al Viro:
    "Switch mnt_hash to hlist, turning the races between __lookup_mnt() and
    hash modifications into false negatives from __lookup_mnt() (instead
    of hangs)"

    On the false negatives from __lookup_mnt():
    "The *only* thing we care about is not getting stuck in __lookup_mnt().
    If it misses an entry because something in front of it just got moved
    around, etc, we are fine. We'll notice that mount_lock mismatch and
    that'll be it"

    * 'for-linus-2' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs:
    switch mnt_hash to hlist
    don't bother with propagate_mnt() unless the target is shared
    keep shadowed vfsmounts together
    resizable namespace.c hashes

    Linus Torvalds
     
  • I am the new kernel tree Documentation maintainer (except for parts that
    are handled by other people, of course).

    Signed-off-by: Randy Dunlap
    Acked-by: Rob Landley
    Signed-off-by: Linus Torvalds

    Randy Dunlap
     
  • Pull input updates from Dmitry Torokhov:
    "Some more updates for the input subsystem.

    You will get a fix for race in mousedev that has been causing quite a
    few oopses lately and a small fixup for force feedback support in
    evdev"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
    Input: mousedev - fix race when creating mixed device
    Input: don't modify the id of ioctl-provided ff effect on upload failure

    Linus Torvalds
     
  • It its possible to configure your PAM stack to refuse login if audit
    messages (about the login) were unable to be sent. This is common in
    many distros and thus normal configuration of many containers. The PAM
    modules determine if audit is enabled/disabled in the kernel based on
    the return value from sending an audit message on the netlink socket.
    If userspace gets back ECONNREFUSED it believes audit is disabled in the
    kernel. If it gets any other error else it refuses to let the login
    proceed.

    Just about ever since the introduction of namespaces the kernel audit
    subsystem has returned EPERM if the task sending a message was not in
    the init user or pid namespace. So many forms of containers have never
    worked if audit was enabled in the kernel.

    BUT if the container was not in net_init then the kernel network code
    would send ECONNREFUSED (instead of the audit code sending EPERM). Thus
    by pure accident/dumb luck/bug if an admin configured the PAM stack to
    reject all logins that didn't talk to audit, but then ran the login
    untility in the non-init_net namespace, it would work!! Clearly this was
    a bug, but it is a bug some people expected.

    With the introduction of network namespace support in 3.14-rc1 the two
    bugs stopped cancelling each other out. Now, containers in the
    non-init_net namespace refused to let users log in (just like PAM was
    configfured!) Obviously some people were not happy that what used to let
    users log in, now didn't!

    This fix is kinda hacky. We return ECONNREFUSED for all non-init
    relevant namespaces. That means that not only will the old broken
    non-init_net setups continue to work, now the broken non-init_pid or
    non-init_user setups will 'work'. They don't really work, since audit
    isn't logging things. But it's what most users want.

    In 3.15 we should have patches to support not only the non-init_net
    (3.14) namespace but also the non-init_pid and non-init_user namespace.
    So all will be right in the world. This just opens the doors wide open
    on 3.14 and hopefully makes users happy, if not the audit system...

    Reported-by: Andre Tomt
    Reported-by: Adam Richter
    Signed-off-by: Eric Paris
    Signed-off-by: Linus Torvalds

    Eric Paris
     
  • Use cmpxchg() to atomically set i_flags instead of clearing out the
    S_IMMUTABLE, S_APPEND, etc. flags and then setting them from the
    EXT4_IMMUTABLE_FL, EXT4_APPEND_FL flags, since this opens up a race
    where an immutable file has the immutable flag cleared for a brief
    window of time.

    Reported-by: John Sullivan
    Signed-off-by: "Theodore Ts'o"
    Cc: stable@kernel.org
    Signed-off-by: Linus Torvalds

    Theodore Ts'o
     
  • fixes RCU bug - walking through hlist is safe in face of element moves,
    since it's self-terminating. Cyclic lists are not - if we end up jumping
    to another hash chain, we'll loop infinitely without ever hitting the
    original list head.

    [fix for dumb braino folded]

    Spotted by: Max Kellermann
    Cc: stable@vger.kernel.org
    Signed-off-by: Al Viro

    Al Viro
     
  • If the dest_mnt is not shared, propagate_mnt() does nothing -
    there's no mounts to propagate to and thus no copies to create.
    Might as well don't bother calling it in that case.

    Cc: stable@vger.kernel.org
    Signed-off-by: Al Viro

    Al Viro
     
  • preparation to switching mnt_hash to hlist

    Cc: stable@vger.kernel.org
    Signed-off-by: Al Viro

    Al Viro
     
  • * switch allocation to alloc_large_system_hash()
    * make sizes overridable by boot parameters (mhash_entries=, mphash_entries=)
    * switch mountpoint_hashtable from list_head to hlist_head

    Cc: stable@vger.kernel.org
    Signed-off-by: Al Viro

    Al Viro
     

30 Mar, 2014

5 commits

  • Pull timer fix from Ingo Molnar:
    "A late breaking fix from John. (The bug fixed has a hard lockup
    potential, but that was not observed, warnings were)"

    * 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
    time: Revert to calling clock_was_set_delayed() while in irq context

    Linus Torvalds
     
  • Pull Ceph fix from Sage Weil:
    "This drops a bad assert that a few users have been hitting but we've
    only recently been able to track down"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client:
    rbd: drop an unsafe assertion

    Linus Torvalds
     
  • We should not be using static variable mousedev_mix in methods that can be
    called before that singleton gets assigned. While at it let's add open and
    close methods to mousedev structure so that we do not need to test if we
    are dealing with multiplexor or normal device and simply call appropriate
    method directly.

    This fixes: https://bugzilla.kernel.org/show_bug.cgi?id=71551

    Reported-by: GiulioDP
    Tested-by: GiulioDP
    Cc: stable@vger.kernel.org
    Signed-off-by: Dmitry Torokhov

    Dmitry Torokhov
     
  • If a new (id == -1) ff effect was uploaded from userspace,
    ff-core.c::input_ff_upload() will have assigned a positive number to the
    new effect id. Currently, evdev.c::evdev_do_ioctl() will save this new id
    to userspace, regardless of whether the upload succeeded or not.

    On upload failure, this can be confusing because the dev->ff->effects[]
    array will not contain an element at the index of that new effect id.

    This patch fixes this by leaving the id unchanged after upload fails.

    Note: Unfortunately applications should still expect changed effect id for
    quite some time.

    This has been discussed on:
    http://www.mail-archive.com/linux-input@vger.kernel.org/msg08513.html
    ("ff-core effect id handling in case of a failed effect upload")

    Suggested-by: Dmitry Torokhov
    Signed-off-by: Elias Vanderstuyft
    Signed-off-by: Dmitry Torokhov

    Elias Vanderstuyft
     
  • Olivier Bonvalet reported having repeated crashes due to a failed
    assertion he was hitting in rbd_img_obj_callback():

    Assertion failure in rbd_img_obj_callback() at line 2165:
    rbd_assert(which >= img_request->next_completion);

    With a lot of help from Olivier with reproducing the problem
    we were able to determine the object and image requests had
    already been completed (and often freed) at the point the
    assertion failed.

    There was a great deal of discussion on the ceph-devel mailing list
    about this. The problem only arose when there were two (or more)
    object requests in an image request, and the problem was always
    seen when the second request was being completed.

    The problem is due to a race in the window between setting the
    "done" flag on an object request and checking the image request's
    next completion value. When the first object request completes, it
    checks to see if its successor request is marked "done", and if
    so, that request is also completed. In the process, the image
    request's next_completion value is updated to reflect that both
    the first and second requests are completed. By the time the
    second request is able to check the next_completion value, it
    has been set to a value *greater* than its own "which" value,
    which caused an assertion to fail.

    Fix this problem by skipping over any completion processing
    unless the completing object request is the next one expected.
    Test only for inequality (not >=), and eliminate the bad
    assertion.

    Tested-by: Olivier Bonvalet
    Signed-off-by: Alex Elder
    Reviewed-by: Sage Weil
    Reviewed-by: Ilya Dryomov

    Alex Elder
     

29 Mar, 2014

25 commits

  • Pull networking fixes from David Miller:

    1) We've discovered a common error in several networking drivers, they
    put VLAN offload features into ->vlan_features, which would suggest
    that they support offloading 2 or more levels of VLAN encapsulation.
    Not only do these devices not do that, but we don't have the
    infrastructure yet to handle that at all.

    Fixes from Vlad Yasevich.

    2) Fix tcpdump crash with bridging and vlans, also from Vlad.

    3) Some MAINTAINERS updates for random32 and bonding.

    4) Fix late reseeds of prandom generator, from Sasha Levin.

    5) Bridge doesn't handle stacked vlans properly, fix from Toshiaki
    Makita.

    6) Fix deadlock in openvswitch, from Flavio Leitner.

    7) get_timewait4_sock() doesn't report delay times correctly, fix from
    Eric Dumazet.

    8) Duplicate address detection and addrconf verification need to run in
    contexts where RTNL can be obtained. Move them to run from a
    workqueue. From Hannes Frederic Sowa.

    9) Fix route refcount leaking in ip tunnels, from Pravin B Shelar.

    10) Don't return -EINTR from non-blocking recvmsg() on AF_UNIX sockets,
    from Eric Dumazet.

    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/net: (28 commits)
    vlan: Warn the user if lowerdev has bad vlan features.
    veth: Turn off vlan rx acceleration in vlan_features
    ifb: Remove vlan acceleration from vlan_features
    qlge: Do not propaged vlan tag offloads to vlans
    bridge: Fix crash with vlan filtering and tcpdump
    net: Account for all vlan headers in skb_mac_gso_segment
    MAINTAINERS: bonding: change email address
    MAINTAINERS: bonding: change email address
    ipv6: move DAD and addrconf_verify processing to workqueue
    tcp: fix get_timewait4_sock() delay computation on 64bit
    openvswitch: fix a possible deadlock and lockdep warning
    bridge: Fix handling stacked vlan tags
    bridge: Fix inabillity to retrieve vlan tags when tx offload is disabled
    vhost: validate vhost_get_vq_desc return value
    vhost: fix total length when packets are too short
    random32: avoid attempt to late reseed if in the middle of seeding
    random32: assign to network folks in MAINTAINERS
    net/mlx4_core: pass pci_device_id.driver_data to __mlx4_init_one during reset
    core, nfqueue, openvswitch: Orphan frags in skb_zerocopy and handle errors
    vlan: Set hard_header_len according to available acceleration
    ...

    Linus Torvalds
     
  • Vlad Yasevich says:

    ====================
    Audit all drivers for correct vlan_features.

    Some drivers set vlan acceleration features in vlan_features. This causes
    issues with Q-in-Q/802.1ad configurations.

    Audit all the drivers for correct vlan_features. Fix broken ones.
    Add a warning to vlan code to help catch future offenders.
    ====================

    Signed-off-by: David S. Miller

    David S. Miller
     
  • Some drivers incorrectly assign vlan acceleration features to
    vlan_features thus causing issues for Q-in-Q vlan configurations.
    Warn the user of such cases.

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

    Vlad Yasevich
     
  • For completeness, turn off vlan rx acceleration in vlan_features so
    that it doesn't show up on q-in-q setups.

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

    Vlad Yasevich
     
  • Do not include vlan acceleration features in vlan_features as that
    precludes correct Q-in-Q operation.

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

    Vlad Yasevich
     
  • qlge driver turns off NETIF_F_HW_CTAG_FILTER, but forgets to
    turn off HW_CTAG_TX and HW_CTAG_RX on vlan devices. With the
    current settings, q-in-q will only generate a single vlan header.
    Remember to mask off CTAG_TX and CTAG_RX features in vlan_features.

    CC: Shahed Shaikh
    CC: Jitendra Kalsaria
    CC: Ron Mercer
    Signed-off-by: Vlad Yasevich
    Acked-by: Jitendra Kalsaria
    Signed-off-by: David S. Miller

    Vlad Yasevich
     
  • When the vlan filtering is enabled on the bridge, but
    the filter is not configured on the bridge device itself,
    running tcpdump on the bridge device will result in a
    an Oops with NULL pointer dereference. The reason
    is that br_pass_frame_up() will bypass the vlan
    check because promisc flag is set. It will then try
    to get the table pointer and process the packet based
    on the table. Since the table pointer is NULL, we oops.
    Catch this special condition in br_handle_vlan().

    Reported-by: Toshiaki Makita
    CC: Toshiaki Makita
    Signed-off-by: Vlad Yasevich
    Acked-by: Toshiaki Makita
    Signed-off-by: David S. Miller

    Vlad Yasevich
     
  • skb_network_protocol() already accounts for multiple vlan
    headers that may be present in the skb. However, skb_mac_gso_segment()
    doesn't know anything about it and assumes that skb->mac_len
    is set correctly to skip all mac headers. That may not
    always be the case. If we are simply forwarding the packet (via
    bridge or macvtap), all vlan headers may not be accounted for.

    A simple solution is to allow skb_network_protocol to return
    the vlan depth it has calculated. This way skb_mac_gso_segment
    will correctly skip all mac headers.

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

    Vlad Yasevich
     
  • Signed-off-by: Veaceslav Falico
    Signed-off-by: David S. Miller

    Veaceslav Falico
     
  • Update my email address.

    Signed-off-by: Jay Vosburgh
    Signed-off-by: David S. Miller

    Jay Vosburgh
     
  • Merge two fixes from Andrew Morton:
    "The x86 fix should come from x86 guys but they appear to be
    conferencing or otherwise distracted.

    The ocfs2 fix is a bit of a mess - the code runs into an immediate
    NULL deref and we're trying to work out how this got through test and
    review, but we haven't heard from Goldwyn in the past few days.
    Sasha's patch fixes the oops, but the feature as a whole is probably
    broken. So this is a stopgap for 3.14 - I'll aim to get the real
    fixes into 3.14.x"

    * emailed patches from Andrew Morton akpm@linux-foundation.org>:
    x86: fix boot on uniprocessor systems
    ocfs2: check if cluster name exists before deref

    Linus Torvalds
     
  • On x86 uniprocessor systems topology_physical_package_id() returns -1
    which causes rapl_cpu_prepare() to leave rapl_pmu variable uninitialized
    which leads to GPF in rapl_pmu_init().

    See arch/x86/kernel/cpu/perf_event_intel_rapl.c.

    It turns out that physical_package_id and core_id can actually be
    retreived for uniprocessor systems too. Enabling them also fixes
    rapl_pmu code.

    Signed-off-by: Artem Fetishev
    Cc: Stephane Eranian
    Cc: Ingo Molnar
    Cc: "H. Peter Anvin"
    Cc: Thomas Gleixner
    Cc: Peter Zijlstra
    Cc:
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Artem Fetishev
     
  • Commit c74a3bdd9b52 ("ocfs2: add clustername to cluster connection") is
    trying to strlcpy a string which was explicitly passed as NULL in the
    very same patch, triggering a NULL ptr deref.

    BUG: unable to handle kernel NULL pointer dereference at (null)
    IP: strlcpy (lib/string.c:388 lib/string.c:151)
    CPU: 19 PID: 19426 Comm: trinity-c19 Tainted: G W 3.14.0-rc7-next-20140325-sasha-00014-g9476368-dirty #274
    RIP: strlcpy (lib/string.c:388 lib/string.c:151)
    Call Trace:
    ocfs2_cluster_connect (fs/ocfs2/stackglue.c:350)
    ocfs2_cluster_connect_agnostic (fs/ocfs2/stackglue.c:396)
    user_dlm_register (fs/ocfs2/dlmfs/userdlm.c:679)
    dlmfs_mkdir (fs/ocfs2/dlmfs/dlmfs.c:503)
    vfs_mkdir (fs/namei.c:3467)
    SyS_mkdirat (fs/namei.c:3488 fs/namei.c:3472)
    tracesys (arch/x86/kernel/entry_64.S:749)

    akpm: this patch probably disables the feature. A temporary thing to
    avoid triviel oopses.

    Signed-off-by: Sasha Levin
    Cc: Goldwyn Rodrigues
    Cc: Mark Fasheh
    Cc: Joel Becker
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Sasha Levin
     
  • addrconf_join_solict and addrconf_join_anycast may cause actions which
    need rtnl locked, especially on first address creation.

    A new DAD state is introduced which defers processing of the initial
    DAD processing into a workqueue.

    To get rtnl lock we need to push the code paths which depend on those
    calls up to workqueues, specifically addrconf_verify and the DAD
    processing.

    (v2)
    addrconf_dad_failure needs to be queued up to the workqueue, too. This
    patch introduces a new DAD state and stop the DAD processing in the
    workqueue (this is because of the possible ipv6_del_addr processing
    which removes the solicited multicast address from the device).

    addrconf_verify_lock is removed, too. After the transition it is not
    needed any more.

    As we are not processing in bottom half anymore we need to be a bit more
    careful about disabling bottom half out when we lock spin_locks which are also
    used in bh.

    Relevant backtrace:
    [ 541.030090] RTNL: assertion failed at net/core/dev.c (4496)
    [ 541.031143] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G O 3.10.33-1-amd64-vyatta #1
    [ 541.031145] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2007
    [ 541.031146] ffffffff8148a9f0 000000000000002f ffffffff813c98c1 ffff88007c4451f8
    [ 541.031148] 0000000000000000 0000000000000000 ffffffff813d3540 ffff88007fc03d18
    [ 541.031150] 0000880000000006 ffff88007c445000 ffffffffa0194160 0000000000000000
    [ 541.031152] Call Trace:
    [ 541.031153] [] ? dump_stack+0xd/0x17
    [ 541.031180] [] ? __dev_set_promiscuity+0x101/0x180
    [ 541.031183] [] ? __hw_addr_create_ex+0x60/0xc0
    [ 541.031185] [] ? __dev_set_rx_mode+0xaa/0xc0
    [ 541.031189] [] ? __dev_mc_add+0x61/0x90
    [ 541.031198] [] ? igmp6_group_added+0xfc/0x1a0 [ipv6]
    [ 541.031208] [] ? kmem_cache_alloc+0xcb/0xd0
    [ 541.031212] [] ? ipv6_dev_mc_inc+0x267/0x300 [ipv6]
    [ 541.031216] [] ? addrconf_join_solict+0x2e/0x40 [ipv6]
    [ 541.031219] [] ? ipv6_dev_ac_inc+0x159/0x1f0 [ipv6]
    [ 541.031223] [] ? addrconf_join_anycast+0x92/0xa0 [ipv6]
    [ 541.031226] [] ? __ipv6_ifa_notify+0x11e/0x1e0 [ipv6]
    [ 541.031229] [] ? ipv6_ifa_notify+0x33/0x50 [ipv6]
    [ 541.031233] [] ? addrconf_dad_completed+0x28/0x100 [ipv6]
    [ 541.031241] [] ? task_cputime+0x2d/0x50
    [ 541.031244] [] ? addrconf_dad_timer+0x136/0x150 [ipv6]
    [ 541.031247] [] ? addrconf_dad_completed+0x100/0x100 [ipv6]
    [ 541.031255] [] ? call_timer_fn.isra.22+0x2a/0x90
    [ 541.031258] [] ? addrconf_dad_completed+0x100/0x100 [ipv6]

    Hunks and backtrace stolen from a patch by Stephen Hemminger.

    Reported-by: Stephen Hemminger
    Signed-off-by: Stephen Hemminger
    Signed-off-by: Hannes Frederic Sowa
    Signed-off-by: David S. Miller

    Hannes Frederic Sowa
     
  • It seems I missed one change in get_timewait4_sock() to compute
    the remaining time before deletion of IPV4 timewait socket.

    This could result in wrong output in /proc/net/tcp for tm->when field.

    Fixes: 96f817fedec4 ("tcp: shrink tcp6_timewait_sock by one cache line")
    Signed-off-by: Eric Dumazet
    Signed-off-by: David S. Miller

    Eric Dumazet
     
  • There are two problematic situations.

    A deadlock can happen when is_percpu is false because it can get
    interrupted while holding the spinlock. Then it executes
    ovs_flow_stats_update() in softirq context which tries to get
    the same lock.

    The second sitation is that when is_percpu is true, the code
    correctly disables BH but only for the local CPU, so the
    following can happen when locking the remote CPU without
    disabling BH:

    CPU#0 CPU#1
    ovs_flow_stats_get()
    stats_read()
    +->spin_lock remote CPU#1 ovs_flow_stats_get()
    | stats_read()
    | ... +--> spin_lock remote CPU#0
    | |
    | ovs_flow_stats_update() | ...
    | spin_lock local CPU#0

    =================================
    [ INFO: inconsistent lock state ]
    3.14.0-rc8-00007-g632b06a #1 Tainted: G I
    ---------------------------------
    inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage.
    swapper/0/0 [HC0[0]:SC1[5]:HE1:SE0] takes:
    (&(&cpu_stats->lock)->rlock){+.?...}, at: [] ovs_flow_stats_update+0x51/0xd0 [openvswitch]
    {SOFTIRQ-ON-W} state was registered at:
    [] __lock_acquire+0x68f/0x1c40
    [] lock_acquire+0xa2/0x1d0
    [] _raw_spin_lock+0x3e/0x80
    [] ovs_flow_stats_get+0xc4/0x1e0 [openvswitch]
    [] ovs_flow_cmd_fill_info+0x185/0x360 [openvswitch]
    [] ovs_flow_cmd_build_info.constprop.27+0x55/0x90 [openvswitch]
    [] ovs_flow_cmd_new_or_set+0x4dd/0x570 [openvswitch]
    [] genl_family_rcv_msg+0x1cd/0x3f0
    [] genl_rcv_msg+0x8e/0xd0
    [] netlink_rcv_skb+0xa9/0xc0
    [] genl_rcv+0x28/0x40
    [] netlink_unicast+0x100/0x1e0
    [] netlink_sendmsg+0x347/0x770
    [] sock_sendmsg+0x9c/0xe0
    [] ___sys_sendmsg+0x3a9/0x3c0
    [] __sys_sendmsg+0x51/0x90
    [] SyS_sendmsg+0x12/0x20
    [] system_call_fastpath+0x16/0x1b
    irq event stamp: 1740726
    hardirqs last enabled at (1740726): [] ip6_finish_output2+0x4f0/0x840
    hardirqs last disabled at (1740725): [] ip6_finish_output2+0x4ab/0x840
    softirqs last enabled at (1740674): [] _local_bh_enable+0x22/0x50
    softirqs last disabled at (1740675): [] irq_exit+0xc5/0xd0

    other info that might help us debug this:
    Possible unsafe locking scenario:

    CPU0
    ----
    lock(&(&cpu_stats->lock)->rlock);

    lock(&(&cpu_stats->lock)->rlock);

    *** DEADLOCK ***

    5 locks held by swapper/0/0:
    #0: (((&ifa->dad_timer))){+.-...}, at: [] call_timer_fn+0x5/0x320
    #1: (rcu_read_lock){.+.+..}, at: [] mld_sendpack+0x5/0x4a0
    #2: (rcu_read_lock_bh){.+....}, at: [] ip6_finish_output2+0x59/0x840
    #3: (rcu_read_lock_bh){.+....}, at: [] __dev_queue_xmit+0x5/0x9b0
    #4: (rcu_read_lock){.+.+..}, at: [] internal_dev_xmit+0x5/0x110 [openvswitch]

    stack backtrace:
    CPU: 0 PID: 0 Comm: swapper/0 Tainted: G I 3.14.0-rc8-00007-g632b06a #1
    Hardware name: /DX58SO, BIOS SOX5810J.86A.5599.2012.0529.2218 05/29/2012
    0000000000000000 0fcf20709903df0c ffff88042d603808 ffffffff817cfe3c
    ffffffff81c134c0 ffff88042d603858 ffffffff817cb6da 0000000000000005
    ffffffff00000001 ffff880400000000 0000000000000006 ffffffff81c134c0
    Call Trace:
    [] dump_stack+0x4d/0x66
    [] print_usage_bug+0x1f4/0x205
    [] ? check_usage_backwards+0x180/0x180
    [] mark_lock+0x223/0x2b0
    [] __lock_acquire+0x623/0x1c40
    [] ? __lock_is_held+0x57/0x80
    [] ? masked_flow_lookup+0x236/0x250 [openvswitch]
    [] lock_acquire+0xa2/0x1d0
    [] ? ovs_flow_stats_update+0x51/0xd0 [openvswitch]
    [] _raw_spin_lock+0x3e/0x80
    [] ? ovs_flow_stats_update+0x51/0xd0 [openvswitch]
    [] ovs_flow_stats_update+0x51/0xd0 [openvswitch]
    [] ovs_dp_process_received_packet+0x84/0x120 [openvswitch]
    [] ? __lock_acquire+0x347/0x1c40
    [] ovs_vport_receive+0x2a/0x30 [openvswitch]
    [] internal_dev_xmit+0x68/0x110 [openvswitch]
    [] ? internal_dev_xmit+0x5/0x110 [openvswitch]
    [] dev_hard_start_xmit+0x2e6/0x8b0
    [] __dev_queue_xmit+0x417/0x9b0
    [] ? __dev_queue_xmit+0x5/0x9b0
    [] ? ip6_finish_output2+0x4f0/0x840
    [] dev_queue_xmit+0x10/0x20
    [] ip6_finish_output2+0x551/0x840
    [] ? ip6_finish_output+0x9a/0x220
    [] ip6_finish_output+0x9a/0x220
    [] ip6_output+0x4f/0x1f0
    [] mld_sendpack+0x1d9/0x4a0
    [] mld_send_initial_cr.part.32+0x88/0xa0
    [] ? addrconf_dad_completed+0x220/0x220
    [] ipv6_mc_dad_complete+0x31/0x50
    [] addrconf_dad_completed+0x147/0x220
    [] ? addrconf_dad_completed+0x220/0x220
    [] addrconf_dad_timer+0x19f/0x1c0
    [] call_timer_fn+0x99/0x320
    [] ? call_timer_fn+0x5/0x320
    [] ? addrconf_dad_completed+0x220/0x220
    [] run_timer_softirq+0x254/0x3b0
    [] __do_softirq+0x12d/0x480

    Signed-off-by: Flavio Leitner
    Signed-off-by: David S. Miller

    Flavio Leitner
     
  • If a bridge with vlan_filtering enabled receives frames with stacked
    vlan tags, i.e., they have two vlan tags, br_vlan_untag() strips not
    only the outer tag but also the inner tag.

    br_vlan_untag() is called only from br_handle_vlan(), and in this case,
    it is enough to set skb->vlan_tci to 0 here, because vlan_tci has already
    been set before calling br_handle_vlan().

    Signed-off-by: Toshiaki Makita
    Acked-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Toshiaki Makita
     
  • Bridge vlan code (br_vlan_get_tag()) assumes that all frames have vlan_tci
    if they are tagged, but if vlan tx offload is manually disabled on bridge
    device and frames are sent from vlan device on the bridge device, the tags
    are embedded in skb->data and they break this assumption.
    Extract embedded vlan tags and move them to vlan_tci at ingress.

    Signed-off-by: Toshiaki Makita
    Acked-by: Vlad Yasevich
    Signed-off-by: David S. Miller

    Toshiaki Makita
     
  • vhost fails to validate negative error code
    from vhost_get_vq_desc causing
    a crash: we are using -EFAULT which is 0xfffffff2
    as vector size, which exceeds the allocated size.

    The code in question was introduced in commit
    8dd014adfea6f173c1ef6378f7e5e7924866c923
    vhost-net: mergeable buffers support

    CVE-2014-0055

    Signed-off-by: Michael S. Tsirkin
    Signed-off-by: David S. Miller

    Michael S. Tsirkin
     
  • When mergeable buffers are disabled, and the
    incoming packet is too large for the rx buffer,
    get_rx_bufs returns success.

    This was intentional in order for make recvmsg
    truncate the packet and then handle_rx would
    detect err != sock_len and drop it.

    Unfortunately we pass the original sock_len to
    recvmsg - which means we use parts of iov not fully
    validated.

    Fix this up by detecting this overrun and doing packet drop
    immediately.

    CVE-2014-0077

    Signed-off-by: Michael S. Tsirkin
    Signed-off-by: David S. Miller

    Michael S. Tsirkin
     
  • Commit 4af712e8df ("random32: add prandom_reseed_late() and call when
    nonblocking pool becomes initialized") has added a late reseed stage
    that happens as soon as the nonblocking pool is marked as initialized.

    This fails in the case that the nonblocking pool gets initialized
    during __prandom_reseed()'s call to get_random_bytes(). In that case
    we'd double back into __prandom_reseed() in an attempt to do a late
    reseed - deadlocking on 'lock' early on in the boot process.

    Instead, just avoid even waiting to do a reseed if a reseed is already
    occuring.

    Fixes: 4af712e8df99 ("random32: add prandom_reseed_late() and call when nonblocking pool becomes initialized")
    Signed-off-by: Sasha Levin
    Acked-by: Hannes Frederic Sowa
    Signed-off-by: Daniel Borkmann
    Signed-off-by: David S. Miller

    Sasha Levin
     
  • Pull input subsystem fixes from Dmitry Torokhov:
    "Updates to Synaptics touchpad to better cope with devices in Lenovo
    laptops, and a couple more fixes"

    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
    Input: synaptics - add manual min/max quirk for ThinkPad X240
    Input: synaptics - add manual min/max quirk
    Input: cypress_ps2 - don't report as a button pads
    Input: da9052_onkey - use correct register bit for key status
    Input: adp5588-keys - get value from data out when dir is out

    Linus Torvalds
     
  • lib/random32.c was split out of the network code and is de-facto
    still maintained by the almighty net/ gods.

    Make it a bit more official so that people who aren't aware of
    that know where to send their patches.

    Signed-off-by: Sasha Levin
    Signed-off-by: David S. Miller

    Sasha Levin
     
  • Pull drm fixes from Dave Airlie:
    "I didn't want these to wait for stable cycle.

    The nouveau and radeon ones are the same problem, where the runtime pm
    stuff broke non-runtime pm managed secondary GPUs.

    The udl fix is for an oops on unplug, and the i915 fix is for a
    regression on Sandybridge even though it may break haswell (regression
    wins)"

    Daniel Vetter comments:
    "My apologies for the i915 regression fumble, that thing somehow fell
    through the cracks here for almost half a year :( Imo that's more than
    enough flailing to just go ahead with the revert, and the re-broken
    hsw should get peoples attention ..."

    * 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
    drm/i915: Undo gtt scratch pte unmapping again
    drm/radeon: fix runtime suspend breaking secondary GPUs
    drm/nouveau: fail runtime pm properly.
    drm/udl: take reference to device struct for dma-bufs

    Linus Torvalds
     
  • Pull i2c build fix from Wolfram Sang:
    "The build fix from my last request unveiled another build problem
    which is fixed with this patch"

    * 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
    i2c: cpm: Fix build by adding of_address.h and of_irq.h

    Linus Torvalds