diff mbox

ext4_file_open: Inconsistent encryption contexts (commit ff978b09f973) breaking Docker

Message ID 20160311153403.GJ8655@tucsk
State New, archived
Headers show

Commit Message

Miklos Szeredi March 11, 2016, 3:34 p.m. UTC
On Thu, Mar 10, 2016 at 09:15:06PM -0500, Theodore Ts'o wrote:
> On Fri, Mar 11, 2016 at 11:44:54AM +1100, Daniel Axtens wrote:
> > Hi,
> > 
> > Trying to run a Docker container on a mainline kernel is failing
> > intermittently, in interesting and exciting ways, such as:
> > 
> > $ docker run -it --rm --env PACKAGE=sinatra npmtest
> > operation not permitted
> > docker: Error response from daemon: Cannot start container 4fc0120a6389f25241f84527a0d31854806f6fe4fd98d019f790cea0ae7e230b: [10] System error: operation not permitted.
> > 
> > EXT4-fs warning (device sda2): ext4_file_open:402: Inconsistent encryption contexts: 27842/3691208
> 
> This could only happen if the EXT4_ENCRYPT_FL flag is set.  (I assume
> you weren't actually trying to use ext4 encryption.)  The flag can't
> be set using the FS_IOC_SETFLAGS ioctl.  It can only be set using
> EXT4_IOC_SET_ENCRYPTION_POLICY.
> 
> The only thing I can think of is that overlayfs is somehow setting or
> otherwise corrupting the i_flags.

Could you please try the following patch?

It adds more sanity checks to unlink/rmdir/rename to prevent passing an
inappropriate dentry to the underlying filesystem, which could have caused the
corruption.

Thanks,
Miklos


---
 fs/overlayfs/dir.c |   59 ++++++++++++++++++++++++++++++++++-------------------
 1 file changed, 38 insertions(+), 21 deletions(-)

--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Daniel Axtens March 11, 2016, 11:32 p.m. UTC | #1
Hi Miklos,

> Could you please try the following patch?
>
> It adds more sanity checks to unlink/rmdir/rename to prevent passing an
> inappropriate dentry to the underlying filesystem, which could have caused the
> corruption.

I've tested with your patch.

I'm still seeing similar errors but anecdotally I seem to be seeing them
at a significantly reduced rate. (I can check properly if the rate
changes if that helps.)

Errors are still like this: (I applied Ted's debug info stuff on top of
your patch)

[  246.364767] EXT4-fs warning (device sda2): ext4_file_open:388: Inconsistent encryption contexts: 49318/2952405
[  246.364767] 
[  246.365000] pathname: /home/dja/kernel/overlay/linux/include/dt-bindings/dma/nbpfaxi.h
[  246.365170] inode flags: 48000080000
[  246.365255] ------------[ cut here ]------------
[  246.365346] WARNING: at /scratch/dja/linux/fs/ext4/file.c:393
[  246.365460] Modules linked in: ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 xt_addrtype iptable_filter ip_tables xt_conntrack x_tables nf_nat nf_conntrack br_netfilter bridge stp llc overlay
[  246.366086] CPU: 4 PID: 2780 Comm: tar Tainted: G        W       4.5.0-rc7-00219-gc253bd0 #10
[  246.366252] task: c0000003e5fd5500 ti: c0000003ec0bc000 task.ti: c0000003ec0bc000
[  246.366393] NIP: c0000000005f949c LR: c0000000005f9498 CTR: c0000000000d7410
[  246.366535] REGS: c0000003ec0bf360 TRAP: 0700   Tainted: G        W        (4.5.0-rc7-00219-gc253bd0)
[  246.366713] MSR: 8000000000029033 <SF,EE,ME,IR,DR,RI,LE>  CR: 28888828  XER: 00000000
[  246.367073] CFAR: c00000000116faac SOFTE: 1 
GPR00: c0000000005f9498 c0000003ec0bf5e0 c000000002c06500 0000000000000018 
GPR04: 0000000000000001 c0000000001f15a0 0000000000000000 0000000000000001 
GPR08: 0000000000000007 0000000000000000 0000000000000001 646e69622d74642f 
GPR12: 0000000000008800 c00000000fb82400 00000000000081a4 0000000088000000 
GPR16: c00000029829e220 0000000000000000 0000000000000000 c0000003f311b810 
GPR20: c0000003e5fd5500 0000000000000000 0000000000000000 c0000000025fce38 
GPR24: 0000000000000001 c0000002982fb270 c0000003f8e0f000 c0000003e98ff420 
GPR28: c0000003f8e0e000 c000000298300000 c0000003f311b800 c0000002982fb098 
[  246.368951] NIP [c0000000005f949c] ext4_file_open+0x34c/0x4a0
[  246.369068] LR [c0000000005f9498] ext4_file_open+0x348/0x4a0
[  246.369184] Call Trace:
[  246.369238] [c0000003ec0bf5e0] [c0000000005f9498] ext4_file_open+0x348/0x4a0 (unreliable)
[  246.369404] [c0000003ec0bfae0] [c0000000004c5c04] do_dentry_open+0x2e4/0x590
[  246.369547] [c0000003ec0bfb50] [c0000000004ea0bc] path_openat+0x9ac/0x1f10
[  246.369689] [c0000003ec0bfc80] [c0000000004ed9d8] do_filp_open+0xa8/0x1a0
[  246.369836] [c0000003ec0bfdc0] [c0000000004c87e0] do_sys_open+0x1b0/0x340
[  246.369982] [c0000003ec0bfe30] [c000000000009210] system_call+0x38/0xb4
[  246.370123] Instruction dump:
[  246.370195] 419d0014 3c62fe83 38630408 48b76575 60000000 2fbf01f0 41de0150 e89ffe60 
[  246.370445] 3c62fe83 38630418 48b76559 60000000 <0fe00000> 3860ffff 4bfffdd4 60000000 
[  246.370715] ---[ end trace befd0478e64e65a3 ]---


There doesn't seem to be any pattern to the broken directories - here's
a snippet of the tar output:
tar: linux/include/dt-bindings/dma/axi-dmac.h: Cannot open: Operation not permitted
tar: linux/include/dt-bindings/dma/sun4i-a10.h: Cannot open: Operation not permitted
tar: linux/include/dt-bindings/dma/at91.h: Cannot open: Operation not permitted
tar: linux/include/dt-bindings/dma/nbpfaxi.h: Cannot open: Operation not permitted
tar: linux/include/soc/at91/at91sam9_sdramc.h: Cannot open: Operation not permitted
tar: linux/include/soc/at91/at91sam9_ddrsdr.h: Cannot open: Operation not permitted
tar: linux/drivers/isdn/hysdn/hysdn_pof.h: Cannot open: Operation not permitted
tar: linux/drivers/isdn/hysdn/Makefile: Cannot open: Operation not permitted
tar: linux/drivers/isdn/hysdn/hysdn_net.c: Cannot open: Operation not permitted
tar: linux/drivers/isdn/hysdn/hysdn_defs.h: Cannot open: Operation not permitted
tar: linux/drivers/isdn/hysdn/boardergo.c: Cannot open: Operation not permitted
tar: linux/drivers/isdn/hysdn/hysdn_init.c: Cannot open: Operation not permitted

The set of broken directories seems to be somewhat consistent if I rerun
the command within the same overlay mount (especially the first couple
of directories), but if I unmount the overlay, clean the upper and work
directories, and remount it, the set of broken directories is different.

Regards,
Daniel
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Daniel Axtens March 14, 2016, 6:47 a.m. UTC | #2
Hi all,

To make sure I wasn't crazy, I installed a mainline kernel on my x86 laptop.

It also doesn't work there, but I do get a far more detailed set of
backtraces, which I've added below. It also means it's not powerpc
specific, which should help in debugging it.

Regards,
Daniel

[  118.453138] EXT4-fs warning (device dm-1): ext4_file_open:388: Inconsistent encryption contexts: 29256/13376200

[  118.453143] pathname: /etc/passwd
[  118.453146] inode flags: 40000080000
[  118.453147] ------------[ cut here ]------------
[  118.453153] WARNING: CPU: 3 PID: 2246 at /scratch/dja/linux/fs/ext4/file.c:393 ext4_file_open+0x18a/0x2d0()
[  118.453155] Modules linked in: veth rfcomm xt_addrtype xt_conntrack ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 iptable_filter ip_tables x_tables nf_nat nf_conntrack bridge stp llc overlay bnep nls_iso8859_1 uvcvideo snd_hda_codec_hdmi btusb btrtl videobuf2_vmalloc btbcm videobuf2_memops videobuf2_v4l2 btintel intel_powerclamp bluetooth snd_hda_codec_cirrus videobuf2_core snd_hda_codec_generic videodev joydev coretemp snd_hda_intel media kvm_intel snd_hda_codec bcm5974 input_leds snd_seq_midi snd_hda_core snd_hwdep snd_seq_midi_event snd_rawmidi kvm snd_seq applesmc input_polldev snd_seq_device snd_pcm snd_timer irqbypass acpi_als snd kfifo_buf shpchp soundcore industrialio intel_ips sbs apple_gmux sbshc lpc_ich apple_bl mac_hid parport_pc ppdev
[  118.453197]  lp parport autofs4 drbg ansi_cprng algif_skcipher af_alg dm_crypt uas usb_storage hid_generic hid_appleir hid_apple usbhid hid crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel nouveau i915 aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd mxm_wmi wmi ahci ttm firewire_ohci i2c_algo_bit libahci firewire_core drm_kms_helper crc_itu_t syscopyarea tg3 sysfillrect sysimgblt fb_sys_fops ptp drm pps_core video
[  118.453224] CPU: 3 PID: 2246 Comm: docker Not tainted 4.5.0-rc7+ #1
[  118.453226] Hardware name: Apple Inc. MacBookPro6,2/Mac-F22586C8, BIOS    MBP61.88Z.0057.B0A.1005121001 05/12/10
[  118.453228]  0000000000000286 00000000df47ba90 ffff880164ab77b8 ffffffff813dc903
[  118.453230]  0000000000000000 ffffffff81cee120 ffff880164ab77f0 ffffffff810806b6
[  118.453233]  ffff8801642ca2a8 ffff880089d06c00 ffff88007978ec60 ffff880035418000
[  118.453235] Call Trace:
[  118.453243]  [<ffffffff813dc903>] dump_stack+0x63/0x90
[  118.453248]  [<ffffffff810806b6>] warn_slowpath_common+0x86/0xc0
[  118.453250]  [<ffffffff810807fa>] warn_slowpath_null+0x1a/0x20
[  118.453252]  [<ffffffff81298fda>] ext4_file_open+0x18a/0x2d0
[  118.453256]  [<ffffffff81016743>] ? __switch_to+0x253/0x5a0
[  118.453262]  [<ffffffff81812ca1>] ? __schedule+0x391/0xa30
[  118.453266]  [<ffffffffc00d889e>] ? kcryptd_io_read+0x6e/0x80 [dm_crypt]
[  118.453269]  [<ffffffff81813c60>] ? bit_wait_timeout+0xa0/0xa0
[  118.453271]  [<ffffffff81813375>] ? schedule+0x35/0x80
[  118.453274]  [<ffffffff8181661f>] ? schedule_timeout+0x22f/0x2c0
[  118.453279]  [<ffffffff815a035f>] ? scsi_request_fn+0x3f/0x640
[  118.453283]  [<ffffffff810f4afc>] ? ktime_get+0x3c/0xb0
[  118.453287]  [<ffffffff8113c78d>] ? delayacct_end+0x5d/0x70
[  118.453289]  [<ffffffff8113c8d0>] ? __delayacct_blkio_end+0x60/0xa0
[  118.453291]  [<ffffffff818128cd>] ? io_schedule_timeout+0xfd/0x140
[  118.453293]  [<ffffffff81813746>] ? __wait_on_bit+0x76/0x90
[  118.453296]  [<ffffffff81813c60>] ? bit_wait_timeout+0xa0/0xa0
[  118.453298]  [<ffffffff818137e1>] ? out_of_line_wait_on_bit+0x81/0xb0
[  118.453302]  [<ffffffff810c33a0>] ? autoremove_wake_function+0x40/0x40
[  118.453305]  [<ffffffff812cb819>] ? __ext4_ext_check+0x119/0x390
[  118.453308]  [<ffffffff81249ec2>] ? __wait_on_buffer+0x32/0x40
[  118.453310]  [<ffffffff810c2fe5>] ? wake_up_bit+0x25/0x30
[  118.453315]  [<ffffffff8122e379>] ? unlock_new_inode+0x49/0x80
[  118.453319]  [<ffffffff812a2148>] ? ext4_iget+0xa18/0xbf0
[  118.453321]  [<ffffffff81229f57>] ? __d_instantiate+0x97/0xf0
[  118.453323]  [<ffffffff81229e3c>] ? d_rehash+0x4c/0x60
[  118.453325]  [<ffffffff8122c0c7>] ? d_splice_alias+0xa7/0x2b0
[  118.453327]  [<ffffffff8122accf>] ? dput+0x2f/0x220
[  118.453332]  [<ffffffffc0847c59>] ? ovl_permission+0xe9/0x240 [overlay]
[  118.453337]  [<ffffffff812101bf>] do_dentry_open+0x1cf/0x310
[  118.453339]  [<ffffffff81298e50>] ? ext4_check_all_de+0xb0/0xb0
[  118.453341]  [<ffffffff812116b8>] vfs_open+0x58/0x60
[  118.453345]  [<ffffffff81220c7a>] path_openat+0x1ea/0x1400
[  118.453348]  [<ffffffff81223a51>] do_filp_open+0x91/0x100
[  118.453352]  [<ffffffff810a1c76>] ? __put_cred+0x46/0x50
[  118.453354]  [<ffffffff812314c6>] ? __alloc_fd+0x46/0x180
[  118.453356]  [<ffffffff81211a25>] do_sys_open+0x125/0x210
[  118.453359]  [<ffffffff81211b44>] SyS_openat+0x14/0x20
[  118.453362]  [<ffffffff818174f6>] entry_SYSCALL_64_fastpath+0x16/0x75
[  118.453364] ---[ end trace f6e9d91a0c7899ce ]---
[  118.453390] EXT4-fs warning (device dm-1): ext4_file_open:388: Inconsistent encryption contexts: 29256/13376196

[  118.453393] pathname: /etc/group
[  118.453394] inode flags: 40000080000
[  118.453395] ------------[ cut here ]------------
[  118.453397] WARNING: CPU: 3 PID: 2246 at /scratch/dja/linux/fs/ext4/file.c:393 ext4_file_open+0x18a/0x2d0()
[  118.453398] Modules linked in: veth rfcomm xt_addrtype xt_conntrack ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 iptable_filter ip_tables x_tables nf_nat nf_conntrack bridge stp llc overlay bnep nls_iso8859_1 uvcvideo snd_hda_codec_hdmi btusb btrtl videobuf2_vmalloc btbcm videobuf2_memops videobuf2_v4l2 btintel intel_powerclamp bluetooth snd_hda_codec_cirrus videobuf2_core snd_hda_codec_generic videodev joydev coretemp snd_hda_intel media kvm_intel snd_hda_codec bcm5974 input_leds snd_seq_midi snd_hda_core snd_hwdep snd_seq_midi_event snd_rawmidi kvm snd_seq applesmc input_polldev snd_seq_device snd_pcm snd_timer irqbypass acpi_als snd kfifo_buf shpchp soundcore industrialio intel_ips sbs apple_gmux sbshc lpc_ich apple_bl mac_hid parport_pc ppdev
[  118.453424]  lp parport autofs4 drbg ansi_cprng algif_skcipher af_alg dm_crypt uas usb_storage hid_generic hid_appleir hid_apple usbhid hid crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel nouveau i915 aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd mxm_wmi wmi ahci ttm firewire_ohci i2c_algo_bit libahci firewire_core drm_kms_helper crc_itu_t syscopyarea tg3 sysfillrect sysimgblt fb_sys_fops ptp drm pps_core video
[  118.453442] CPU: 3 PID: 2246 Comm: docker Tainted: G        W       4.5.0-rc7+ #1
[  118.453443] Hardware name: Apple Inc. MacBookPro6,2/Mac-F22586C8, BIOS    MBP61.88Z.0057.B0A.1005121001 05/12/10
[  118.453444]  0000000000000286 00000000df47ba90 ffff880164ab77b8 ffffffff813dc903
[  118.453447]  0000000000000000 ffffffff81cee120 ffff880164ab77f0 ffffffff810806b6
[  118.453449]  ffff8801642c9e70 ffff880157256100 ffff88007978ec60 ffff880035418000
[  118.453451] Call Trace:
[  118.453454]  [<ffffffff813dc903>] dump_stack+0x63/0x90
[  118.453456]  [<ffffffff810806b6>] warn_slowpath_common+0x86/0xc0
[  118.453458]  [<ffffffff810807fa>] warn_slowpath_null+0x1a/0x20
[  118.453460]  [<ffffffff81298fda>] ext4_file_open+0x18a/0x2d0
[  118.453462]  [<ffffffff81016743>] ? __switch_to+0x253/0x5a0
[  118.453465]  [<ffffffff81812ca1>] ? __schedule+0x391/0xa30
[  118.453467]  [<ffffffffc00d889e>] ? kcryptd_io_read+0x6e/0x80 [dm_crypt]
[  118.453470]  [<ffffffff81813c60>] ? bit_wait_timeout+0xa0/0xa0
[  118.453472]  [<ffffffff81813375>] ? schedule+0x35/0x80
[  118.453474]  [<ffffffff8181661f>] ? schedule_timeout+0x22f/0x2c0
[  118.453477]  [<ffffffff815a035f>] ? scsi_request_fn+0x3f/0x640
[  118.453481]  [<ffffffff813e24b2>] ? radix_tree_lookup_slot+0x22/0x50
[  118.453482]  [<ffffffff8124a19e>] ? bh_lru_install+0x17e/0x1c0
[  118.453485]  [<ffffffff813e24b2>] ? radix_tree_lookup_slot+0x22/0x50
[  118.453486]  [<ffffffff8124a19e>] ? bh_lru_install+0x17e/0x1c0
[  118.453489]  [<ffffffff8124a919>] ? __find_get_block+0x109/0x110
[  118.453491]  [<ffffffff812cb819>] ? __ext4_ext_check+0x119/0x390
[  118.453493]  [<ffffffff8124b0cb>] ? __getblk_gfp+0x2b/0x60
[  118.453495]  [<ffffffff810c2fe5>] ? wake_up_bit+0x25/0x30
[  118.453498]  [<ffffffff8122e379>] ? unlock_new_inode+0x49/0x80
[  118.453500]  [<ffffffff812a2148>] ? ext4_iget+0xa18/0xbf0
[  118.453502]  [<ffffffff81229f57>] ? __d_instantiate+0x97/0xf0
[  118.453504]  [<ffffffff81229e3c>] ? d_rehash+0x4c/0x60
[  118.453506]  [<ffffffff8122c0c7>] ? d_splice_alias+0xa7/0x2b0
[  118.453508]  [<ffffffff8122accf>] ? dput+0x2f/0x220
[  118.453511]  [<ffffffffc0847c59>] ? ovl_permission+0xe9/0x240 [overlay]
[  118.453514]  [<ffffffff812101bf>] do_dentry_open+0x1cf/0x310
[  118.453516]  [<ffffffff81298e50>] ? ext4_check_all_de+0xb0/0xb0
[  118.453518]  [<ffffffff812116b8>] vfs_open+0x58/0x60
[  118.453521]  [<ffffffff81220c7a>] path_openat+0x1ea/0x1400
[  118.453523]  [<ffffffff81223a51>] do_filp_open+0x91/0x100
[  118.453526]  [<ffffffff810a1c76>] ? __put_cred+0x46/0x50
[  118.453528]  [<ffffffff812314c6>] ? __alloc_fd+0x46/0x180
[  118.453530]  [<ffffffff81211a25>] do_sys_open+0x125/0x210
[  118.453532]  [<ffffffff81211b44>] SyS_openat+0x14/0x20
[  118.453534]  [<ffffffff818174f6>] entry_SYSCALL_64_fastpath+0x16/0x75
[  118.453536] ---[ end trace f6e9d91a0c7899cf ]---
[  118.582696] EXT4-fs warning (device dm-1): ext4_file_open:388: Inconsistent encryption contexts: 30168/12584552

[  118.582704] pathname: /bin/bash
[  118.582707] inode flags: 40000080000
[  118.582709] ------------[ cut here ]------------
[  118.582718] WARNING: CPU: 0 PID: 2246 at /scratch/dja/linux/fs/ext4/file.c:393 ext4_file_open+0x18a/0x2d0()
[  118.582721] Modules linked in: veth rfcomm xt_addrtype xt_conntrack ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 iptable_filter ip_tables x_tables nf_nat nf_conntrack bridge stp llc overlay bnep nls_iso8859_1 uvcvideo snd_hda_codec_hdmi btusb btrtl videobuf2_vmalloc btbcm videobuf2_memops videobuf2_v4l2 btintel intel_powerclamp bluetooth snd_hda_codec_cirrus videobuf2_core snd_hda_codec_generic videodev joydev coretemp snd_hda_intel media kvm_intel snd_hda_codec bcm5974 input_leds snd_seq_midi snd_hda_core snd_hwdep snd_seq_midi_event snd_rawmidi kvm snd_seq applesmc input_polldev snd_seq_device snd_pcm snd_timer irqbypass acpi_als snd kfifo_buf shpchp soundcore industrialio intel_ips sbs apple_gmux sbshc lpc_ich apple_bl mac_hid parport_pc ppdev
[  118.582792]  lp parport autofs4 drbg ansi_cprng algif_skcipher af_alg dm_crypt uas usb_storage hid_generic hid_appleir hid_apple usbhid hid crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel nouveau i915 aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd mxm_wmi wmi ahci ttm firewire_ohci i2c_algo_bit libahci firewire_core drm_kms_helper crc_itu_t syscopyarea tg3 sysfillrect sysimgblt fb_sys_fops ptp drm pps_core video
[  118.582836] CPU: 0 PID: 2246 Comm: docker Tainted: G        W       4.5.0-rc7+ #1
[  118.582841] Hardware name: Apple Inc. MacBookPro6,2/Mac-F22586C8, BIOS    MBP61.88Z.0057.B0A.1005121001 05/12/10
[  118.582846]  0000000000000286 00000000df47ba90 ffff880164ab7738 ffffffff813dc903
[  118.582851]  0000000000000000 ffffffff81cee120 ffff880164ab7770 ffffffff810806b6
[  118.582854]  ffff8801642eb7c0 ffff880071624400 ffff8800797b6a28 ffff880035418000
[  118.582858] Call Trace:
[  118.582869]  [<ffffffff813dc903>] dump_stack+0x63/0x90
[  118.582876]  [<ffffffff810806b6>] warn_slowpath_common+0x86/0xc0
[  118.582880]  [<ffffffff810807fa>] warn_slowpath_null+0x1a/0x20
[  118.582883]  [<ffffffff81298fda>] ext4_file_open+0x18a/0x2d0
[  118.582891]  [<ffffffff81812ca1>] ? __schedule+0x391/0xa30
[  118.582896]  [<ffffffff81813c60>] ? bit_wait_timeout+0xa0/0xa0
[  118.582899]  [<ffffffff81813375>] ? schedule+0x35/0x80
[  118.582904]  [<ffffffff8181661f>] ? schedule_timeout+0x22f/0x2c0
[  118.582911]  [<ffffffff810f4afc>] ? ktime_get+0x3c/0xb0
[  118.582919]  [<ffffffff8113c78d>] ? delayacct_end+0x5d/0x70
[  118.582925]  [<ffffffff8113c8d0>] ? __delayacct_blkio_end+0x60/0xa0
[  118.582931]  [<ffffffff818128cd>] ? io_schedule_timeout+0xfd/0x140
[  118.582937]  [<ffffffff813e24b2>] ? radix_tree_lookup_slot+0x22/0x50
[  118.582941]  [<ffffffff8124a19e>] ? bh_lru_install+0x17e/0x1c0
[  118.582945]  [<ffffffff8124a919>] ? __find_get_block+0x109/0x110
[  118.582950]  [<ffffffff812cb819>] ? __ext4_ext_check+0x119/0x390
[  118.582953]  [<ffffffff8124b0cb>] ? __getblk_gfp+0x2b/0x60
[  118.582959]  [<ffffffff810c2fe5>] ? wake_up_bit+0x25/0x30
[  118.582965]  [<ffffffff8122e379>] ? unlock_new_inode+0x49/0x80
[  118.582970]  [<ffffffff812a2148>] ? ext4_iget+0xa18/0xbf0
[  118.582974]  [<ffffffff81229f57>] ? __d_instantiate+0x97/0xf0
[  118.582978]  [<ffffffff8122accf>] ? dput+0x2f/0x220
[  118.582987]  [<ffffffffc0847c59>] ? ovl_permission+0xe9/0x240 [overlay]
[  118.582995]  [<ffffffff812101bf>] do_dentry_open+0x1cf/0x310
[  118.583001]  [<ffffffff81298e50>] ? ext4_check_all_de+0xb0/0xb0
[  118.583008]  [<ffffffff812116b8>] vfs_open+0x58/0x60
[  118.583015]  [<ffffffff81220c7a>] path_openat+0x1ea/0x1400
[  118.583020]  [<ffffffff810aaa39>] ? ttwu_do_wakeup+0x19/0xe0
[  118.583026]  [<ffffffff81223a51>] do_filp_open+0x91/0x100
[  118.583033]  [<ffffffff81385f8f>] ? apparmor_cred_prepare+0x2f/0x50
[  118.583038]  [<ffffffff81219546>] do_open_execat+0x76/0x180
[  118.583042]  [<ffffffff8121a96d>] do_execveat_common.isra.34+0x1cd/0x750
[  118.583046]  [<ffffffff81222a42>] ? getname_flags+0x72/0x1f0
[  118.583050]  [<ffffffff8121b21a>] SyS_execve+0x3a/0x50
[  118.583054]  [<ffffffff81817795>] stub_execve+0x5/0x5
[  118.583058]  [<ffffffff818174f6>] ? entry_SYSCALL_64_fastpath+0x16/0x75
[  118.583061] ---[ end trace f6e9d91a0c7899d0 ]---
[  118.583358] EXT4-fs warning (device dm-1): ext4_file_open:388: Inconsistent encryption contexts: 29256/12584870

[  118.583362] pathname: /etc/localtime
[  118.583365] inode flags: 40000080000
[  118.583367] ------------[ cut here ]------------
[  118.583372] WARNING: CPU: 0 PID: 2246 at /scratch/dja/linux/fs/ext4/file.c:393 ext4_file_open+0x18a/0x2d0()
[  118.583374] Modules linked in: veth rfcomm xt_addrtype xt_conntrack ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 iptable_filter ip_tables x_tables nf_nat nf_conntrack bridge stp llc overlay bnep nls_iso8859_1 uvcvideo snd_hda_codec_hdmi btusb btrtl videobuf2_vmalloc btbcm videobuf2_memops videobuf2_v4l2 btintel intel_powerclamp bluetooth snd_hda_codec_cirrus videobuf2_core snd_hda_codec_generic videodev joydev coretemp snd_hda_intel media kvm_intel snd_hda_codec bcm5974 input_leds snd_seq_midi snd_hda_core snd_hwdep snd_seq_midi_event snd_rawmidi kvm snd_seq applesmc input_polldev snd_seq_device snd_pcm snd_timer irqbypass acpi_als snd kfifo_buf shpchp soundcore industrialio intel_ips sbs apple_gmux sbshc lpc_ich apple_bl mac_hid parport_pc ppdev
[  118.583428]  lp parport autofs4 drbg ansi_cprng algif_skcipher af_alg dm_crypt uas usb_storage hid_generic hid_appleir hid_apple usbhid hid crct10dif_pclmul crc32_pclmul ghash_clmulni_intel aesni_intel nouveau i915 aes_x86_64 lrw gf128mul glue_helper ablk_helper cryptd mxm_wmi wmi ahci ttm firewire_ohci i2c_algo_bit libahci firewire_core drm_kms_helper crc_itu_t syscopyarea tg3 sysfillrect sysimgblt fb_sys_fops ptp drm pps_core video
[  118.583465] CPU: 0 PID: 2246 Comm: docker Tainted: G        W       4.5.0-rc7+ #1
[  118.583468] Hardware name: Apple Inc. MacBookPro6,2/Mac-F22586C8, BIOS    MBP61.88Z.0057.B0A.1005121001 05/12/10
[  118.583470]  0000000000000286 00000000df47ba90 ffff880164ab77b8 ffffffff813dc903
[  118.583474]  0000000000000000 ffffffff81cee120 ffff880164ab77f0 ffffffff810806b6
[  118.583478]  ffff8801642ebbf8 ffff880071624c00 ffff88007978ec60 ffff880035418000
[  118.583482] Call Trace:
[  118.583488]  [<ffffffff813dc903>] dump_stack+0x63/0x90
[  118.583492]  [<ffffffff810806b6>] warn_slowpath_common+0x86/0xc0
[  118.583496]  [<ffffffff810807fa>] warn_slowpath_null+0x1a/0x20
[  118.583500]  [<ffffffff81298fda>] ext4_file_open+0x18a/0x2d0
[  118.583505]  [<ffffffff81813c60>] ? bit_wait_timeout+0xa0/0xa0
[  118.583511]  [<ffffffff81813375>] ? schedule+0x35/0x80
[  118.583518]  [<ffffffff8181661f>] ? schedule_timeout+0x22f/0x2c0
[  118.583525]  [<ffffffff810f4afc>] ? ktime_get+0x3c/0xb0
[  118.583530]  [<ffffffff8113c78d>] ? delayacct_end+0x5d/0x70
[  118.583534]  [<ffffffff8113c8d0>] ? __delayacct_blkio_end+0x60/0xa0
[  118.583537]  [<ffffffff818128cd>] ? io_schedule_timeout+0xfd/0x140
[  118.583541]  [<ffffffff813e24b2>] ? radix_tree_lookup_slot+0x22/0x50
[  118.583545]  [<ffffffff8124a19e>] ? bh_lru_install+0x17e/0x1c0
[  118.583548]  [<ffffffff813e24b2>] ? radix_tree_lookup_slot+0x22/0x50
[  118.583552]  [<ffffffff8124a19e>] ? bh_lru_install+0x17e/0x1c0
[  118.583555]  [<ffffffff813e24b2>] ? radix_tree_lookup_slot+0x22/0x50
[  118.583559]  [<ffffffff8124a19e>] ? bh_lru_install+0x17e/0x1c0
[  118.583563]  [<ffffffff8124a919>] ? __find_get_block+0x109/0x110
[  118.583566]  [<ffffffff812cb819>] ? __ext4_ext_check+0x119/0x390
[  118.583570]  [<ffffffff8124b0cb>] ? __getblk_gfp+0x2b/0x60
[  118.583574]  [<ffffffff810c2fe5>] ? wake_up_bit+0x25/0x30
[  118.583578]  [<ffffffff8122e379>] ? unlock_new_inode+0x49/0x80
[  118.583582]  [<ffffffff812a2148>] ? ext4_iget+0xa18/0xbf0
[  118.583586]  [<ffffffff8122accf>] ? dput+0x2f/0x220
[  118.583589]  [<ffffffff81229f57>] ? __d_instantiate+0x97/0xf0
[  118.583592]  [<ffffffff81229e3c>] ? d_rehash+0x4c/0x60
[  118.583596]  [<ffffffff8122c0c7>] ? d_splice_alias+0xa7/0x2b0
[  118.583600]  [<ffffffff8122accf>] ? dput+0x2f/0x220
[  118.583606]  [<ffffffffc0847c59>] ? ovl_permission+0xe9/0x240 [overlay]
[  118.583611]  [<ffffffff812101bf>] do_dentry_open+0x1cf/0x310
[  118.583614]  [<ffffffff81298e50>] ? ext4_check_all_de+0xb0/0xb0
[  118.583618]  [<ffffffff812116b8>] vfs_open+0x58/0x60
[  118.583623]  [<ffffffff81220c7a>] path_openat+0x1ea/0x1400
[  118.583628]  [<ffffffff81223a51>] do_filp_open+0x91/0x100
[  118.583632]  [<ffffffff812314c6>] ? __alloc_fd+0x46/0x180
[  118.583636]  [<ffffffff81211a25>] do_sys_open+0x125/0x210
[  118.583640]  [<ffffffff81211b44>] SyS_openat+0x14/0x20
[  118.583644]  [<ffffffff818174f6>] entry_SYSCALL_64_fastpath+0x16/0x75
[  118.583647] ---[ end trace f6e9d91a0c7899d1 ]---
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

--- a/fs/overlayfs/dir.c
+++ b/fs/overlayfs/dir.c
@@ -596,21 +596,25 @@  static int ovl_remove_upper(struct dentr
 {
 	struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent);
 	struct inode *dir = upperdir->d_inode;
-	struct dentry *upper = ovl_dentry_upper(dentry);
+	struct dentry *upper;
 	int err;
 
 	inode_lock_nested(dir, I_MUTEX_PARENT);
+	upper = lookup_one_len(dentry->d_name.name, upperdir,
+			       dentry->d_name.len);
+	err = PTR_ERR(upper);
+	if (IS_ERR(upper))
+		goto out_unlock;
+
 	err = -ESTALE;
-	if (upper->d_parent == upperdir) {
-		/* Don't let d_delete() think it can reset d_inode */
-		dget(upper);
+	if (upper == ovl_dentry_upper(dentry)) {
 		if (is_dir)
 			err = vfs_rmdir(dir, upper);
 		else
 			err = vfs_unlink(dir, upper, NULL);
-		dput(upper);
 		ovl_dentry_version_inc(dentry->d_parent);
 	}
+	dput(upper);
 
 	/*
 	 * Keeping this dentry hashed would mean having to release
@@ -620,6 +624,7 @@  static int ovl_remove_upper(struct dentr
 	 */
 	if (!err)
 		d_drop(dentry);
+out_unlock:
 	inode_unlock(dir);
 
 	return err;
@@ -840,29 +845,39 @@  static int ovl_rename2(struct inode *old
 
 	trap = lock_rename(new_upperdir, old_upperdir);
 
-	olddentry = ovl_dentry_upper(old);
-	newdentry = ovl_dentry_upper(new);
-	if (newdentry) {
+
+	olddentry = lookup_one_len(old->d_name.name, old_upperdir,
+				   old->d_name.len);
+	err = PTR_ERR(olddentry);
+	if (IS_ERR(olddentry))
+		goto out_unlock;
+
+	err = -ESTALE;
+	if (olddentry != ovl_dentry_upper(old))
+		goto out_dput_old;
+
+	newdentry = lookup_one_len(new->d_name.name, new_upperdir,
+				   new->d_name.len);
+	err = PTR_ERR(newdentry);
+	if (IS_ERR(newdentry))
+		goto out_dput_old;
+
+	err = -ESTALE;
+	if (ovl_dentry_upper(new)) {
 		if (opaquedir) {
-			newdentry = opaquedir;
-			opaquedir = NULL;
+			if (newdentry != opaquedir)
+				goto out_dput;
 		} else {
-			dget(newdentry);
+			if (newdentry != ovl_dentry_upper(new))
+				goto out_dput;
 		}
 	} else {
+		if (!d_is_negative(newdentry) &&
+		    (!new_opaque || !ovl_is_whiteout(newdentry)))
+			goto out_dput;
 		new_create = true;
-		newdentry = lookup_one_len(new->d_name.name, new_upperdir,
-					   new->d_name.len);
-		err = PTR_ERR(newdentry);
-		if (IS_ERR(newdentry))
-			goto out_unlock;
 	}
 
-	err = -ESTALE;
-	if (olddentry->d_parent != old_upperdir)
-		goto out_dput;
-	if (newdentry->d_parent != new_upperdir)
-		goto out_dput;
 	if (olddentry == trap)
 		goto out_dput;
 	if (newdentry == trap)
@@ -925,6 +940,8 @@  static int ovl_rename2(struct inode *old
 
 out_dput:
 	dput(newdentry);
+out_dput_old:
+	dput(olddentry);
 out_unlock:
 	unlock_rename(new_upperdir, old_upperdir);
 out_revert_creds: