All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Chad Austin <chadaustin@fb.com>,
	Miklos Szeredi <mszeredi@redhat.com>
Subject: [PATCH 4.19 21/44] fuse: continue to send FUSE_RELEASEDIR when FUSE_OPEN returns ENOSYS
Date: Tue, 18 Dec 2018 17:39:33 +0100	[thread overview]
Message-ID: <20181218163929.991130990@linuxfoundation.org> (raw)
In-Reply-To: <20181218163927.119623235@linuxfoundation.org>

4.19-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Chad Austin <chadaustin@fb.com>

commit 2e64ff154ce6ce9a8dc0f9556463916efa6ff460 upstream.

When FUSE_OPEN returns ENOSYS, the no_open bit is set on the connection.

Because the FUSE_RELEASE and FUSE_RELEASEDIR paths share code, this
incorrectly caused the FUSE_RELEASEDIR request to be dropped and never sent
to userspace.

Pass an isdir bool to distinguish between FUSE_RELEASE and FUSE_RELEASEDIR
inside of fuse_file_put.

Fixes: 7678ac50615d ("fuse: support clients that don't implement 'open'")
Cc: <stable@vger.kernel.org> # v3.14
Signed-off-by: Chad Austin <chadaustin@fb.com>
Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 fs/fuse/dir.c    |    2 +-
 fs/fuse/file.c   |   21 +++++++++++----------
 fs/fuse/fuse_i.h |    2 +-
 3 files changed, 13 insertions(+), 12 deletions(-)

--- a/fs/fuse/dir.c
+++ b/fs/fuse/dir.c
@@ -1439,7 +1439,7 @@ static int fuse_dir_open(struct inode *i
 
 static int fuse_dir_release(struct inode *inode, struct file *file)
 {
-	fuse_release_common(file, FUSE_RELEASEDIR);
+	fuse_release_common(file, true);
 
 	return 0;
 }
--- a/fs/fuse/file.c
+++ b/fs/fuse/file.c
@@ -87,12 +87,12 @@ static void fuse_release_end(struct fuse
 	iput(req->misc.release.inode);
 }
 
-static void fuse_file_put(struct fuse_file *ff, bool sync)
+static void fuse_file_put(struct fuse_file *ff, bool sync, bool isdir)
 {
 	if (refcount_dec_and_test(&ff->count)) {
 		struct fuse_req *req = ff->reserved_req;
 
-		if (ff->fc->no_open) {
+		if (ff->fc->no_open && !isdir) {
 			/*
 			 * Drop the release request when client does not
 			 * implement 'open'
@@ -245,10 +245,11 @@ static void fuse_prepare_release(struct
 	req->in.args[0].value = inarg;
 }
 
-void fuse_release_common(struct file *file, int opcode)
+void fuse_release_common(struct file *file, bool isdir)
 {
 	struct fuse_file *ff = file->private_data;
 	struct fuse_req *req = ff->reserved_req;
+	int opcode = isdir ? FUSE_RELEASEDIR : FUSE_RELEASE;
 
 	fuse_prepare_release(ff, file->f_flags, opcode);
 
@@ -270,7 +271,7 @@ void fuse_release_common(struct file *fi
 	 * synchronous RELEASE is allowed (and desirable) in this case
 	 * because the server can be trusted not to screw up.
 	 */
-	fuse_file_put(ff, ff->fc->destroy_req != NULL);
+	fuse_file_put(ff, ff->fc->destroy_req != NULL, isdir);
 }
 
 static int fuse_open(struct inode *inode, struct file *file)
@@ -286,7 +287,7 @@ static int fuse_release(struct inode *in
 	if (fc->writeback_cache)
 		write_inode_now(inode, 1);
 
-	fuse_release_common(file, FUSE_RELEASE);
+	fuse_release_common(file, false);
 
 	/* return value is ignored by VFS */
 	return 0;
@@ -300,7 +301,7 @@ void fuse_sync_release(struct fuse_file
 	 * iput(NULL) is a no-op and since the refcount is 1 and everything's
 	 * synchronous, we are fine with not doing igrab() here"
 	 */
-	fuse_file_put(ff, true);
+	fuse_file_put(ff, true, false);
 }
 EXPORT_SYMBOL_GPL(fuse_sync_release);
 
@@ -805,7 +806,7 @@ static void fuse_readpages_end(struct fu
 		put_page(page);
 	}
 	if (req->ff)
-		fuse_file_put(req->ff, false);
+		fuse_file_put(req->ff, false, false);
 }
 
 static void fuse_send_readpages(struct fuse_req *req, struct file *file)
@@ -1459,7 +1460,7 @@ static void fuse_writepage_free(struct f
 		__free_page(req->pages[i]);
 
 	if (req->ff)
-		fuse_file_put(req->ff, false);
+		fuse_file_put(req->ff, false, false);
 }
 
 static void fuse_writepage_finish(struct fuse_conn *fc, struct fuse_req *req)
@@ -1616,7 +1617,7 @@ int fuse_write_inode(struct inode *inode
 	ff = __fuse_write_file_get(fc, fi);
 	err = fuse_flush_times(inode, ff);
 	if (ff)
-		fuse_file_put(ff, 0);
+		fuse_file_put(ff, false, false);
 
 	return err;
 }
@@ -1930,7 +1931,7 @@ static int fuse_writepages(struct addres
 		err = 0;
 	}
 	if (data.ff)
-		fuse_file_put(data.ff, false);
+		fuse_file_put(data.ff, false, false);
 
 	kfree(data.orig_pages);
 out:
--- a/fs/fuse/fuse_i.h
+++ b/fs/fuse/fuse_i.h
@@ -749,7 +749,7 @@ void fuse_sync_release(struct fuse_file
 /**
  * Send RELEASE or RELEASEDIR request
  */
-void fuse_release_common(struct file *file, int opcode);
+void fuse_release_common(struct file *file, bool isdir);
 
 /**
  * Send FSYNC or FSYNCDIR request



  parent reply	other threads:[~2018-12-18 16:44 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-18 16:39 [PATCH 4.19 00/44] 4.19.11-stable review Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 01/44] sched/pelt: Fix warning and clean up IRQ PELT config Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 02/44] scsi: raid_attrs: fix unused variable warning Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 03/44] staging: olpc_dcon: add a missing dependency Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 04/44] slimbus: ngd: mark PM functions as __maybe_unused Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 05/44] i2c: aspeed: fix build warning Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 06/44] ARM: dts: qcom-apq8064-arrow-sd-600eval fix graph_endpoint warning Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 07/44] drm/msm: fix address space warning Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 08/44] pinctrl: sunxi: a83t: Fix IRQ offset typo for PH11 Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 09/44] aio: fix spectre gadget in lookup_ioctx Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 10/44] scripts/spdxcheck.py: always open files in binary mode Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 11/44] fs/iomap.c: get/put the page in iomap_page_create/release() Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 12/44] userfaultfd: check VM_MAYWRITE was set after verifying the uffd is registered Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 13/44] arm64: dma-mapping: Fix FORCE_CONTIGUOUS buffer clearing Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 14/44] block/bio: Do not zero user pages Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 15/44] ovl: fix decode of dir file handle with multi lower layers Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 16/44] ovl: fix missing override creds in link of a metacopy upper Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 17/44] MMC: OMAP: fix broken MMC on OMAP15XX/OMAP5910/OMAP310 Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 18/44] mmc: core: use mrq->sbc when sending CMD23 for RPMB Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 19/44] mmc: sdhci-omap: Fix DCRC error handling during tuning Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 20/44] mmc: sdhci: fix the timeout check window for clock and reset Greg Kroah-Hartman
2018-12-18 16:39   ` Greg Kroah-Hartman
2018-12-18 16:39 ` Greg Kroah-Hartman [this message]
2018-12-18 16:39 ` [PATCH 4.19 22/44] ARM: mmp/mmp2: fix cpu_is_mmp2() on mmp2-dt Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 23/44] ARM: dts: bcm2837: Fix polarity of wifi reset GPIOs Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 24/44] dm thin: send event about thin-pool state change _after_ making it Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 25/44] dm cache metadata: verify cache has blocks in blocks_are_clean_separate_dirty() Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 26/44] dm: call blk_queue_split() to impose device limits on bios Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 27/44] tracing: Fix memory leak in create_filter() Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 28/44] tracing: Fix memory leak in set_trigger_filter() Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 29/44] tracing: Fix memory leak of instance function hash filters Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 30/44] media: vb2: dont call __vb2_queue_cancel if vb2_start_streaming failed Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 31/44] powerpc/msi: Fix NULL pointer access in teardown code Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 32/44] powerpc: Look for "stdout-path" when setting up legacy consoles Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 33/44] drm/nouveau/kms: Fix memory leak in nv50_mstm_del() Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 34/44] drm/nouveau/kms/nv50-: also flush fb writes when rewinding push buffer Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 35/44] Revert "drm/rockchip: Allow driver to be shutdown on reboot/kexec" Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 36/44] drm/i915/gvt: Fix tiled memory decoding bug on BDW Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 37/44] drm/i915/execlists: Apply a full mb before execution for Braswell Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 38/44] drm/amdgpu/powerplay: Apply avfs cks-off voltages on VI Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 39/44] drm/amdkfd: add new vega10 pci ids Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 40/44] drm/amdgpu: add some additional " Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 41/44] drm/amdgpu: update smu firmware images for VI variants (v2) Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 42/44] drm/amdgpu: update SMC firmware image for polaris10 variants Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 43/44] dm zoned: Fix target BIO completion handling Greg Kroah-Hartman
2018-12-18 16:39 ` [PATCH 4.19 44/44] x86/build: Fix compiler support check for CONFIG_RETPOLINE Greg Kroah-Hartman
2018-12-18 20:26 ` [PATCH 4.19 00/44] 4.19.11-stable review shuah
2018-12-19 13:19   ` Greg Kroah-Hartman
2018-12-18 21:10 ` Dan Rue
2018-12-19 13:19   ` Greg Kroah-Hartman
2018-12-19 15:01 ` Harsh Shandilya
2018-12-19 15:14   ` Greg Kroah-Hartman
2018-12-19 17:23 ` Guenter Roeck
2018-12-19 18:37   ` Greg Kroah-Hartman

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=20181218163929.991130990@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=chadaustin@fb.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mszeredi@redhat.com \
    --cc=stable@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.