linux/fs/nfs
Trond Myklebust 3caa0c6ed7 NFS: Fix an uninitialised pointer Oops in the writeback error path
SteveD reports the following Oops:
 RIP: 0010:[<ffffffffa053461d>]  [<ffffffffa053461d>] __put_nfs_open_context+0x1d/0x100 [nfs]
 RSP: 0018:ffff880fed687b90  EFLAGS: 00010286
 RAX: 0000000000000024 RBX: 0000000000000000 RCX: 0000000000000006
 RDX: 0000000000000000 RSI: 0000000000000000 RDI: 0000000000000000
 RBP: ffff880fed687bc0 R08: 0000000000000092 R09: 000000000000047a
 R10: 0000000000000000 R11: ffff880fed6878d6 R12: ffff880fed687d20
 R13: ffff880fed687d20 R14: 0000000000000070 R15: ffffea000aa33ec0
 FS:  00007fce290f0740(0000) GS:ffff8807ffc60000(0000) knlGS:0000000000000000
 CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
 CR2: 0000000000000070 CR3: 00000007f2e79000 CR4: 00000000000007e0
 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
 DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
 Stack:
  0000000000000000 ffff880036c5e510 ffff880fed687d20 ffff880fed687d20
  ffff880036c5e200 ffffea000aa33ec0 ffff880fed687bd0 ffffffffa0534710
  ffff880fed687be8 ffffffffa053d5f0 ffff880036c5e200 ffff880fed687c08
 Call Trace:
  [<ffffffffa0534710>] put_nfs_open_context+0x10/0x20 [nfs]
  [<ffffffffa053d5f0>] nfs_pgio_data_destroy+0x20/0x40 [nfs]
  [<ffffffffa053d672>] nfs_pgio_error+0x22/0x40 [nfs]
  [<ffffffffa053d8f4>] nfs_generic_pgio+0x74/0x2e0 [nfs]
  [<ffffffffa06b18c3>] pnfs_generic_pg_writepages+0x63/0x210 [nfsv4]
  [<ffffffffa053d579>] nfs_pageio_doio+0x19/0x50 [nfs]
  [<ffffffffa053eb84>] nfs_pageio_complete+0x24/0x30 [nfs]
  [<ffffffffa053cb25>] nfs_direct_write_schedule_iovec+0x115/0x1f0 [nfs]
  [<ffffffffa053675f>] ? nfs_get_lock_context+0x4f/0x120 [nfs]
  [<ffffffffa053d252>] nfs_file_direct_write+0x262/0x420 [nfs]
  [<ffffffffa0532d91>] nfs_file_write+0x131/0x1d0 [nfs]
  [<ffffffffa0532c60>] ? nfs_need_sync_write.isra.17+0x40/0x40 [nfs]
  [<ffffffff812127b8>] do_io_submit+0x3b8/0x840
  [<ffffffff81212c50>] SyS_io_submit+0x10/0x20
  [<ffffffff81610f29>] system_call_fastpath+0x16/0x1b

This is due to the calls to nfs_pgio_error() in nfs_generic_pgio(), which
happen before the nfs_pgio_header's open context is referenced in
nfs_pgio_rpcsetup().

Reported-by: Steve Dickson <SteveD@redhat.com>
Cc: stable@vger.kernel.org # 3.16.x
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
2014-10-13 10:26:43 -04:00
..
blocklayout pnfs/blocklayout: Fix a 64-bit division/remainder issue in bl_map_stripe 2014-09-21 14:20:20 -04:00
filelayout NFSv4.1/pnfs: replace broken pnfs_put_lseg_async 2014-10-08 16:45:43 -04:00
objlayout pnfs/objlayout: fix endianess annotation in objio_alloc_deviceid_node 2014-09-12 13:20:43 -04:00
cache_lib.c NFS: simplify and clean cache library 2013-02-15 10:43:36 -05:00
cache_lib.h NFS: simplify and clean cache library 2013-02-15 10:43:36 -05:00
callback_proc.c pnfs: enable CB_NOTIFY_DEVICEID support 2014-09-12 13:33:50 -04:00
callback_xdr.c Merge branch 'labeled-nfs' into linux-next 2013-06-28 16:29:51 -04:00
callback.c nfs: do not start the callback thread until we set rqstp->rq_task 2014-09-02 17:53:30 -04:00
callback.h NFS: Add in v4.2 callback operation 2013-06-08 16:20:18 -04:00
client.c Merge branch 'bugfixes' into linux-next 2014-09-30 17:21:41 -04:00
delegation.c nfs4: add nfs4_check_delegation 2014-07-12 18:22:58 -04:00
delegation.h nfs4: add nfs4_check_delegation 2014-07-12 18:22:58 -04:00
dir.c NFS: fix two problems in lookup_revalidate in RCU-walk 2014-08-04 09:22:08 -04:00
direct.c NFS: Unconditionally enable commit code 2014-09-12 13:49:31 -04:00
dns_resolve.c NFS: Enabling v4.2 should not recompile nfsd and lockd 2013-11-19 16:20:40 -05:00
dns_resolve.h
file.c NFS/SUNRPC: Remove other deadlock-avoidance mechanisms in nfs_release_page() 2014-09-25 08:25:47 -04:00
fscache-index.c NFS: Fabricate fscache server index key correctly 2014-09-25 21:25:18 -04:00
fscache.c NFS: Use i_writecount to control whether to get an fscache cookie in nfs_open() 2013-09-27 18:40:25 +01:00
fscache.h NFS: Use i_writecount to control whether to get an fscache cookie in nfs_open() 2013-09-27 18:40:25 +01:00
getroot.c dcache: d_obtain_alias callers don't all want DISCONNECTED 2014-08-07 14:40:10 -04:00
idmap.c Merge branch 'keys-fixes' into keys-next 2014-07-22 21:55:45 +01:00
inode.c Merge branch 'client-4.2' into linux-next 2014-09-30 17:22:02 -04:00
internal.h NFS: Move v3 declarations out of internal.h 2014-09-12 13:49:40 -04:00
iostat.h
Kconfig nfs: fix pnfs Kconfig defaults 2013-11-15 13:41:43 -05:00
Makefile NFS: Implement SEEK 2014-09-30 16:24:56 -04:00
mount_clnt.c nfs: have nfs_mount fake up a auth_flavs list when the server didn't provide it 2013-06-28 15:51:51 -04:00
namespace.c nfs: use %p[dD] instead of open-coded (and often racy) equivalents 2013-10-24 23:34:50 -04:00
netns.h NFS: Fix /proc/fs/nfsfs/servers and /proc/fs/nfsfs/volumes 2014-08-04 09:28:32 -07:00
nfs.h
nfs2super.c
nfs2xdr.c NFS: Create a common results structure for reads and writes 2014-05-28 18:12:43 -04:00
nfs3_fs.h NFS: Move NFS v3 acl functions to nfs3_fs.h 2014-09-12 13:50:26 -04:00
nfs3acl.c NFSv3: Fix missing includes of nfs3_fs.h 2014-09-25 16:28:53 -04:00
nfs3client.c NFSv3: Fix missing includes of nfs3_fs.h 2014-09-25 16:28:53 -04:00
nfs3proc.c NFS: Move v3 declarations out of internal.h 2014-09-12 13:49:40 -04:00
nfs3super.c NFS: Move NFS v3 acl functions to nfs3_fs.h 2014-09-12 13:50:26 -04:00
nfs3xdr.c NFS: Create a common results structure for reads and writes 2014-05-28 18:12:43 -04:00
nfs4_fs.h Merge branch 'client-4.2' into linux-next 2014-09-30 17:22:02 -04:00
nfs4client.c NFSv4: nfs4_state_manager() vs. nfs_server_remove_lists() 2014-09-18 13:04:21 -04:00
nfs4file.c NFS: Implement SEEK 2014-09-30 16:24:56 -04:00
nfs4getroot.c NFSv4: Fix security auto-negotiation 2013-09-07 16:18:30 -04:00
nfs4namespace.c NFSv4: test SECINFO RPC_AUTH_GSS pseudoflavors for support 2014-06-24 18:46:58 -04:00
nfs4proc.c Merge branch 'client-4.2' into linux-next 2014-09-30 17:22:02 -04:00
nfs4renewd.c NFSv4.1: Fix an NFSv4.1 state renewal regression 2014-09-30 17:18:42 -04:00
nfs4session.c NFSv4.1: nfs4_destroy_session must call rpc_destroy_waitqueue 2014-02-01 15:13:39 -05:00
nfs4session.h NFSv4.1: nfs4_destroy_session must call rpc_destroy_waitqueue 2014-02-01 15:13:39 -05:00
nfs4state.c Merge branch 'bugfixes' into linux-next 2014-09-30 17:21:41 -04:00
nfs4super.c mm + fs: store shadow entries in page cache 2014-04-03 16:21:01 -07:00
nfs4sysctl.c nfs: convert use of typedef ctl_table to struct ctl_table 2014-06-06 16:08:16 -07:00
nfs4trace.c NFSv4.1: Add tracepoints for debugging slot table operations 2013-08-22 08:58:27 -04:00
nfs4trace.h nfs: merge nfs_pgio_data into _header 2014-06-24 18:47:00 -04:00
nfs4xdr.c Merge branch 'client-4.2' into linux-next 2014-09-30 17:22:02 -04:00
nfs42.h NFS: Implement SEEK 2014-09-30 16:24:56 -04:00
nfs42proc.c NFS: Implement SEEK 2014-09-30 16:24:56 -04:00
nfs42xdr.c NFS: Implement SEEK 2014-09-30 16:24:56 -04:00
nfsroot.c
nfstrace.c NFS: Add event tracing for generic NFS lookups 2013-08-22 08:58:18 -04:00
nfstrace.h NFS: fix the handling of NFS_INO_INVALID_DATA flag in nfs_revalidate_mapping 2014-01-27 15:35:56 -05:00
pagelist.c NFS: Fix an uninitialised pointer Oops in the writeback error path 2014-10-13 10:26:43 -04:00
pnfs_dev.c pnfs: remove GETDEVICELIST implementation 2014-09-12 13:20:54 -04:00
pnfs.c NFSv4.1/pnfs: replace broken pnfs_put_lseg_async 2014-10-08 16:45:43 -04:00
pnfs.h NFSv4.1/pnfs: replace broken pnfs_put_lseg_async 2014-10-08 16:45:43 -04:00
proc.c nfs: merge nfs_pgio_data into _header 2014-06-24 18:47:00 -04:00
read.c nfs: get rid of duplicate dprintk 2014-06-25 19:01:27 -04:00
super.c NFS: Remove v3 not compiled check from validate_mount_data() 2014-09-12 13:50:20 -04:00
symlink.c
sysctl.c nfs: convert use of typedef ctl_table to struct ctl_table 2014-06-06 16:08:16 -07:00
unlink.c nfs: emit a fsnotify_nameremove call in sillyrename codepath 2014-03-17 15:14:17 -04:00
write.c NFS: avoid waiting at all in nfs_release_page when congested. 2014-09-25 08:25:38 -04:00