01 Jul, 2014

34 commits

  • commit 3afb69cb5572b3c8c898c00880803cf1a49852c4 upstream.

    idr_replace() open-codes the logic to calculate the maximum valid ID
    given the height of the idr tree; unfortunately, the open-coded logic
    doesn't account for the fact that the top layer may have unused slots
    and over-shifts the limit to zero when the tree is at its maximum
    height.

    The following test code shows it fails to replace the value for
    id=((1<<
    Acked-by: Tejun Heo
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Lai Jiangshan
     
  • commit 2227901a0230d8fde81ba9c602d649839390f56b upstream.

    Currently core file of aarch32 process prstatus note has empty
    registers set. As result aarch32 core files create by V8 kernel are
    not very useful.

    It happens because compat_gpr_get and compat_gpr_set functions can
    copy registers values to/from either kbuf or ubuf. ELF core file
    collection function fill_thread_core_info calls compat_gpr_get
    with kbuf set and ubuf set to 0. But current compat_gpr_get and
    compat_gpr_set function handle copy to/from only ubuf case.

    Fix is to handle kbuf and ubuf as two separate cases in similar
    way as other functions like user_regset_copyout, user_regset_copyin do.

    Signed-off-by: Victor Kamensky
    Acked-by: Will Deacon
    Signed-off-by: Catalin Marinas
    Signed-off-by: Greg Kroah-Hartman

    Victor Kamensky
     
  • commit c168870704bcde6bb63d05f7882b620dd3985a46 upstream.

    Our compat PTRACE_POKEUSR implementation simply passes the user data to
    regset_copy_from_user after some simple range checking. Unfortunately,
    the data in question has already been copied to the kernel stack by this
    point, so the subsequent access_ok check fails and the ptrace request
    returns -EFAULT. This causes problems tracing fork() with older versions
    of strace.

    This patch briefly changes the fs to KERNEL_DS, so that the access_ok
    check passes even with a kernel address.

    Signed-off-by: Will Deacon
    Signed-off-by: Catalin Marinas
    Signed-off-by: Greg Kroah-Hartman

    Will Deacon
     
  • commit 4e52365f279564cef0ddd41db5237f0471381093 upstream.

    When tracing a process in another pid namespace, it's important for fork
    event messages to contain the child's pid as seen from the tracer's pid
    namespace, not the parent's. Otherwise, the tracer won't be able to
    correlate the fork event with later SIGTRAP signals it receives from the
    child.

    We still risk a race condition if a ptracer from a different pid
    namespace attaches after we compute the pid_t value. However, sending a
    bogus fork event message in this unlikely scenario is still a vast
    improvement over the status quo where we always send bogus fork event
    messages to debuggers in a different pid namespace than the forking
    process.

    Signed-off-by: Matthew Dempsky
    Acked-by: Oleg Nesterov
    Cc: Kees Cook
    Cc: Julien Tinnes
    Cc: Roland McGrath
    Cc: Jan Kratochvil
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Matthew Dempsky
     
  • commit 71abdc15adf8c702a1dd535f8e30df50758848d2 upstream.

    When kswapd exits, it can end up taking locks that were previously held
    by allocating tasks while they waited for reclaim. Lockdep currently
    warns about this:

    On Wed, May 28, 2014 at 06:06:34PM +0800, Gu Zheng wrote:
    > inconsistent {RECLAIM_FS-ON-W} -> {IN-RECLAIM_FS-R} usage.
    > kswapd2/1151 [HC0[0]:SC0[0]:HE1:SE1] takes:
    > (&sig->group_rwsem){+++++?}, at: exit_signals+0x24/0x130
    > {RECLAIM_FS-ON-W} state was registered at:
    > mark_held_locks+0xb9/0x140
    > lockdep_trace_alloc+0x7a/0xe0
    > kmem_cache_alloc_trace+0x37/0x240
    > flex_array_alloc+0x99/0x1a0
    > cgroup_attach_task+0x63/0x430
    > attach_task_by_pid+0x210/0x280
    > cgroup_procs_write+0x16/0x20
    > cgroup_file_write+0x120/0x2c0
    > vfs_write+0xc0/0x1f0
    > SyS_write+0x4c/0xa0
    > tracesys+0xdd/0xe2
    > irq event stamp: 49
    > hardirqs last enabled at (49): _raw_spin_unlock_irqrestore+0x36/0x70
    > hardirqs last disabled at (48): _raw_spin_lock_irqsave+0x2b/0xa0
    > softirqs last enabled at (0): copy_process.part.24+0x627/0x15f0
    > softirqs last disabled at (0): (null)
    >
    > other info that might help us debug this:
    > Possible unsafe locking scenario:
    >
    > CPU0
    > ----
    > lock(&sig->group_rwsem);
    >
    > lock(&sig->group_rwsem);
    >
    > *** DEADLOCK ***
    >
    > no locks held by kswapd2/1151.
    >
    > stack backtrace:
    > CPU: 30 PID: 1151 Comm: kswapd2 Not tainted 3.10.39+ #4
    > Call Trace:
    > dump_stack+0x19/0x1b
    > print_usage_bug+0x1f7/0x208
    > mark_lock+0x21d/0x2a0
    > __lock_acquire+0x52a/0xb60
    > lock_acquire+0xa2/0x140
    > down_read+0x51/0xa0
    > exit_signals+0x24/0x130
    > do_exit+0xb5/0xa50
    > kthread+0xdb/0x100
    > ret_from_fork+0x7c/0xb0

    This is because the kswapd thread is still marked as a reclaimer at the
    time of exit. But because it is exiting, nobody is actually waiting on
    it to make reclaim progress anymore, and it's nothing but a regular
    thread at this point. Be tidy and strip it of all its powers
    (PF_MEMALLOC, PF_SWAPWRITE, PF_KSWAPD, and the lockdep reclaim state)
    before returning from the thread function.

    Signed-off-by: Johannes Weiner
    Reported-by: Gu Zheng
    Cc: Yasuaki Ishimatsu
    Cc: Tang Chen
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Johannes Weiner
     
  • commit 1b15d2e5b8077670b1e6a33250a0d9577efff4a5 upstream.

    Some drivers use the first HID report in the list instead of using an
    index. In these cases, validation uses ID 0, which was supposed to mean
    "first known report". This fixes the problem, which was causing at least
    the lgff family of devices to stop working since hid_validate_values
    was being called with ID 0, but the devices used single numbered IDs
    for their reports:

    0x05, 0x01, /* Usage Page (Desktop), */
    0x09, 0x05, /* Usage (Gamepad), */
    0xA1, 0x01, /* Collection (Application), */
    0xA1, 0x02, /* Collection (Logical), */
    0x85, 0x01, /* Report ID (1), */
    ...

    Reported-by: Simon Wood
    Signed-off-by: Kees Cook
    Reviewed-by: Benjamin Tissoires
    Signed-off-by: Jiri Kosina
    Signed-off-by: Greg Kroah-Hartman

    Kees Cook
     
  • commit 7f39dda9d86fb4f4f17af0de170decf125726f8c upstream.

    Trinity reports BUG:

    sleeping function called from invalid context at kernel/locking/rwsem.c:47
    in_atomic(): 0, irqs_disabled(): 0, pid: 5787, name: trinity-c27

    __might_sleep < down_write < __put_anon_vma < page_get_anon_vma <
    migrate_pages < compact_zone < compact_zone_order < try_to_compact_pages ..

    Right, since conversion to mutex then rwsem, we should not put_anon_vma()
    from inside an rcu_read_lock()ed section: fix the two places that did so.
    And add might_sleep() to anon_vma_free(), as suggested by Peter Zijlstra.

    Fixes: 88c22088bf23 ("mm: optimize page_lock_anon_vma() fast-path")
    Reported-by: Dave Jones
    Signed-off-by: Hugh Dickins
    Cc: Peter Zijlstra
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Hugh Dickins
     
  • commit 3ba08129e38437561df44c36b7ea9081185d5333 upstream.

    Currently memory error handler handles action optional errors in the
    deferred manner by default. And if a recovery aware application wants
    to handle it immediately, it can do it by setting PF_MCE_EARLY flag.
    However, such signal can be sent only to the main thread, so it's
    problematic if the application wants to have a dedicated thread to
    handler such signals.

    So this patch adds dedicated thread support to memory error handler. We
    have PF_MCE_EARLY flags for each thread separately, so with this patch
    AO signal is sent to the thread with PF_MCE_EARLY flag set, not the main
    thread. If you want to implement a dedicated thread, you call prctl()
    to set PF_MCE_EARLY on the thread.

    Memory error handler collects processes to be killed, so this patch lets
    it check PF_MCE_EARLY flag on each thread in the collecting routines.

    No behavioral change for all non-early kill cases.

    Tony said:

    : The old behavior was crazy - someone with a multithreaded process might
    : well expect that if they call prctl(PF_MCE_EARLY) in just one thread, then
    : that thread would see the SIGBUS with si_code = BUS_MCEERR_A0 - even if
    : that thread wasn't the main thread for the process.

    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: Naoya Horiguchi
    Reviewed-by: Tony Luck
    Cc: Kamil Iskra
    Cc: Andi Kleen
    Cc: Borislav Petkov
    Cc: Chen Gong
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Naoya Horiguchi
     
  • commit 74614de17db6fb472370c426d4f934d8d616edf2 upstream.

    When Linux sees an "action optional" machine check (where h/w has reported
    an error that is not in the current execution path) we generally do not
    want to signal a process, since most processes do not have a SIGBUS
    handler - we'd just prematurely terminate the process for a problem that
    they might never actually see.

    task_early_kill() decides whether to consider a process - and it checks
    whether this specific process has been marked for early signals with
    "prctl", or if the system administrator has requested early signals for
    all processes using /proc/sys/vm/memory_failure_early_kill.

    But for MF_ACTION_REQUIRED case we must not defer. The error is in the
    execution path of the current thread so we must send the SIGBUS
    immediatley.

    Fix by passing a flag argument through collect_procs*() to
    task_early_kill() so it knows whether we can defer or must take action.

    Signed-off-by: Tony Luck
    Signed-off-by: Naoya Horiguchi
    Cc: Andi Kleen
    Cc: Borislav Petkov
    Cc: Chen Gong
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Tony Luck
     
  • commit a70ffcac741d31a406c1d2b832ae43d658e7e1cf upstream.

    When a thread in a multi-threaded application hits a machine check because
    of an uncorrectable error in memory - we want to send the SIGBUS with
    si.si_code = BUS_MCEERR_AR to that thread. Currently we fail to do that
    if the active thread is not the primary thread in the process.
    collect_procs() just finds primary threads and this test:

    if ((flags & MF_ACTION_REQUIRED) && t == current) {

    will see that the thread we found isn't the current thread and so send a
    si.si_code = BUS_MCEERR_AO to the primary (and nothing to the active
    thread at this time).

    We can fix this by checking whether "current" shares the same mm with the
    process that collect_procs() said owned the page. If so, we send the
    SIGBUS to current (with code BUS_MCEERR_AR).

    Signed-off-by: Tony Luck
    Signed-off-by: Naoya Horiguchi
    Reported-by: Otto Bruggeman
    Cc: Andi Kleen
    Cc: Borislav Petkov
    Cc: Chen Gong
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Tony Luck
     
  • commit e58469bafd0524e848c3733bc3918d854595e20f upstream.

    The test_bit operations in get/set pageblock flags are expensive. This
    patch reads the bitmap on a word basis and use shifts and masks to isolate
    the bits of interest. Similarly masks are used to set a local copy of the
    bitmap and then use cmpxchg to update the bitmap if there have been no
    other changes made in parallel.

    In a test running dd onto tmpfs the overhead of the pageblock-related
    functions went from 1.27% in profiles to 0.5%.

    In addition to the performance benefits, this patch closes races that are
    possible between:

    a) get_ and set_pageblock_migratetype(), where get_pageblock_migratetype()
    reads part of the bits before and other part of the bits after
    set_pageblock_migratetype() has updated them.

    b) set_pageblock_migratetype() and set_pageblock_skip(), where the non-atomic
    read-modify-update set bit operation in set_pageblock_skip() will cause
    lost updates to some bits changed in the set_pageblock_migratetype().

    Joonsoo Kim first reported the case a) via code inspection. Vlastimil
    Babka's testing with a debug patch showed that either a) or b) occurs
    roughly once per mmtests' stress-highalloc benchmark (although not
    necessarily in the same pageblock). Furthermore during development of
    unrelated compaction patches, it was observed that frequent calls to
    {start,undo}_isolate_page_range() the race occurs several thousands of
    times and has resulted in NULL pointer dereferences in move_freepages()
    and free_one_page() in places where free_list[migratetype] is
    manipulated by e.g. list_move(). Further debugging confirmed that
    migratetype had invalid value of 6, causing out of bounds access to the
    free_list array.

    That confirmed that the race exist, although it may be extremely rare,
    and currently only fatal where page isolation is performed due to
    memory hot remove. Races on pageblocks being updated by
    set_pageblock_migratetype(), where both old and new migratetype are
    lower MIGRATE_RESERVE, currently cannot result in an invalid value
    being observed, although theoretically they may still lead to
    unexpected creation or destruction of MIGRATE_RESERVE pageblocks.
    Furthermore, things could get suddenly worse when memory isolation is
    used more, or when new migratetypes are added.

    After this patch, the race has no longer been observed in testing.

    Signed-off-by: Mel Gorman
    Acked-by: Vlastimil Babka
    Reported-by: Joonsoo Kim
    Reported-and-tested-by: Vlastimil Babka
    Cc: Johannes Weiner
    Cc: Jan Kara
    Cc: Michal Hocko
    Cc: Hugh Dickins
    Cc: Dave Hansen
    Cc: Theodore Ts'o
    Cc: "Paul E. McKenney"
    Cc: Oleg Nesterov
    Cc: Rik van Riel
    Cc: Peter Zijlstra
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Mel Gorman
     
  • commit 675becce15f320337499bc1a9356260409a5ba29 upstream.

    throttle_direct_reclaim() is meant to trigger during swap-over-network
    during which the min watermark is treated as a pfmemalloc reserve. It
    throttes on the first node in the zonelist but this is flawed.

    The user-visible impact is that a process running on CPU whose local
    memory node has no ZONE_NORMAL will stall for prolonged periods of time,
    possibly indefintely. This is due to throttle_direct_reclaim thinking the
    pfmemalloc reserves are depleted when in fact they don't exist on that
    node.

    On a NUMA machine running a 32-bit kernel (I know) allocation requests
    from CPUs on node 1 would detect no pfmemalloc reserves and the process
    gets throttled. This patch adjusts throttling of direct reclaim to
    throttle based on the first node in the zonelist that has a usable
    ZONE_NORMAL or lower zone.

    [akpm@linux-foundation.org: coding-style fixes]
    Signed-off-by: Mel Gorman
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Mel Gorman
     
  • commit 8fe6929cfd43c44834858a53e129ffdc7c166298 upstream.

    Commit 786235eeba0e ("kthread: make kthread_create() killable") meant
    for allowing kthread_create() to abort as soon as killed by the
    OOM-killer. But returning -ENOMEM is wrong if killed by SIGKILL from
    userspace. Change kthread_create() to return -EINTR upon SIGKILL.

    Signed-off-by: Tetsuo Handa
    Cc: Oleg Nesterov
    Acked-by: David Rientjes
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Tetsuo Handa
     
  • commit c177c81e09e517bbf75b67762cdab1b83aba6976 upstream.

    Currently hugepage migration is available for all archs which support
    pmd-level hugepage, but testing is done only for x86_64 and there're
    bugs for other archs. So to avoid breaking such archs, this patch
    limits the availability strictly to x86_64 until developers of other
    archs get interested in enabling this feature.

    Simply disabling hugepage migration on non-x86_64 archs is not enough to
    fix the reported problem where sys_move_pages() hits the BUG_ON() in
    follow_page(FOLL_GET), so let's fix this by checking if hugepage
    migration is supported in vma_migratable().

    Signed-off-by: Naoya Horiguchi
    Reported-by: Michael Ellerman
    Tested-by: Michael Ellerman
    Acked-by: Hugh Dickins
    Cc: Benjamin Herrenschmidt
    Cc: Tony Luck
    Cc: Russell King
    Cc: Martin Schwidefsky
    Cc: James Hogan
    Cc: Ralf Baechle
    Cc: David Miller
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds
    Signed-off-by: Greg Kroah-Hartman

    Naoya Horiguchi
     
  • commit acf47d4f9c39b1cba467aa9442fc2efe0b1da741 upstream.

    Fix potential I/O while runtime suspended due to missing PM operations
    in send_setup.

    Fixes: 383cedc3bb43 ("USB: serial: full autosuspend support for the
    option driver")

    Signed-off-by: Johan Hovold
    Signed-off-by: Greg Kroah-Hartman

    Johan Hovold
     
  • commit b0a50e92bda3c4aeb8017d4e6c6e92146ebd5c9b upstream.

    Leandro Liptak reports that his HASEE E200 computer hangs when we ask
    the BIOS to hand over control of the EHCI host controller. This
    definitely sounds like a bug in the BIOS, but at the moment there is
    no way to fix it.

    This patch works around the problem by avoiding the handoff whenever
    the motherboard and BIOS version match those of Leandro's computer.

    Signed-off-by: Alan Stern
    Reported-by: Leandro Liptak
    Tested-by: Leandro Liptak
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • commit 77c2f02edbeda9409a7cf3fd66233015820c213a upstream.

    Commit 193ab2a60700 ("usb: gadget: allow multiple gadgets to be built")
    apparently required that checks for CONFIG_USB_GADGET_OMAP would be
    replaced with checks for CONFIG_USB_OMAP. Do so now for the remaining
    checks for CONFIG_USB_GADGET_OMAP, even though these checks have
    basically been broken since v3.1.

    And, since we're touching this code, use the IS_ENABLED() macro, so
    things will now (hopefully) also work if USB_OMAP is modular.

    Fixes: 193ab2a60700 ("usb: gadget: allow multiple gadgets to be built")
    Signed-off-by: Paul Bolle
    Signed-off-by: Tony Lindgren
    Signed-off-by: Greg Kroah-Hartman

    Paul Bolle
     
  • commit 687ef9817df7ed960d14575b9033dde3d04631fe upstream.

    so it seems like DWC3 IP doesn't clear stalls
    automatically when we disable an endpoint, because
    of that, we _must_ make sure stalls are cleared
    before clearing the proper bit in DALEPENA register.

    Reported-by: Johannes Stezenbach
    Signed-off-by: Felipe Balbi
    Signed-off-by: Greg Kroah-Hartman

    Felipe Balbi
     
  • commit d30f2065d6da377cc76771aca5a9850cfca8723b upstream.

    Commit 193ab2a60700 ("usb: gadget: allow multiple gadgets to be built")
    basically renamed the Kconfig symbol USB_GADGET_PXA25X to USB_PXA25X. It
    did not rename the related macros in use at that time. Commit
    c0a39151a405 ("ARM: pxa: fix inconsistent CONFIG_USB_PXA27X") did so for
    all but one macro. Rename that last macro too now.

    Fixes: 193ab2a60700 ("usb: gadget: allow multiple gadgets to be built")
    Signed-off-by: Paul Bolle
    Signed-off-by: Greg Kroah-Hartman

    Paul Bolle
     
  • commit 32b36eeae6a859670d2939a7d6136cb5e9ed64f8 upstream.

    In usbtest, tests 5 - 8 use the scatter-gather library in usbcore
    without any sort of timeout. If there's a problem in the gadget or
    host controller being tested, the test can hang.

    This patch adds a 10-second timeout to the tests, so that they will
    fail gracefully with an ETIMEDOUT error instead of hanging.

    Signed-off-by: Alan Stern
    Reported-by: Huang Rui
    Tested-by: Huang Rui
    Signed-off-by: Greg Kroah-Hartman

    Alan Stern
     
  • commit e4d58f5dcb7d7be45df8def31881ebfae99c75da upstream.

    TEST 12 and TEST 24 unlinks the URB write request for N times. When
    host and gadget both initialize pattern 1 (mod 63) data series to
    transfer, the gadget side will complain the wrong data which is not
    expected. Because in host side, usbtest doesn't fill the data buffer
    as mod 63 and this patch fixed it.

    [20285.488974] dwc3 dwc3.0.auto: ep1out-bulk: Transfer Not Ready
    [20285.489181] dwc3 dwc3.0.auto: ep1out-bulk: reason Transfer Not Active
    [20285.489423] dwc3 dwc3.0.auto: ep1out-bulk: req ffff8800aa6cb480 dma aeb50800 length 512 last
    [20285.489727] dwc3 dwc3.0.auto: ep1out-bulk: cmd 'Start Transfer' params 00000000 a9eaf000 00000000
    [20285.490055] dwc3 dwc3.0.auto: Command Complete --> 0
    [20285.490281] dwc3 dwc3.0.auto: ep1out-bulk: Transfer Not Ready
    [20285.490492] dwc3 dwc3.0.auto: ep1out-bulk: reason Transfer Active
    [20285.490713] dwc3 dwc3.0.auto: ep1out-bulk: endpoint busy
    [20285.490909] dwc3 dwc3.0.auto: ep1out-bulk: Transfer Complete
    [20285.491117] dwc3 dwc3.0.auto: request ffff8800aa6cb480 from ep1out-bulk completed 512/512 ===> 0
    [20285.491431] zero gadget: bad OUT byte, buf[1] = 0
    [20285.491605] dwc3 dwc3.0.auto: ep1out-bulk: cmd 'Set Stall' params 00000000 00000000 00000000
    [20285.491915] dwc3 dwc3.0.auto: Command Complete --> 0
    [20285.492099] dwc3 dwc3.0.auto: queing request ffff8800aa6cb480 to ep1out-bulk length 512
    [20285.492387] dwc3 dwc3.0.auto: ep1out-bulk: Transfer Not Ready
    [20285.492595] dwc3 dwc3.0.auto: ep1out-bulk: reason Transfer Not Active
    [20285.492830] dwc3 dwc3.0.auto: ep1out-bulk: req ffff8800aa6cb480 dma aeb51000 length 512 last
    [20285.493135] dwc3 dwc3.0.auto: ep1out-bulk: cmd 'Start Transfer' params 00000000 a9eaf000 00000000
    [20285.493465] dwc3 dwc3.0.auto: Command Complete --> 0

    Signed-off-by: Huang Rui
    Signed-off-by: Greg Kroah-Hartman

    Huang Rui
     
  • commit 8bab797c6e5724a43b7666ad70860712365cdb71 upstream.

    This is a static checker fix. The "dev" variable is always NULL after
    the while statement so we would be dereferencing a NULL pointer here.

    Fixes: 819a3eba4233 ('[PATCH] applicom: fix error handling')
    Signed-off-by: Dan Carpenter
    Signed-off-by: Greg Kroah-Hartman

    Dan Carpenter
     
  • commit ffd07de65ef5315053ea16356cd533b7f47c17e9 upstream.

    Failure to terminate this match table can lead to boot failures
    depending on where the compiler places the match table.

    Cc: Kamlakant Patel
    Cc: Mona Anonuevo
    Cc: linux-mtd@lists.infradead.org
    Signed-off-by: Stephen Boyd
    Signed-off-by: Greg Kroah-Hartman

    Stephen Boyd
     
  • commit 9dbd79aeb9842144d9a114a979a12c0949ee11eb upstream.

    The ->SupportedRates[] array has NDIS_802_11_LENGTH_RATES_EX (16)
    elements. Since "ie_len" comes from then network and can go up to 255
    then it means we should add a range check to prevent memory corruption.

    Fixes: d6846af679e0 ('staging: r8188eu: Add files for new driver - part 7')
    Signed-off-by: Dan Carpenter
    Signed-off-by: Greg Kroah-Hartman

    Dan Carpenter
     
  • commit d3921a03a89acb1b9ca599590c0131c89f8737d8 upstream.

    Commit d0f47ff17f29 ("ASoC: OMAP: Build config cleanup for McBSP")
    removed the Kconfig symbol OMAP_MCBSP. It left two checks for
    CONFIG_OMAP_MCBSP untouched.

    Convert these to checks for CONFIG_SND_OMAP_SOC_MCBSP. That must be
    correct, since that re-enables calls to functions that are all found in
    sound/soc/omap/mcbsp.c. And that file is built only if
    CONFIG_SND_OMAP_SOC_MCBSP is defined.

    Fixes: d0f47ff17f29 ("ASoC: OMAP: Build config cleanup for McBSP")
    Signed-off-by: Paul Bolle
    Signed-off-by: Greg Kroah-Hartman

    Paul Bolle
     
  • commit 98c3b32229f2685c13436b652b8959c99dfc5a31 upstream.

    The phys array is of size EXYNOS_MIPI_PHYS_NUM. Trying to access the
    index EXYNOS_MIPI_PHYS_NUM should return an error.

    Fixes: 069d2e26e9d6 "phy: Add driver for Exynos MIPI CSIS/DSIM DPHYs"

    Signed-off-by: Antoine Ténart
    Signed-off-by: Kishon Vijay Abraham I
    Signed-off-by: Greg Kroah-Hartman

    Antoine Ténart
     
  • commit 369afd4ba22f5b8de0c9229b6e62b3f9e2207034 upstream.

    The regmap_irq_get_virq may return 0 or -EINVAL on error. Fail the probe
    in both situations.

    Signed-off-by: Krzysztof Kozlowski
    Signed-off-by: Chanwoo Choi
    Signed-off-by: Greg Kroah-Hartman

    Krzysztof Kozlowski
     
  • commit 12adef5b49e98eb181b4163c36e2998169e1379b upstream.

    In probe the driver queued delayed work for cable detection and
    returned the result of queue_delayed_work() call. However the return
    value of queue_delayed_work() does not indicate an error and in normal
    condition it returns true which means successful work queue.
    This effectively resulted in probe failure:
    [ 2.088204] max14577-muic: probe of max77836-muic failed with error 1

    Signed-off-by: Krzysztof Kozlowski
    Fixes: 962e56bfcf0b ("extcon: max14577: Add extcon-max14577 driver...")
    Signed-off-by: Chanwoo Choi
    Signed-off-by: Greg Kroah-Hartman

    Krzysztof Kozlowski
     
  • commit d5653f2b7304f05eeb45d84f123cf02f840b8537 upstream.

    Fix NULL pointer exceptions when platform data is not supplied.

    Trace of one exception:
    Unable to handle kernel NULL pointer dereference at virtual address 00000008
    pgd = c0004000
    [00000008] *pgd=00000000
    Internal error: Oops: 5 [#1] PREEMPT SMP ARM
    Modules linked in:
    CPU: 2 PID: 1 Comm: swapper/0 Not tainted 3.14.0-12045-gead5dd4687a6-dirty #1628
    task: eea80000 ti: eea88000 task.ti: eea88000
    PC is at max77693_muic_probe+0x27c/0x528
    LR is at regmap_write+0x50/0x60
    pc : [] lr : [] psr: 20000113
    sp : eea89e38 ip : 00000000 fp : c098a834
    r10: ee1a5a10 r9 : 00000005 r8 : c098a83c
    r7 : 0000000a r6 : c098a774 r5 : 00000005 r4 : eeb006d0
    r3 : c0697bd8 r2 : 00000000 r1 : 00000001 r0 : 00000000
    Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment kernel
    Control: 10c5387d Table: 4000404a DAC: 00000015
    Process swapper/0 (pid: 1, stack limit = 0xeea88240)
    Stack: (0xeea89e38 to 0xeea8a000)
    9e20: c08499fc eeb006d0
    9e40: 00000000 00000000 c0915f98 00000001 00000000 ee1a5a10 c098a730 c09a88b8
    9e60: 00000000 c098a730 c0915f98 00000000 00000000 c02d6aa0 c02d6a88 ee1a5a10
    9e80: c0a712c8 c02d54e4 00001204 c0628b00 ee1a5a10 c098a730 ee1a5a44 00000000
    9ea0: eea88000 c02d57b4 00000000 c098a730 c02d5728 c02d3a24 ee813e5c eeb9d534
    9ec0: c098a730 ee22f700 c097c720 c02d4b14 c08174ec c098a730 00000006 c098a730
    9ee0: 00000006 c092fd30 c09b8500 c02d5df8 00000000 c093cbb8 00000006 c0008928
    9f00: 000000c3 ef7fc785 00000000 ef7fc794 00000000 c08af968 00000072 eea89f30
    9f20: ef7fc85e c065f198 000000c3 c003e87c 00000003 00000000 c092fd3c 00000000
    9f40: c08af618 c0826d58 00000006 00000006 c0956f58 c093cbb8 00000006 c092fd30
    9f60: c09b8500 000000c3 c092fd3c c08e8510 00000000 c08e8bb0 00000006 00000006
    9f80: c08e8510 c0c0c0c0 00000000 c0628fac 00000000 00000000 00000000 00000000
    9fa0: 00000000 c0628fb4 00000000 c000f038 00000000 00000000 00000000 00000000
    9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
    9fe0: 00000000 00000000 00000000 00000000 00000013 00000000 c0c0c0c0 c0c0c0c0
    [] (max77693_muic_probe) from [] (platform_drv_probe+0x18/0x48)
    [] (platform_drv_probe) from [] (driver_probe_device+0x140/0x384)
    [] (driver_probe_device) from [] (__driver_attach+0x8c/0x90)
    [] (__driver_attach) from [] (bus_for_each_dev+0x54/0x88)
    [] (bus_for_each_dev) from [] (bus_add_driver+0xe8/0x204)
    [] (bus_add_driver) from [] (driver_register+0x78/0xf4)
    [] (driver_register) from [] (do_one_initcall+0xc4/0x174)
    [] (do_one_initcall) from [] (kernel_init_freeable+0xfc/0x1c8)
    [] (kernel_init_freeable) from [] (kernel_init+0x8/0xec)
    [] (kernel_init) from [] (ret_from_fork+0x14/0x3c)
    Code: caffffe7 e59d200c e3550001 b3a05001 (e5923008)
    ---[ end trace 85db969ce011bde7 ]---

    Signed-off-by: Krzysztof Kozlowski
    Fixes: 190d7cfc8632
    Signed-off-by: Chanwoo Choi
    Signed-off-by: Greg Kroah-Hartman

    Krzysztof Kozlowski
     
  • commit dfee4111febf3d9ef3a640b2cd6205c75f4e7e3d upstream.

    Fix NULL pointer exception when platform data is not supplied. The
    driver dereferenced pdata pointer where it could be NULL.

    Signed-off-by: Krzysztof Kozlowski
    Fixes: 810d601f07c
    Signed-off-by: Chanwoo Choi
    Signed-off-by: Greg Kroah-Hartman

    Krzysztof Kozlowski
     
  • commit 6954cc1f238199e971ec905c5cc87120806ac981 upstream.

    Fix null-pointer dereference at probe when the mdio platform device is
    missing (e.g. when it has been disabled in DT).

    Signed-off-by: Johan Hovold
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Johan Hovold
     
  • commit f5738e2ef88070ef1372e6e718124d88e9abe4ac upstream.

    When sending data through IUCV a MESSAGE COMPLETE interrupt
    signals that sent data memory can be freed or reused again.
    With commit f9c41a62bba3f3f7ef3541b2a025e3371bcbba97
    "af_iucv: fix recvmsg by replacing skb_pull() function" the
    MESSAGE COMPLETE callback iucv_callback_txdone() identifies
    the wrong skb as being confirmed, which leads to data corruption.
    This patch fixes the skb mapping logic in iucv_callback_txdone().

    Signed-off-by: Ursula Braun
    Signed-off-by: Frank Blaschka
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Ursula Braun
     
  • commit 0b5a958cf4df3a5cd578b861471e62138f55c85e upstream.

    As remarked by Christopher R. Baker in his post at

    http://marc.info/?l=linux-can&m=139707295706465&w=2

    there's a possibility for an use after free condition at device removal.

    This simplified patch introduces an additional variable to prevent the issue.
    Thanks for catching this.

    Reported-by: Christopher R. Baker
    Signed-off-by: Stephane Grosjean
    Signed-off-by: Marc Kleine-Budde
    Signed-off-by: Greg Kroah-Hartman

    Stephane Grosjean
     
  • commit 59993f48b38fd46863b23bb1bb1dc3291e7278fb upstream.

    This reverts commit f8d56d8f892be43a2404356073e16401eb5a42e6 ("net:
    eth: cpsw: Correctly attach to GPIO bitbang MDIO driver").

    Fix potential null-pointer dereference at probe if the mdio-gpio device
    has not been successfully probed yet.

    The offending commit is plain wrong for a number of reasons. First of
    all it accesses internal driver data of an unrelated device. Neither
    does it check that the data is non-null (which it is in case the device
    has not been probed yet).

    Furthermore, the decision on whether to treat any driver data according
    to the mdio-gpio driver's internals is made based on the node name. But
    the name is not compared against "mdio" which is the normal name for the
    node, but rather against "gpio" which the node does not have to be named
    (and shouldn't be according to the binding documentation). [ If this
    hack is to be kept out-of-tree it should at least be matching against
    the compatible property. ]

    Cc: Stefan Roese
    Signed-off-by: Johan Hovold
    Signed-off-by: David S. Miller
    Signed-off-by: Greg Kroah-Hartman

    Johan Hovold
     

27 Jun, 2014

6 commits

  • Greg Kroah-Hartman
     
  • commit 883a1d49f0d77d30012f114b2e19fc141beb3e8e upstream.

    The ALSA control code expects that the range of assigned indices to a control is
    continuous and does not overflow. Currently there are no checks to enforce this.
    If a control with a overflowing index range is created that control becomes
    effectively inaccessible and unremovable since snd_ctl_find_id() will not be
    able to find it. This patch adds a check that makes sure that controls with a
    overflowing index range can not be created.

    Signed-off-by: Lars-Peter Clausen
    Acked-by: Jaroslav Kysela
    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Lars-Peter Clausen
     
  • commit ac902c112d90a89e59916f751c2745f4dbdbb4bd upstream.

    Each control gets automatically assigned its numids when the control is created.
    The allocation is done by incrementing the numid by the amount of allocated
    numids per allocation. This means that excessive creation and destruction of
    controls (e.g. via SNDRV_CTL_IOCTL_ELEM_ADD/REMOVE) can cause the id to
    eventually overflow. Currently when this happens for the control that caused the
    overflow kctl->id.numid + kctl->count will also over flow causing it to be
    smaller than kctl->id.numid. Most of the code assumes that this is something
    that can not happen, so we need to make sure that it won't happen

    Signed-off-by: Lars-Peter Clausen
    Acked-by: Jaroslav Kysela
    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Lars-Peter Clausen
     
  • commit fd9f26e4eca5d08a27d12c0933fceef76ed9663d upstream.

    A control that is visible on the card->controls list can be freed at any time.
    This means we must not access any of its memory while not holding the
    controls_rw_lock. Otherwise we risk a use after free access.

    Signed-off-by: Lars-Peter Clausen
    Acked-by: Jaroslav Kysela
    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Lars-Peter Clausen
     
  • commit 82262a46627bebb0febcc26664746c25cef08563 upstream.

    There are two issues with the current implementation for replacing user
    controls. The first is that the code does not check if the control is actually a
    user control and neither does it check if the control is owned by the process
    that tries to remove it. That allows userspace applications to remove arbitrary
    controls, which can cause a user after free if a for example a driver does not
    expect a control to be removed from under its feed.

    The second issue is that on one hand when a control is replaced the
    user_ctl_count limit is not checked and on the other hand the user_ctl_count is
    increased (even though the number of user controls does not change). This allows
    userspace, once the user_ctl_count limit as been reached, to repeatedly replace
    a control until user_ctl_count overflows. Once that happens new controls can be
    added effectively bypassing the user_ctl_count limit.

    Both issues can be fixed by instead of open-coding the removal of the control
    that is to be replaced to use snd_ctl_remove_user_ctl(). This function does
    proper permission checks as well as decrements user_ctl_count after the control
    has been removed.

    Note that by using snd_ctl_remove_user_ctl() the check which returns -EBUSY at
    beginning of the function if the control already exists is removed. This is not
    a problem though since the check is quite useless, because the lock that is
    protecting the control list is released between the check and before adding the
    new control to the list, which means that it is possible that a different
    control with the same settings is added to the list after the check. Luckily
    there is another check that is done while holding the lock in snd_ctl_add(), so
    we'll rely on that to make sure that the same control is not added twice.

    Signed-off-by: Lars-Peter Clausen
    Acked-by: Jaroslav Kysela
    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Lars-Peter Clausen
     
  • commit 07f4d9d74a04aa7c72c5dae0ef97565f28f17b92 upstream.

    The user-control put and get handlers as well as the tlv do not protect against
    concurrent access from multiple threads. Since the state of the control is not
    updated atomically it is possible that either two write operations or a write
    and a read operation race against each other. Both can lead to arbitrary memory
    disclosure. This patch introduces a new lock that protects user-controls from
    concurrent access. Since applications typically access controls sequentially
    than in parallel a single lock per card should be fine.

    Signed-off-by: Lars-Peter Clausen
    Acked-by: Jaroslav Kysela
    Signed-off-by: Takashi Iwai
    Signed-off-by: Greg Kroah-Hartman

    Lars-Peter Clausen