Dmitry Monakhov
a41537e69b
ext4: prevent bugon on race between write/fcntl
O_DIRECT flags can be toggeled via fcntl(F_SETFL). But this value checked
twice inside ext4_file_write_iter() and __generic_file_write() which
result in BUG_ON inside ext4_direct_IO.
Let's initialize iocb->private unconditionally.
TESTCASE: xfstest:generic/036 https://patchwork.ozlabs.org/patch/402445/
#TYPICAL STACK TRACE:
kernel BUG at fs/ext4/inode.c:2960!
invalid opcode: 0000 [#1] SMP
Modules linked in: brd iTCO_wdt lpc_ich mfd_core igb ptp dm_mirror dm_region_hash dm_log dm_mod
CPU: 6 PID: 5505 Comm: aio-dio-fcntl-r Not tainted 3.17.0-rc2-00176-gff5c017 #161
Hardware name: Intel Corporation W2600CR/W2600CR, BIOS SE5C600.86B.99.99.x028.061320111235 06/13/2011
task: ffff88080e95a7c0 ti: ffff88080f908000 task.ti: ffff88080f908000
RIP: 0010:[<ffffffff811fabf2>] [<ffffffff811fabf2>] ext4_direct_IO+0x162/0x3d0
RSP: 0018:ffff88080f90bb58 EFLAGS: 00010246
RAX: 0000000000000400 RBX: ffff88080fdb2a28 RCX: 00000000a802c818
RDX: 0000040000080000 RSI: ffff88080d8aeb80 RDI: 0000000000000001
RBP: ffff88080f90bbc8 R08: 0000000000000000 R09: 0000000000001581
R10: 0000000000000000 R11: 0000000000000000 R12: ffff88080d8aeb80
R13: ffff88080f90bbf8 R14: ffff88080fdb28c8 R15: ffff88080fdb2a28
FS: 00007f23b2055700(0000) GS:ffff880818400000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f23b2045000 CR3: 000000080cedf000 CR4: 00000000000407e0
Stack:
ffff88080f90bb98 0000000000000000 7ffffffffffffffe ffff88080fdb2c30
0000000000000200 0000000000000200 0000000000000001 0000000000000200
ffff88080f90bbc8 ffff88080fdb2c30 ffff88080f90be08 0000000000000200
Call Trace:
[<ffffffff8112ca9d>] generic_file_direct_write+0xed/0x180
[<ffffffff8112f2b2>] __generic_file_write_iter+0x222/0x370
[<ffffffff811f495b>] ext4_file_write_iter+0x34b/0x400
[<ffffffff811bd709>] ? aio_run_iocb+0x239/0x410
[<ffffffff811bd709>] ? aio_run_iocb+0x239/0x410
[<ffffffff810990e5>] ? local_clock+0x25/0x30
[<ffffffff810abd94>] ? __lock_acquire+0x274/0x700
[<ffffffff811f4610>] ? ext4_unwritten_wait+0xb0/0xb0
[<ffffffff811bd756>] aio_run_iocb+0x286/0x410
[<ffffffff810990e5>] ? local_clock+0x25/0x30
[<ffffffff810ac359>] ? lock_release_holdtime+0x29/0x190
[<ffffffff811bc05b>] ? lookup_ioctx+0x4b/0xf0
[<ffffffff811bde3b>] do_io_submit+0x55b/0x740
[<ffffffff811bdcaa>] ? do_io_submit+0x3ca/0x740
[<ffffffff811be030>] SyS_io_submit+0x10/0x20
[<ffffffff815ce192>] system_call_fastpath+0x16/0x1b
Code: 01 48 8b 80 f0 01 00 00 48 8b 18 49 8b 45 10 0f 85 f1 01 00 00 48 03 45 c8 48 3b 43 48 0f 8f e3 01 00 00 49 83 7c
24 18 00 75 04 <0f> 0b eb fe f0 ff 83 ec 01 00 00 49 8b 44 24 18 8b 00 85 c0 89
RIP [<ffffffff811fabf2>] ext4_direct_IO+0x162/0x3d0
RSP <ffff88080f90bb58>
Reported-by: Sasha Levin <sasha.levin@oracle.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
Cc: stable@vger.kernel.org
2014-10-30 10:53:16 -04:00
..
2014-10-09 02:39:04 -04:00
2014-08-08 15:57:24 -07:00
2014-10-14 02:18:22 +02:00
2014-10-13 16:23:15 +02:00
2014-10-14 02:18:16 +02:00
2014-10-14 02:18:20 +02:00
2014-08-08 15:57:24 -07:00
2014-10-24 00:14:36 +02:00
2014-10-14 08:40:15 +02:00
2014-10-15 06:46:01 +02:00
2014-10-17 17:17:12 -05:00
2014-08-08 15:57:20 -07:00
2014-06-04 16:53:53 -07:00
2014-08-08 15:57:25 -07:00
2014-07-09 16:58:21 -07:00
2014-06-06 16:08:14 -07:00
2014-10-14 15:11:48 -05:00
2014-10-24 00:14:39 +02:00
2014-06-04 16:54:14 -07:00
2014-08-08 15:57:18 -07:00
2014-10-19 20:22:32 +03:00
2014-06-04 16:54:14 -07:00
2014-09-08 09:51:29 +09:00
2014-10-11 08:02:31 -04:00
2014-10-30 10:53:16 -04:00
2014-10-07 11:54:41 -07:00
2014-10-14 02:18:20 +02:00
2014-10-13 17:52:21 +01:00
2014-10-09 02:38:57 -04:00
2014-10-13 11:28:42 +02:00
2014-10-14 02:18:20 +02:00
2014-06-12 10:30:18 -07:00
2014-08-07 14:40:09 -04:00
2014-08-08 15:57:22 -07:00
2014-06-04 16:54:11 -07:00
2014-10-14 02:18:24 +02:00
2014-09-04 22:36:35 -04:00
2014-09-18 00:58:12 -04:00
2014-10-09 02:39:01 -04:00
2014-10-13 16:23:15 +02:00
2014-10-09 02:38:56 -04:00
2014-10-11 13:21:34 -04:00
2014-08-06 18:01:12 -07:00
2014-08-08 15:57:20 -07:00
2014-10-14 02:18:16 +02:00
2014-10-21 12:53:45 -07:00
2014-09-17 16:33:11 -04:00
2014-10-13 16:23:15 +02:00
2014-10-14 02:18:20 +02:00
2014-10-11 13:21:34 -04:00
2014-10-16 12:53:35 +01:00
2014-10-14 02:18:24 +02:00
2014-10-14 02:18:22 +02:00
2014-10-24 20:25:23 -04:00
2014-10-14 02:18:28 +02:00
2014-10-15 13:51:33 -07:00
2014-08-08 15:57:26 -07:00
2014-09-08 09:51:29 +09:00
2014-08-08 15:57:18 -07:00
2014-10-14 02:18:20 +02:00
2014-08-08 15:57:25 -07:00
2014-08-06 18:01:13 -07:00
2014-06-03 08:11:18 -07:00
2014-09-30 09:29:44 +03:00
2014-10-09 13:06:14 +02:00
2014-10-14 02:18:20 +02:00
2014-10-18 11:53:51 -07:00
2014-09-24 13:31:50 -04:00
2014-06-10 13:57:22 -07:00
2014-08-07 14:40:09 -04:00
2014-10-09 02:39:00 -04:00
2014-10-09 02:39:00 -04:00
2014-10-09 02:39:00 -04:00
2014-06-04 16:54:21 -07:00
2014-10-14 02:18:16 +02:00
2014-10-18 11:53:51 -07:00
2014-10-20 09:50:11 -07:00
2014-07-11 13:53:04 +03:00
2014-10-09 02:39:16 -04:00
2014-10-14 02:18:21 +02:00
2014-10-23 22:30:18 -04:00
2014-09-26 21:16:51 -04:00
2014-06-06 16:08:16 -07:00
2014-09-10 15:42:12 -07:00
2014-10-09 02:39:00 -04:00
2014-09-09 16:01:36 -04:00
2014-10-13 11:28:42 +02:00
2014-10-13 15:44:12 +02:00
2014-08-07 14:40:09 -04:00
2014-07-16 15:10:39 +02:00
2014-08-08 15:57:31 -07:00
2014-10-24 00:14:35 +02:00
2014-10-24 00:14:38 +02:00
2014-10-07 14:06:12 -04:00
2014-10-07 14:06:13 -04:00
2014-10-24 00:14:38 +02:00
2014-06-25 22:08:29 -04:00
2014-10-09 02:38:55 -04:00
2014-10-09 22:25:53 -04:00
2014-10-24 00:14:37 +02:00
2014-10-24 00:14:36 +02:00
2014-10-24 00:14:35 +02:00
2014-08-30 18:31:41 -04:00
2014-07-29 18:08:50 -07:00
2014-10-09 02:39:05 -04:00
2014-06-04 16:53:52 -07:00
2014-07-03 09:21:54 -07:00
2014-10-24 00:14:35 +02:00
2014-08-26 09:35:56 +02:00
2014-10-13 11:28:42 +02:00
2014-09-05 08:16:21 -07:00
2014-08-27 11:17:48 +02:00
2014-10-12 17:09:10 -04:00