linux/drivers/staging
Laura Abbott 0beec5004c staging: android: ashmem: Avoid deadlock with mmap/shrink
Both ashmem_mmap and ashmem_shrink take the ashmem_lock. It may
be possible for ashmem_mmap to invoke ashmem_shrink:

-000|mutex_lock(lock = 0x0)
-001|ashmem_shrink(?, sc = 0x0) <--- try to take ashmem_mutex again
-002|shrink_slab(shrink = 0xDA5F1CC0, nr_pages_scanned = 0, lru_pages
-002|=
-002|124)
-003|try_to_free_pages(zonelist = 0x0, ?, ?, ?)
-004|__alloc_pages_nodemask(gfp_mask = 21200, order = 1, zonelist =
-004|0xC11D0940,
-005|new_slab(s = 0xE4841E80, ?, node = -1)
-006|__slab_alloc.isra.43.constprop.50(s = 0xE4841E80, gfpflags =
-006|2148925462, ad
-007|kmem_cache_alloc(s = 0xE4841E80, gfpflags = 208)
-008|shmem_alloc_inode(?)
-009|alloc_inode(sb = 0xE480E800)
-010|new_inode_pseudo(?)
-011|new_inode(?)
-012|shmem_get_inode(sb = 0xE480E800, dir = 0x0, ?, dev = 0, flags =
-012|187)
-013|shmem_file_setup(?, ?, flags = 187)
-014|ashmem_mmap(?, vma = 0xC5D64210) <---- Acquire ashmem_mutex
-015|mmap_region(file = 0xDF8E2C00, addr = 1772974080, len = 233472,
-015|flags = 57,
-016|sys_mmap_pgoff(addr = 0, len = 230400, prot = 3, flags = 1, fd =
-016|157, pgoff
-017|ret_fast_syscall(asm)
-->|exception
-018|NUR:0x40097508(asm)
---|end of frame

Avoid this deadlock by using mutex_trylock in ashmem_shrink; if the mutex
is already held, do not attempt to shrink.

Change-Id: I222bbf55856d5849da813b730de0636c80966c8e
Reported-by: Matt Wagantall <mattw@codeaurora.org>
Reported-by: Syed Rameez Mustafa <rameezmustafa@codeaurora.org>
Reported-by: Osvaldo Banuelos <osvaldob@codeaurora.org>
Reported-by: Subbaraman Narayanamurthy <subbaram@codeaurora.org>
Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
2014-08-11 17:16:04 -07:00
..
android staging: android: ashmem: Avoid deadlock with mmap/shrink 2014-08-11 17:16:04 -07:00
asus_oled
bcm Staging: bcm: Fix spelling error in PHSModule.c 2013-03-11 09:16:35 -07:00
ced1401
comedi staging: comedi: complain if dma buffer allocation not supported 2013-05-13 17:38:48 -04:00
cptm1217 staging: cptm1217: Use dev_pm_ops 2013-04-08 10:20:16 -07:00
crystalhd
csr staging: single_open() leaks 2013-05-05 00:15:43 -04:00
cxt1e1 staging: single_open() leaks 2013-05-05 00:15:43 -04:00
dgrp Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2013-05-01 17:51:54 -07:00
dwc2 staging: dwc2: fix value of dma_mask 2013-05-30 21:14:30 +09:00
echo
et131x staging: et131x: cancel_work when module gets unloaded 2013-04-11 13:07:05 -07:00
frontier
ft1000 staging: single_open() leaks 2013-05-05 00:15:43 -04:00
fwserial TTY/Serial driver update for 3.10-rc1 2013-04-29 12:16:17 -07:00
gdm72xx USB: remove remaining instances of USB_SUSPEND 2013-05-15 13:44:44 -04:00
goldfish
iio staging:iio:light:tsl2x7x: fix the error handling in tsl2x7x_probe() 2013-05-22 22:14:57 +01:00
imx-drm Merge remote-tracking branch 'pfdo/drm-fixes' into drm-next 2013-05-24 10:12:22 +10:00
keucr keucr: switch to ->show_info() 2013-04-09 14:13:20 -04:00
line6 staging: line6: pod.c: fix checkpatch warning 2013-03-11 09:47:13 -07:00
media Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-media 2013-06-18 06:25:08 -10:00
netlogic Staging: netlogic: remove unused variable in xlr_net_start_xmit() 2013-03-14 15:03:56 -07:00
nvec Staging driver fixes for 3.10-rc2 2013-05-23 09:27:49 -07:00
octeon
olpc_dcon staging: olpc_dcon: return NOTIFY_DONE instead of the 0. 2013-03-25 11:02:55 -07:00
ozwpan staging/ozwpan: info leak in oz_cdev_ioctl() 2013-04-22 10:25:46 -07:00
panel
phison
quickstart
rtl8187se staging: single_open() leaks 2013-05-05 00:15:43 -04:00
rtl8192e hostap: Don't use create_proc_read_entry() 2013-04-29 15:41:56 -04:00
rtl8192u staging: single_open() leaks 2013-05-05 00:15:43 -04:00
rtl8712 rtl8712: remove redundant if statement 2013-03-11 09:49:55 -07:00
rts5139 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2013-05-01 17:51:54 -07:00
sb105x staging: sb105x: Fix typo in comments and printk 2013-03-25 11:17:33 -07:00
sbe-2t3e3
sep staging: sep: fix driver build and kconfig 2013-05-16 15:37:49 -07:00
serqt_usb2 TTY: add tty_port_tty_wakeup helper 2013-03-18 16:19:45 -07:00
silicom Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2013-05-01 17:51:54 -07:00
slicoss staging: slicoss: information leak in ETHTOOL_GSET 2013-04-05 14:17:00 -07:00
sm7xxfb staging/sm7xxfb: Convert to SIMPLE_DEV_PM_OPS 2013-03-11 09:23:43 -07:00
speakup staging: speakup: remove custom string_unescape_any_inplace 2013-04-30 17:04:03 -07:00
ste_rmi4 staging: ste_rmi4: Suppress 'ignoring return value of ‘regulator_enable()' warning 2013-05-16 15:37:49 -07:00
ti-soc-thermal staging: ti-soc-thermal: fix device removal 2013-04-08 10:35:09 -07:00
tidspbridge staging: tidspbridge: rmgr: proc.c: fix checkpatch errors 2013-03-25 11:02:56 -07:00
usbip staging: usbip: userspace: show product name in `list -l' command 2013-04-05 14:22:52 -07:00
vme staging: vme: fix for a potential NULL pointer dereference 2013-03-25 11:17:33 -07:00
vt6655 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2013-05-01 17:51:54 -07:00
vt6656 staging: vt6656: [bug] Fix missing spin lock in iwctl_siwpower. 2013-05-16 16:27:38 -07:00
winbond
wlags49_h2 staging: single_open() leaks 2013-05-05 00:15:43 -04:00
wlags49_h25
wlan-ng staging: wlan-ng: prism2usb.c: fix printk(KERN_ERR... to dev_err(dev, ... 2013-03-26 16:13:20 -07:00
xgifb staging: xgifb: rename SR15/SR13 arrays to SR18 2013-03-28 16:10:16 -07:00
zcache drivers: staging: zcache: fix compile error 2013-05-30 21:14:30 +09:00
zram zram: fix zram_bvec_read duplicate dump failure message and stat accumulation 2013-03-18 17:42:34 -07:00
zsmalloc staging/zsmalloc: don't use pgtable-mapping from modules 2013-04-23 10:34:20 -07:00
Kconfig staging: Swap zram and zsmalloc in Kconfig 2013-05-16 15:38:58 -07:00
Makefile staging: net: remove pc300 driver 2013-04-19 11:15:20 -07:00
staging.c