06 Dec, 2018

1 commit

  • commit 7bada55ab50697861eee6bb7d60b41e68a961a9c upstream.

    Malicious code can attempt to free buffers using the BC_FREE_BUFFER
    ioctl to binder. There are protections against a user freeing a buffer
    while in use by the kernel, however there was a window where
    BC_FREE_BUFFER could be used to free a recently allocated buffer that
    was not completely initialized. This resulted in a use-after-free
    detected by KASAN with a malicious test program.

    This window is closed by setting the buffer's allow_user_free attribute
    to 0 when the buffer is allocated or when the user has previously freed
    it instead of waiting for the caller to set it. The problem was that
    when the struct buffer was recycled, allow_user_free was stale and set
    to 1 allowing a free to go through.

    Signed-off-by: Todd Kjos
    Acked-by: Arve Hjønnevåg
    Cc: stable # 4.14
    Signed-off-by: Greg Kroah-Hartman
    Signed-off-by: Greg Kroah-Hartman

    Todd Kjos
     

08 Aug, 2018

1 commit


24 Jul, 2018

1 commit

  • If asm/cacheflush.h is included first, the following build warnings are
    seen with sparc32 builds.

    In file included from arch/sparc/include/asm/cacheflush.h:11:0,
    from drivers/android/binder.c:54:
    arch/sparc/include/asm/cacheflush_32.h:40:37: warning:
    'struct page' declared inside parameter list will not be visible
    outside of this definition or declaration

    Moving the asm/ include after linux/ includes solves the problem.

    Suggested-by: Linus Torvalds
    Signed-off-by: Guenter Roeck
    Signed-off-by: Greg Kroah-Hartman

    Guenter Roeck
     

14 May, 2018

4 commits

  • Use new return type vm_fault_t for fault handler in
    struct vm_operations_struct. For now, this is just
    documenting that the function returns a VM_FAULT
    value rather than an errno. Once all instances are
    converted, vm_fault_t will become a distinct type.

    Reference id -> 1c8f422059ae ("mm: change return type
    to vm_fault_t")

    Signed-off-by: Souptick Joarder
    Signed-off-by: Greg Kroah-Hartman

    Souptick Joarder
     
  • binder_update_page_range needs down_write of mmap_sem because
    vm_insert_page need to change vma->vm_flags to VM_MIXEDMAP unless
    it is set. However, when I profile binder working, it seems
    every binder buffers should be mapped in advance by binder_mmap.
    It means we could set VM_MIXEDMAP in binder_mmap time which is
    already hold a mmap_sem as down_write so binder_update_page_range
    doesn't need to hold a mmap_sem as down_write.
    Please use proper API down_read. It would help mmap_sem contention
    problem as well as fixing down_write abuse.

    Ganesh Mahendran tested app launching and binder throughput test
    and he said he couldn't find any problem and I did binder latency
    test per Greg KH request(Thanks Martijn to teach me how I can do)
    I cannot find any problem, too.

    Cc: Ganesh Mahendran
    Cc: Joe Perches
    Cc: Arve Hjønnevåg
    Cc: Todd Kjos
    Reviewed-by: Martijn Coenen
    Signed-off-by: Minchan Kim
    Reviewed-by: Joel Fernandes (Google)
    Signed-off-by: Greg Kroah-Hartman

    Minchan Kim
     
  • When to execute binder_stat_br the e->cmd has been modifying as BR_OK
    instead of the original return error cmd, in fact we want to know the
    original return error, such as BR_DEAD_REPLY or BR_FAILED_REPLY, etc.
    instead of always BR_OK, in order to avoid the value of the e->cmd is
    always BR_OK, so we need assign the value of the e->cmd to cmd before
    e->cmd = BR_OK.

    Signed-off-by: songjinshi
    Signed-off-by: Greg Kroah-Hartman

    宋金时
     
  • New devices launching with Android P need to use the 64-bit
    binder interface, even on 32-bit SoCs [0].

    This change removes the Kconfig option to select the 32-bit
    binder interface. We don't think this will affect existing
    userspace for the following reasons:
    1) The latest Android common tree is 4.14, so we don't
    believe any Android devices are on kernels >4.14.
    2) Android devices launch on an LTS release and stick with
    it, so we wouldn't expect devices running on
    Signed-off-by: Greg Kroah-Hartman

    Martijn Coenen
     

30 Apr, 2018

1 commit


23 Apr, 2018

2 commits

  • It doesn't make any difference to runtime but I've switched these two
    checks to make my static checker happy.

    The problem is that "buffer->data_size" is user controlled and if it's
    less than "sizeo(*hdr)" then that means "offset" can be more than
    "buffer->data_size". It's just cleaner to check it in the other order.

    Signed-off-by: Dan Carpenter
    Acked-by: Martijn Coenen
    Signed-off-by: Greg Kroah-Hartman

    Dan Carpenter
     
  • This can't happen with normal nodes (because you can't get a ref
    to a node you own), but it could happen with the context manager;
    to make the behavior consistent with regular nodes, reject
    transactions into the context manager by the process owning it.

    Reported-by: syzbot+09e05aba06723a94d43d@syzkaller.appspotmail.com
    Signed-off-by: Martijn Coenen
    Cc: stable
    Signed-off-by: Greg Kroah-Hartman

    Martijn Coenen
     

16 Feb, 2018

4 commits

  • To prevent races with ep_remove_waitqueue() removing the
    waitqueue at the same time.

    Reported-by: syzbot+a2a3c4909716e271487e@syzkaller.appspotmail.com
    Signed-off-by: Martijn Coenen
    Cc: stable # 4.14+
    Signed-off-by: Greg Kroah-Hartman

    Martijn Coenen
     
  • The format specifier "%p" can leak kernel addresses. Use
    "%pK" instead. There were 4 remaining cases in binder.c.

    Signed-off-by: Todd Kjos
    Cc: stable
    Signed-off-by: Greg Kroah-Hartman

    Todd Kjos
     
  • binder_send_failed_reply() is called when a synchronous
    transaction fails. It reports an error to the thread that
    is waiting for the completion. Given that the transaction
    is synchronous, there should never be more than 1 error
    response to that thread -- this was being asserted with
    a WARN().

    However, when exercising the driver with syzbot tests, cases
    were observed where multiple "synchronous" requests were
    sent without waiting for responses, so it is possible that
    multiple errors would be reported to the thread. This testing
    was conducted with panic_on_warn set which forced the crash.

    This is easily reproduced by sending back-to-back
    "synchronous" transactions without checking for any
    response (eg, set read_size to 0):

    bwr.write_buffer = (uintptr_t)&bc1;
    bwr.write_size = sizeof(bc1);
    bwr.read_buffer = (uintptr_t)&br;
    bwr.read_size = 0;
    ioctl(fd, BINDER_WRITE_READ, &bwr);
    sleep(1);
    bwr2.write_buffer = (uintptr_t)&bc2;
    bwr2.write_size = sizeof(bc2);
    bwr2.read_buffer = (uintptr_t)&br;
    bwr2.read_size = 0;
    ioctl(fd, BINDER_WRITE_READ, &bwr2);
    sleep(1);

    The first transaction is sent to the servicemanager and the reply
    fails because no VMA is set up by this client. After
    binder_send_failed_reply() is called, the BINDER_WORK_RETURN_ERROR
    is sitting on the thread's todo list since the read_size was 0 and
    the client is not waiting for a response.

    The 2nd transaction is sent and the BINDER_WORK_RETURN_ERROR has not
    been consumed, so the thread's reply_error.cmd is still set (normally
    cleared when the BINDER_WORK_RETURN_ERROR is handled). Therefore
    when the servicemanager attempts to reply to the 2nd failed
    transaction, the error is already set and it triggers this warning.

    This is a user error since it is not waiting for the synchronous
    transaction to complete. If it ever does check, it will see an
    error.

    Changed the WARN() to a pr_warn().

    Signed-off-by: Todd Kjos
    Reported-by: syzbot
    Cc: stable
    Signed-off-by: Greg Kroah-Hartman

    Todd Kjos
     
  • If the kzalloc() in binder_get_thread() fails, binder_poll()
    dereferences the resulting NULL pointer.

    Fix it by returning POLLERR if the memory allocation failed.

    This bug was found by syzkaller using fault injection.

    Reported-by: syzbot
    Fixes: 457b9a6f09f0 ("Staging: android: add binder driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Eric Biggers
    Signed-off-by: Greg Kroah-Hartman

    Eric Biggers
     

12 Feb, 2018

1 commit

  • This is the mindless scripted replacement of kernel use of POLL*
    variables as described by Al, done by this script:

    for V in IN OUT PRI ERR RDNORM RDBAND WRNORM WRBAND HUP RDHUP NVAL MSG; do
    L=`git grep -l -w POLL$V | grep -v '^t' | grep -v /um/ | grep -v '^sa' | grep -v '/poll.h$'|grep -v '^D'`
    for f in $L; do sed -i "-es/^\([^\"]*\)\(\\)/\\1E\\2/" $f; done
    done

    with de-mangling cleanups yet to come.

    NOTE! On almost all architectures, the EPOLL* constants have the same
    values as the POLL* constants do. But they keyword here is "almost".
    For various bad reasons they aren't the same, and epoll() doesn't
    actually work quite correctly in some cases due to this on Sparc et al.

    The next patch from Al will sort out the final differences, and we
    should be all done.

    Scripted-by: Al Viro
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

02 Feb, 2018

1 commit

  • Pull char/misc driver updates from Greg KH:
    "Here is the big pull request for char/misc drivers for 4.16-rc1.

    There's a lot of stuff in here. Three new driver subsystems were added
    for various types of hardware busses:

    - siox
    - slimbus
    - soundwire

    as well as a new vboxguest subsystem for the VirtualBox hypervisor
    drivers.

    There's also big updates from the FPGA subsystem, lots of Android
    binder fixes, the usual handful of hyper-v updates, and lots of other
    smaller driver updates.

    All of these have been in linux-next for a long time, with no reported
    issues"

    * tag 'char-misc-4.16-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (155 commits)
    char: lp: use true or false for boolean values
    android: binder: use VM_ALLOC to get vm area
    android: binder: Use true and false for boolean values
    lkdtm: fix handle_irq_event symbol for INT_HW_IRQ_EN
    EISA: Delete error message for a failed memory allocation in eisa_probe()
    EISA: Whitespace cleanup
    misc: remove AVR32 dependencies
    virt: vbox: Add error mapping for VERR_INVALID_NAME and VERR_NO_MORE_FILES
    soundwire: Fix a signedness bug
    uio_hv_generic: fix new type mismatch warnings
    uio_hv_generic: fix type mismatch warnings
    auxdisplay: img-ascii-lcd: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE
    uio_hv_generic: add rescind support
    uio_hv_generic: check that host supports monitor page
    uio_hv_generic: create send and receive buffers
    uio: document uio_hv_generic regions
    doc: fix documentation about uio_hv_generic
    vmbus: add monitor_id and subchannel_id to sysfs per channel
    vmbus: fix ABI documentation
    uio_hv_generic: use ISR callback method
    ...

    Linus Torvalds
     

31 Jan, 2018

1 commit

  • Pull poll annotations from Al Viro:
    "This introduces a __bitwise type for POLL### bitmap, and propagates
    the annotations through the tree. Most of that stuff is as simple as
    'make ->poll() instances return __poll_t and do the same to local
    variables used to hold the future return value'.

    Some of the obvious brainos found in process are fixed (e.g. POLLIN
    misspelled as POLL_IN). At that point the amount of sparse warnings is
    low and most of them are for genuine bugs - e.g. ->poll() instance
    deciding to return -EINVAL instead of a bitmap. I hadn't touched those
    in this series - it's large enough as it is.

    Another problem it has caught was eventpoll() ABI mess; select.c and
    eventpoll.c assumed that corresponding POLL### and EPOLL### were
    equal. That's true for some, but not all of them - EPOLL### are
    arch-independent, but POLL### are not.

    The last commit in this series separates userland POLL### values from
    the (now arch-independent) kernel-side ones, converting between them
    in the few places where they are copied to/from userland. AFAICS, this
    is the least disruptive fix preserving poll(2) ABI and making epoll()
    work on all architectures.

    As it is, it's simply broken on sparc - try to give it EPOLLWRNORM and
    it will trigger only on what would've triggered EPOLLWRBAND on other
    architectures. EPOLLWRBAND and EPOLLRDHUP, OTOH, are never triggered
    at all on sparc. With this patch they should work consistently on all
    architectures"

    * 'misc.poll' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs: (37 commits)
    make kernel-side POLL... arch-independent
    eventpoll: no need to mask the result of epi_item_poll() again
    eventpoll: constify struct epoll_event pointers
    debugging printk in sg_poll() uses %x to print POLL... bitmap
    annotate poll(2) guts
    9p: untangle ->poll() mess
    ->si_band gets POLL... bitmap stored into a user-visible long field
    ring_buffer_poll_wait() return value used as return value of ->poll()
    the rest of drivers/*: annotate ->poll() instances
    media: annotate ->poll() instances
    fs: annotate ->poll() instances
    ipc, kernel, mm: annotate ->poll() instances
    net: annotate ->poll() instances
    apparmor: annotate ->poll() instances
    tomoyo: annotate ->poll() instances
    sound: annotate ->poll() instances
    acpi: annotate ->poll() instances
    crypto: annotate ->poll() instances
    block: annotate ->poll() instances
    x86: annotate ->poll() instances
    ...

    Linus Torvalds
     

25 Jan, 2018

1 commit


10 Jan, 2018

4 commits


02 Jan, 2018

1 commit


18 Dec, 2017

2 commits

  • Both list_lru_init() and register_shrinker() might return an error.

    Signed-off-by: Tetsuo Handa
    Cc: Sherry Yang
    Cc: Michal Hocko
    Signed-off-by: Greg Kroah-Hartman

    Tetsuo Handa
     
  • proc->files cleanup is initiated by binder_vma_close. Therefore
    a reference on the binder_proc is not enough to prevent the
    files_struct from being released while the binder_proc still has
    a reference. This can lead to an attempt to dereference the
    stale pointer obtained from proc->files prior to proc->files
    cleanup. This has been seen once in task_get_unused_fd_flags()
    when __alloc_fd() is called with a stale "files".

    The fix is to protect proc->files with a mutex to prevent cleanup
    while in use.

    Signed-off-by: Todd Kjos
    Cc: stable # 4.14
    Signed-off-by: Greg Kroah-Hartman

    Todd Kjos
     

11 Dec, 2017

1 commit


29 Nov, 2017

1 commit


28 Nov, 2017

2 commits

  • If a call to put_user() fails, we failed to
    properly free a transaction and send a failed
    reply (if necessary).

    Signed-off-by: Martijn Coenen
    Cc: stable # 4.14
    Signed-off-by: Greg Kroah-Hartman

    Martijn Coenen
     
  • This flag determines whether the thread should currently
    process the work in the thread->todo worklist.

    The prime usecase for this is improving the performance
    of synchronous transactions: all synchronous transactions
    post a BR_TRANSACTION_COMPLETE to the calling thread,
    but there's no reason to return that command to userspace
    right away - userspace anyway needs to wait for the reply.

    Likewise, a synchronous transaction that contains a binder
    object can cause a BC_ACQUIRE/BC_INCREFS to be returned to
    userspace; since the caller must anyway hold a strong/weak
    ref for the duration of the call, postponing these commands
    until the reply comes in is not a problem.

    Note that this flag is not used to determine whether a
    thread can handle process work; a thread should never pick
    up process work when thread work is still pending.

    Before patch:
    ------------------------------------------------------------------
    Benchmark Time CPU Iterations
    ------------------------------------------------------------------
    BM_sendVec_binderize/4 45959 ns 20288 ns 34351
    BM_sendVec_binderize/8 45603 ns 20080 ns 34909
    BM_sendVec_binderize/16 45528 ns 20113 ns 34863
    BM_sendVec_binderize/32 45551 ns 20122 ns 34881
    BM_sendVec_binderize/64 45701 ns 20183 ns 34864
    BM_sendVec_binderize/128 45824 ns 20250 ns 34576
    BM_sendVec_binderize/256 45695 ns 20171 ns 34759
    BM_sendVec_binderize/512 45743 ns 20211 ns 34489
    BM_sendVec_binderize/1024 46169 ns 20430 ns 34081

    After patch:
    ------------------------------------------------------------------
    Benchmark Time CPU Iterations
    ------------------------------------------------------------------
    BM_sendVec_binderize/4 42939 ns 17262 ns 40653
    BM_sendVec_binderize/8 42823 ns 17243 ns 40671
    BM_sendVec_binderize/16 42898 ns 17243 ns 40594
    BM_sendVec_binderize/32 42838 ns 17267 ns 40527
    BM_sendVec_binderize/64 42854 ns 17249 ns 40379
    BM_sendVec_binderize/128 42881 ns 17288 ns 40427
    BM_sendVec_binderize/256 42917 ns 17297 ns 40429
    BM_sendVec_binderize/512 43184 ns 17395 ns 40411
    BM_sendVec_binderize/1024 43119 ns 17357 ns 40432

    Signed-off-by: Martijn Coenen

    Signed-off-by: Greg Kroah-Hartman

    Martijn Coenen
     

17 Nov, 2017

1 commit

  • …/git/gregkh/char-misc

    Pull char/misc updates from Greg KH:
    "Here is the big set of char/misc and other driver subsystem patches
    for 4.15-rc1.

    There are small changes all over here, hyperv driver updates, pcmcia
    driver updates, w1 driver updats, vme driver updates, nvmem driver
    updates, and lots of other little one-off driver updates as well. The
    shortlog has the full details.

    All of these have been in linux-next for quite a while with no
    reported issues"

    * tag 'char-misc-4.15-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (90 commits)
    VME: Return -EBUSY when DMA list in use
    w1: keep balance of mutex locks and refcnts
    MAINTAINERS: Update VME subsystem tree.
    nvmem: sunxi-sid: add support for A64/H5's SID controller
    nvmem: imx-ocotp: Update module description
    nvmem: imx-ocotp: Enable i.MX7D OTP write support
    nvmem: imx-ocotp: Add i.MX7D timing write clock setup support
    nvmem: imx-ocotp: Move i.MX6 write clock setup to dedicated function
    nvmem: imx-ocotp: Add support for banked OTP addressing
    nvmem: imx-ocotp: Pass parameters via a struct
    nvmem: imx-ocotp: Restrict OTP write to IMX6 processors
    nvmem: uniphier: add UniPhier eFuse driver
    dt-bindings: nvmem: add description for UniPhier eFuse
    nvmem: set nvmem->owner to nvmem->dev->driver->owner if unset
    nvmem: qfprom: fix different address space warnings of sparse
    nvmem: mtk-efuse: fix different address space warnings of sparse
    nvmem: mtk-efuse: use stack for nvmem_config instead of malloc'ing it
    nvmem: imx-iim: use stack for nvmem_config instead of malloc'ing it
    thunderbolt: tb: fix use after free in tb_activate_pcie_devices
    MAINTAINERS: Add git tree for Thunderbolt development
    ...

    Linus Torvalds
     

16 Nov, 2017

1 commit

  • Pull module updates from Jessica Yu:
    "Summary of modules changes for the 4.15 merge window:

    - treewide module_param_call() cleanup, fix up set/get function
    prototype mismatches, from Kees Cook

    - minor code cleanups"

    * tag 'modules-for-v4.15' of git://git.kernel.org/pub/scm/linux/kernel/git/jeyu/linux:
    module: Do not paper over type mismatches in module_param_call()
    treewide: Fix function prototypes for module_param_call()
    module: Prepare to convert all module_param_call() prototypes
    kernel/module: Delete an error message for a failed memory allocation in add_module_usage()

    Linus Torvalds
     

31 Oct, 2017

1 commit

  • Several function prototypes for the set/get functions defined by
    module_param_call() have a slightly wrong argument types. This fixes
    those in an effort to clean up the calls when running under type-enforced
    compiler instrumentation for CFI. This is the result of running the
    following semantic patch:

    @match_module_param_call_function@
    declarer name module_param_call;
    identifier _name, _set_func, _get_func;
    expression _arg, _mode;
    @@

    module_param_call(_name, _set_func, _get_func, _arg, _mode);

    @fix_set_prototype
    depends on match_module_param_call_function@
    identifier match_module_param_call_function._set_func;
    identifier _val, _param;
    type _val_type, _param_type;
    @@

    int _set_func(
    -_val_type _val
    +const char * _val
    ,
    -_param_type _param
    +const struct kernel_param * _param
    ) { ... }

    @fix_get_prototype
    depends on match_module_param_call_function@
    identifier match_module_param_call_function._get_func;
    identifier _val, _param;
    type _val_type, _param_type;
    @@

    int _get_func(
    -_val_type _val
    +char * _val
    ,
    -_param_type _param
    +const struct kernel_param * _param
    ) { ... }

    Two additional by-hand changes are included for places where the above
    Coccinelle script didn't notice them:

    drivers/platform/x86/thinkpad_acpi.c
    fs/lockd/svc.c

    Signed-off-by: Kees Cook
    Signed-off-by: Jessica Yu

    Kees Cook
     

23 Oct, 2017

1 commit


20 Oct, 2017

2 commits


04 Oct, 2017

1 commit

  • User-space normally keeps the node alive when creating a transaction
    since it has a reference to the target. The local strong ref keeps it
    alive if the sending process dies before the target process processes
    the transaction. If the source process is malicious or has a reference
    counting bug, this can fail.

    In this case, when we attempt to decrement the node in the failure
    path, the node has already been freed.

    This is fixed by taking a tmpref on the node while constructing
    the transaction. To avoid re-acquiring the node lock and inner
    proc lock to increment the proc's tmpref, a helper is used that
    does the ref increments on both the node and proc.

    Signed-off-by: Todd Kjos
    Cc: stable
    Signed-off-by: Greg Kroah-Hartman

    Todd Kjos
     

18 Sep, 2017

3 commits

  • commit 7a4408c6bd3e ("binder: make sure accesses to proc/thread are
    safe") made a change to enqueue tcomplete to thread->todo before
    enqueuing the transaction. However, in err_dead_proc_or_thread case,
    the tcomplete is directly freed, without dequeued. It may cause the
    thread->todo list to be corrupted.

    So, dequeue it before freeing.

    Fixes: 7a4408c6bd3e ("binder: make sure accesses to proc/thread are safe")
    Signed-off-by: Xu YiPing
    Signed-off-by: Todd Kjos
    Signed-off-by: Greg Kroah-Hartman

    Xu YiPing
     
  • commit 372e3147df70 ("binder: guarantee txn complete / errors delivered
    in-order") incorrectly defined a local ret value. This ret value will
    be invalid when out of the if block

    Fixes: 372e3147df70 ("binder: refactor binder ref inc/dec for thread safety")
    Signed-off-by: Xu YiPing
    Signed-off-by: Todd Kjos
    Signed-off-by: Greg Kroah-Hartman

    Xu YiPing
     
  • Allowing binder to expose the 64-bit API on 32-bit kernels caused a
    build warning:

    drivers/android/binder.c: In function 'binder_transaction_buffer_release':
    drivers/android/binder.c:2220:15: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
    fd_array = (u32 *)(parent_buffer + fda->parent_offset);
    ^
    drivers/android/binder.c: In function 'binder_translate_fd_array':
    drivers/android/binder.c:2445:13: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]
    fd_array = (u32 *)(parent_buffer + fda->parent_offset);
    ^
    drivers/android/binder.c: In function 'binder_fixup_parent':
    drivers/android/binder.c:2511:18: error: cast to pointer from integer of different size [-Werror=int-to-pointer-cast]

    This adds extra type casts to avoid the warning.

    However, there is another problem with the Kconfig option: turning
    it on or off creates two incompatible ABI versions, a kernel that
    has this enabled cannot run user space that was built without it
    or vice versa. A better solution might be to leave the option hidden
    until the binder code is fixed to deal with both ABI versions.

    Fixes: e8d2ed7db7c3 ("Revert "staging: Fix build issues with new binder API"")
    Signed-off-by: Arnd Bergmann
    Signed-off-by: Greg Kroah-Hartman

    Arnd Bergmann
     

01 Sep, 2017

1 commit

  • This can cause issues with processes using the poll()
    interface:

    1) client sends two oneway transactions
    2) the second one gets queued on async_todo
    (because the server didn't handle the first one
    yet)
    3) server returns from poll(), picks up the
    first transaction and does transaction work
    4) server is done with the transaction, sends
    BC_FREE_BUFFER, and the second transaction gets
    moved to thread->todo
    5) libbinder's handlePolledCommands() only handles
    the commands in the current data buffer, so
    doesn't see the new transaction
    6) the server continues running and issues a new
    outgoing transaction. Now, it suddenly finds
    the incoming oneway transaction on its thread
    todo, and returns that to userspace.
    7) userspace does not expect this to happen; it
    may be holding a lock while making the outgoing
    transaction, and if handling the incoming
    trasnaction requires taking the same lock,
    userspace will deadlock.

    By queueing the async transaction to the proc
    workqueue, we make sure it's only picked up when
    a thread is ready for proc work.

    Signed-off-by: Martijn Coenen
    Signed-off-by: Greg Kroah-Hartman

    Martijn Coenen