From: Sasha Levin <sasha.levin@oracle.com>
To: stable@vger.kernel.org, stable-commits@vger.kernel.org
Cc: Al Viro <viro@zeniv.linux.org.uk>, Sasha Levin <sasha.levin@oracle.com>
Subject: [added to the 3.18 stable tree] atomic_open(): fix the handling of create_error
Date: Thu, 19 May 2016 00:15:15 -0400 [thread overview]
Message-ID: <1463631350-32182-26-git-send-email-sasha.levin@oracle.com> (raw)
In-Reply-To: <1463631350-32182-1-git-send-email-sasha.levin@oracle.com>
From: Al Viro <viro@zeniv.linux.org.uk>
This patch has been added to the 3.18 stable tree. If you have any
objections, please let us know.
===============
[ Upstream commit 10c64cea04d3c75c306b3f990586ffb343b63287 ]
* if we have a hashed negative dentry and either CREAT|EXCL on
r/o filesystem, or CREAT|TRUNC on r/o filesystem, or CREAT|EXCL
with failing may_o_create(), we should fail with EROFS or the
error may_o_create() has returned, but not ENOENT. Which is what
the current code ends up returning.
* if we have CREAT|TRUNC hitting a regular file on a read-only
filesystem, we can't fail with EROFS here. At the very least,
not until we'd done follow_managed() - we might have a writable
file (or a device, for that matter) bound on top of that one.
Moreover, the code downstream will see that O_TRUNC and attempt
to grab the write access (*after* following possible mount), so
if we really should fail with EROFS, it will happen. No need
to do that inside atomic_open().
The real logics is much simpler than what the current code is
trying to do - if we decided to go for simple lookup, ended
up with a negative dentry *and* had create_error set, fail with
create_error. No matter whether we'd got that negative dentry
from lookup_real() or had found it in dcache.
Cc: stable@vger.kernel.org # v3.6+
Acked-by: Miklos Szeredi <mszeredi@redhat.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
---
fs/namei.c | 20 ++++----------------
1 file changed, 4 insertions(+), 16 deletions(-)
diff --git a/fs/namei.c b/fs/namei.c
index 2a8ba68..e197645 100644
--- a/fs/namei.c
+++ b/fs/namei.c
@@ -2797,22 +2797,10 @@ no_open:
dentry = lookup_real(dir, dentry, nd->flags);
if (IS_ERR(dentry))
return PTR_ERR(dentry);
-
- if (create_error) {
- int open_flag = op->open_flag;
-
- error = create_error;
- if ((open_flag & O_EXCL)) {
- if (!dentry->d_inode)
- goto out;
- } else if (!dentry->d_inode) {
- goto out;
- } else if ((open_flag & O_TRUNC) &&
- S_ISREG(dentry->d_inode->i_mode)) {
- goto out;
- }
- /* will fail later, go on to get the right error */
- }
+ }
+ if (create_error && !dentry->d_inode) {
+ error = create_error;
+ goto out;
}
looked_up:
path->dentry = dentry;
--
2.5.0
next prev parent reply other threads:[~2016-05-19 4:17 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-19 4:14 [added to the 3.18 stable tree] Revert "usb: hub: do not clear BOS field during reset device" Sasha Levin
2016-05-19 4:14 ` [added to the 3.18 stable tree] timers: Use proper base migration in add_timer_on() Sasha Levin
2016-05-19 4:14 ` [added to the 3.18 stable tree] ASoC: rt5640: Correct the digital interface data select Sasha Levin
2016-05-19 4:14 ` [added to the 3.18 stable tree] regulator: s2mps11: Fix invalid selector mask and voltages for buck9 Sasha Levin
2016-05-19 4:14 ` [added to the 3.18 stable tree] libahci: save port map for forced port map Sasha Levin
2016-05-19 4:14 ` [added to the 3.18 stable tree] ata: ahci-platform: Add ports-implemented DT bindings Sasha Levin
2016-05-19 4:14 ` [added to the 3.18 stable tree] regmap: spmi: Fix regmap_spmi_ext_read in multi-byte case Sasha Levin
2016-05-19 4:14 ` [added to the 3.18 stable tree] iio: ak8975: Fix NULL pointer exception on early interrupt Sasha Levin
2016-05-19 4:14 ` [added to the 3.18 stable tree] efi: Fix out-of-bounds read in variable_matches() Sasha Levin
2016-05-19 4:14 ` [added to the 3.18 stable tree] USB: serial: cp210x: add ID for Link ECU Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] USB: serial: cp210x: add Straizona Focusers device ids Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] [media] v4l2-dv-timings.h: fix polarity for 4k formats Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] MD: make bio mergeable Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] ALSA: hda - Add dock support for ThinkPad X260 Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] workqueue: fix ghost PENDING flag while doing MQ IO Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] drm/dp/mst: Get validated port ref in drm_dp_update_payload_part1() Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] drm/dp/mst: Restore primary hub guid on resume Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] cxl: Keep IRQ mappings on context teardown Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] drm/i915: Read out the power sequencer port assignment on resume on vlv/chv Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] drm/i915/ddi: Fix eDP VDD handling during booting and suspend/resume Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] ARM: SoCFPGA: Fix secondary CPU startup in thumb2 kernel Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] IB/security: Restrict use of the write() interface Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] mm/huge_memory: replace VM_NO_THP VM_BUG_ON with actual VMA check Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] ALSA: usb-audio: Quirk for yet another Phoenix Audio devices (v2) Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] EDAC: i7core, sb_edac: Don't return NOTIFY_BAD from mce_decoder callback Sasha Levin
2016-05-19 4:15 ` Sasha Levin [this message]
2016-05-19 4:15 ` [added to the 3.18 stable tree] Drivers: hv: ring_buffer.c: fix comment style Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] Drivers: hv_vmbus: Fix signal to host condition Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] Drivers: hv: vmbus: Fix signaling logic in hv_need_to_signal_on_read() Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] powerpc: Fix bad inline asm constraint in create_zero_mask() Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] Minimal fix-up of bad hashing behavior of hash_64() Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] tracing: Don't display trigger file for events that can't be enabled Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] drm/radeon: make sure vertical front porch is at least 1 Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] MAINTAINERS: Remove asterisk from EFI directory names Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] ACPICA: Dispatcher: Update thread ID for recursive method calls Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] crypto: hash - Fix page length clamping in hash walk Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] x86/sysfb_efi: Fix valid BAR address range check Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] fs/pnode.c: treat zero mnt_group_id-s as unequal Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] propogate_mnt: Handle the first propogated copy being a slave Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] mm, cma: prevent nr_isolated_* counters from going negative Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] x86/tsc: Read all ratio bits from MSR_PLATFORM_INFO Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] parisc: Fix ptrace syscall number and return value modification Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] parisc: fix a bug when syscall number of tracee is __NR_Linux_syscalls Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] get_rock_ridge_filename(): handle malformed NM entries Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] ALSA: hda - Fix bass pin fixup for ASUS N550JX Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] ALSA: hda - Apply fix for white noise on Asus N550JV, too Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] ALSA: hda - Fix white noise on Asus UX501VW headset Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] Input: max8997-haptic - fix NULL pointer dereference Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] drm/i915: Bail out of pipe config compute loop on LPT Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] ALSA: hda - Asus N750JV external subwoofer fixup Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] ALSA: hda - Fix white noise on Asus N750JV headphone Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] ALSA: hda - Fix subwoofer pin on ASUS N751 and N551 Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] ALSA: usb-audio: Yet another Phoneix Audio device quirk Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] tools lib traceevent: Free filter tokens in process_filter() Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] tools lib traceevent: Do not reassign parg after collapse_tree() Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] workqueue: fix rebind bound workers warning Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] ocfs2: fix SGID not inherited issue Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] ocfs2: dereferencing freed pointers in ocfs2_reflink() Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] ocfs2: revert using ocfs2_acl_chmod to avoid inode cluster lock hang Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] ocfs2: fix posix_acl_create deadlock Sasha Levin
2016-05-19 4:15 ` [added to the 3.18 stable tree] nf_conntrack: avoid kernel pointer value leak in slab name Sasha Levin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1463631350-32182-26-git-send-email-sasha.levin@oracle.com \
--to=sasha.levin@oracle.com \
--cc=stable-commits@vger.kernel.org \
--cc=stable@vger.kernel.org \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox