linux/drivers/misc
Frederic Barrat bdecf76e31 cxl: Fix coredump generation when cxl_get_fd() is used
If a process dumps core while owning a cxl file descriptor obtained
from an AFU driver (e.g. cxlflash) through the cxl_get_fd() API, the
following error occurs:

  [  868.027591] Unable to handle kernel paging request for data at address ...
  [  868.027778] Faulting instruction address: 0xc00000000035edb0
  cpu 0x8c: Vector: 300 (Data Access) at [c000003c688275e0]
      pc: c00000000035edb0: elf_core_dump+0xd60/0x1300
      lr: c00000000035ed80: elf_core_dump+0xd30/0x1300
      sp: c000003c68827860
     msr: 9000000100009033
     dar: c
  dsisr: 40000000
   current = 0xc000003c68780000
   paca    = 0xc000000001b73200   softe: 0        irq_happened: 0x01
      pid   = 46725, comm = hxesurelock
  enter ? for help
  [c000003c68827a60] c00000000036948c do_coredump+0xcec/0x11e0
  [c000003c68827c20] c0000000000ce9e0 get_signal+0x540/0x7b0
  [c000003c68827d10] c000000000017354 do_signal+0x54/0x2b0
  [c000003c68827e00] c00000000001777c do_notify_resume+0xbc/0xd0
  [c000003c68827e30] c000000000009838 ret_from_except_lite+0x64/0x68
  --- Exception: 300 (Data Access) at 00003fff98ad2918

The root cause is that the address_space structure for the file
doesn't define a 'host' member.

When cxl allocates a file descriptor, it's using the anonymous inode
to back the file, but allocates a private address_space for each
context. The private address_space allows to track memory allocation
for each context. cxl doesn't define the 'host' member of the address
space, i.e. the inode. We don't want to define it as the anonymous
inode, since there's no longer a 1-to-1 relation between address_space
and inode.

To fix it, instead of using the anonymous inode, we introduce a simple
pseudo filesystem so that cxl can allocate its own inodes. So we now
have one inode for each file and address_space. The pseudo filesystem
is only mounted on the first allocation of a file descriptor by
cxl_get_fd().

Tested with cxlflash.

Signed-off-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com>
Reviewed-by: Matthew R. Ochs <mrochs@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
2016-11-18 23:02:17 +11:00
..
altera-stapl
c2port
cb710
cxl cxl: Fix coredump generation when cxl_get_fd() is used 2016-11-18 23:02:17 +11:00
echo
eeprom Merge branch 'i2c/for-4.9' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux 2016-10-07 14:12:21 -07:00
genwqe GenWQE: Fix bad page access during abort of resource allocation 2016-10-28 08:25:18 -04:00
ibmasm fs: Replace CURRENT_TIME with current_time() for inode timestamps 2016-09-27 21:06:21 -04:00
lis3lv02d
mei mei: bus: fix received data size check in NFC fixup 2016-10-31 10:25:22 -06:00
mic mm: replace get_user_pages() write/force parameters with gup_flags 2016-10-19 08:11:43 -07:00
sgi-gru drivers/misc/sgi-gru/grumain.c: remove bogus 0x prefix from printk 2016-10-27 18:43:43 -07:00
sgi-xp
ti-st drivers: misc: ti-st: Use int instead of fuzzy char for callback status 2016-07-17 19:59:26 +02:00
vmw_vmci VMCI: Doorbell create and destroy fixes 2016-10-28 08:26:21 -04:00
ad525x_dpot-i2c.c
ad525x_dpot-spi.c
ad525x_dpot.c
ad525x_dpot.h
apds990x.c
apds9802als.c
arm-charlcd.c
atmel_tclib.c
atmel-ssc.c
bh1770glc.c
cs5535-mfgpt.c
ds1682.c
dummy-irq.c
enclosure.c
fsa9480.c
hmc6352.c
hpilo.c drivers/misc/hpilo: Changes to support new security states in iLO5 FW 2016-09-27 12:53:46 +02:00
hpilo.h
ics932s401.c
ioc4.c
isl29003.c
isl29020.c
Kconfig Merge 4.8-rc5 into char-misc-next 2016-09-05 08:04:07 +02:00
kgdbts.c
lattice-ecp3-config.c
lkdtm_bugs.c lkdtm: silence warnings about function declarations 2016-07-15 16:14:45 -07:00
lkdtm_core.c lkdtm: silence warnings about function declarations 2016-07-15 16:14:45 -07:00
lkdtm_heap.c lkdtm: silence warnings about function declarations 2016-07-15 16:14:45 -07:00
lkdtm_perms.c lkdtm: silence warnings about function declarations 2016-07-15 16:14:45 -07:00
lkdtm_rodata.c lkdtm: Mark lkdtm_rodata_do_nothing() notrace 2016-08-31 13:12:38 +02:00
lkdtm_usercopy.c lkdtm: adjust usercopy tests to bypass const checks 2016-09-06 12:17:30 -07:00
lkdtm.h lkdtm: silence warnings about function declarations 2016-07-15 16:14:45 -07:00
Makefile Merge 4.8-rc5 into char-misc-next 2016-09-05 08:04:07 +02:00
panel.c
pch_phub.c misc: pch_phub: Add UART_CLK quirk for Boston platform 2016-08-31 15:45:18 +02:00
phantom.c
pti.c
qcom-coincell.c ARM: qcom: silence an uninitialized variable warning 2016-05-01 14:20:04 -07:00
spear13xx_pcie_gadget.c
sram.c misc: sram: fix check of devm_ioremap*() return value 2016-04-30 14:15:56 -07:00
ti_dac7512.c
tifm_7xx1.c
tifm_core.c
tsl2550.c
vexpress-syscfg.c
vmw_balloon.c