Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp4479724ybx; Mon, 4 Nov 2019 14:07:18 -0800 (PST) X-Google-Smtp-Source: APXvYqxVZ62l9aF5ChWwl5ZhtcBb09le8u9dkj05Tm9B2Dw7o0iB//wxglpev5rD1rL2hLabgxGc X-Received: by 2002:a50:da4b:: with SMTP id a11mr166785edk.17.1572905238639; Mon, 04 Nov 2019 14:07:18 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1572905238; cv=none; d=google.com; s=arc-20160816; b=MvJEHYLwOiy1+hGmxFmms/bkuVhfV7RGi6MKI6jxabL1v5z6ELz2E9fnp2cwXYHuJq 7aLfZGwn9lhSMyrcQB10BfeiM1gNDg5Cv4tqFqTzissGRiSsYnn00VezwopBu/j1ajDZ D7wGxY2cDhLEJ3NOdhadR6dauaHYELUVr1n61o9nfWTHL9j8IUw9vEkftq6t9JlrBK0B ci7HgJWHtaN7Hx2CcZryJzVIqMqGn8DKo9mepfPro08xibtREYa03SiIluYtIwlsaVF1 fc3wuvaVnMbceLu/c9oErRED2QBHKyoPiXB3Xij1cqHN5g62/bUKUubQJp4S2Q7kn+eL BNNw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=rLrFFhwciIhIFndj5xsLf4XFgeh+JspPF3X7kMrb/jE=; b=EFV7wGVY0yYIwLev6JwcBPEgYF2fkyWpgJLber9mJNoyDzKo90t6bOWFnlN2nzQyWH 9TbCalnpR/GZ9v8BpTqPIQFZmEZJtypXu2elKzxOd0G8dr9tah1AWvkHFRCthlKvKNn3 vccXDXs9jMtrKzfgGzNi9NPU0w+6JiOlpivsceN5WT/3658zTjwifZvbnLbP/26dW8qL VOPHeYzBypsEvzXetVlcVOXpjmvmY7WZvCIavKlvwcxsoslRWI/sMom/I5vIFytDPSs+ rAbHJzU0WzelADrJH9w6yapVwdGzTUj/6duTCHARshQRQpuONoqwLSTmxvCBi8UXklt1 LYTA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=oziGq8xa; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id hh19si5300986ejb.209.2019.11.04.14.06.55; Mon, 04 Nov 2019 14:07:18 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=oziGq8xa; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388652AbfKDWDk (ORCPT + 99 others); Mon, 4 Nov 2019 17:03:40 -0500 Received: from mail.kernel.org ([198.145.29.99]:59802 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389087AbfKDWBi (ORCPT ); Mon, 4 Nov 2019 17:01:38 -0500 Received: from localhost (6.204-14-84.ripe.coltfrance.com [84.14.204.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 2E42420650; Mon, 4 Nov 2019 22:01:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572904897; bh=LN3pOAGIxZ66jPntdrpnUowIsKY7cW+l7CP/2kwr/hY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=oziGq8xa0FCcm7NJEiiPIpOrI1FsPhSiZKv0K+ns1UFuldzv4vmWayurmGUUq20d9 o5HeVCJS8Ro+yMZewMEw96O0/r1Zl9QdKvBpdO8IG4KevFGV78DTe+U2uc7x/t1699 FfoFKqblZlswZIxoiLQ64p3rigEoWLVD5ocPsoGw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Giuseppe Scrivano , Miklos Szeredi Subject: [PATCH 4.19 109/149] fuse: flush dirty data/metadata before non-truncate setattr Date: Mon, 4 Nov 2019 22:45:02 +0100 Message-Id: <20191104212144.059394803@linuxfoundation.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191104212126.090054740@linuxfoundation.org> References: <20191104212126.090054740@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Miklos Szeredi commit b24e7598db62386a95a3c8b9c75630c5d56fe077 upstream. If writeback cache is enabled, then writes might get reordered with chmod/chown/utimes. The problem with this is that performing the write in the fuse daemon might itself change some of these attributes. In such case the following sequence of operations will result in file ending up with the wrong mode, for example: int fd = open ("suid", O_WRONLY|O_CREAT|O_EXCL); write (fd, "1", 1); fchown (fd, 0, 0); fchmod (fd, 04755); close (fd); This patch fixes this by flushing pending writes before performing chown/chmod/utimes. Reported-by: Giuseppe Scrivano Tested-by: Giuseppe Scrivano Fixes: 4d99ff8f12eb ("fuse: Turn writeback cache on") Cc: # v3.15+ Signed-off-by: Miklos Szeredi Signed-off-by: Greg Kroah-Hartman --- fs/fuse/dir.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c @@ -1665,6 +1665,19 @@ int fuse_do_setattr(struct dentry *dentr if (attr->ia_valid & ATTR_SIZE) is_truncate = true; + /* Flush dirty data/metadata before non-truncate SETATTR */ + if (is_wb && S_ISREG(inode->i_mode) && + attr->ia_valid & + (ATTR_MODE | ATTR_UID | ATTR_GID | ATTR_MTIME_SET | + ATTR_TIMES_SET)) { + err = write_inode_now(inode, true); + if (err) + return err; + + fuse_set_nowrite(inode); + fuse_release_nowrite(inode); + } + if (is_truncate) { fuse_set_nowrite(inode); set_bit(FUSE_I_SIZE_UNSTABLE, &fi->state);