From patchwork Wed Oct 10 00:13:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Darrick J. Wong" X-Patchwork-Id: 10633549 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4295816B1 for ; Wed, 10 Oct 2018 00:13:19 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2D880284C9 for ; Wed, 10 Oct 2018 00:13:19 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1DE6228C31; Wed, 10 Oct 2018 00:13:19 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-3.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 853C2284C9 for ; Wed, 10 Oct 2018 00:13:18 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8E7186B0277; Tue, 9 Oct 2018 20:13:17 -0400 (EDT) Delivered-To: linux-mm-outgoing@kvack.org Received: by kanga.kvack.org (Postfix, from userid 40) id 86D7D6B0278; Tue, 9 Oct 2018 20:13:17 -0400 (EDT) X-Original-To: int-list-linux-mm@kvack.org X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 710F76B0279; Tue, 9 Oct 2018 20:13:17 -0400 (EDT) X-Original-To: linux-mm@kvack.org X-Delivered-To: linux-mm@kvack.org Received: from mail-pf1-f199.google.com (mail-pf1-f199.google.com [209.85.210.199]) by kanga.kvack.org (Postfix) with ESMTP id 2C0096B0277 for ; Tue, 9 Oct 2018 20:13:17 -0400 (EDT) Received: by mail-pf1-f199.google.com with SMTP id 8-v6so3240686pfr.0 for ; Tue, 09 Oct 2018 17:13:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:dkim-signature:subject:from:to:cc:date :message-id:in-reply-to:references:user-agent:mime-version :content-transfer-encoding; bh=Nl7YIofRRChjcrmNR29R1ufLWDq1ojIHa7FYh4XBYYI=; b=TWMg8YrLGgNxW9EufO/I+rvNKnkRBsY1TyHXWh8D8u7lEIbTDDY8zUnoUy2NWk8yJT 41LTiJWr0co4nk98eqIYmAiypikFJRxl1523JacSDeO2ooowXcMMHEe3M1Ugy70rP1sp K9Bpguzp3RcB5Adhi9WUx2eqxC9DYhelK0c7yQRD8qhk8YBf0uAQ6IxTDDqj8e4A/iiJ xQ7hT+HtZa6KWrkjY/lTvdAKLb4NT8RsoJkwC3ZTWetlHwW9ni6KieFTqWjI98BDS4P3 iafOBvqiqjNx6JdynxefIGyNeu5may3u2iAwdXCsfcloPAsG1qkXY6TRzNKU2CfPs4IT tjXg== X-Gm-Message-State: ABuFfoh9t2eBx1WG3SMwLQZZ+CykBBq1zzSqS7KSAANv8YvcFj7WqbdR YGg6vwddoDblqwKPp0s8E3F5g2W1DcKJgPj1h3i/mgclenmbA+YY7uIEyLTohN8EGkiqBEWd2tk IkMoSkAcVYGcLniFZdSF9lUskpvUaVYJBiYyM9nGgD9BdP8ITvbN3dOBKki+Cwj4L7Q== X-Received: by 2002:a62:b604:: with SMTP id j4-v6mr32394732pff.199.1539130396799; Tue, 09 Oct 2018 17:13:16 -0700 (PDT) X-Google-Smtp-Source: ACcGV62TqMkubpKRQ3pCtgdweR7k87Q4/qGWAYWLIxFz+8OyfI1PR5gomkTl/z51w/iDEp2C+Vs9 X-Received: by 2002:a62:b604:: with SMTP id j4-v6mr32394685pff.199.1539130395978; Tue, 09 Oct 2018 17:13:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1539130395; cv=none; d=google.com; s=arc-20160816; b=iUWMWmxjI2UL748elebZQ+x73ws0HoEAGbKx4bJqqmGC00HLaW3OqGhOXapJzVrCw+ /111EirjYrphf2EW9P4q0g6bnwF19A2EHGPjFjb8oZ+G0DMe5adjP3AAU8ur6Nx4dRww IlJvVIdHLInWYVJn20T/H7aW3npwyZkcydZHOP/MumG32mhKxAo31/SRW5tmXyjTHk8y MKsyWul4FiLIxzqrHhtwCVqOs6Zg9g+m6ax4p+y3c4a/cCjLXKCNCMBYn+RIVjsX+nzW VrdwyS8TIwae7Vyv3x48b61GfSK/Hz9jSeGLt34EBLKQOZsZIYYSnOAfPPT+V+KBN6uF aeyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:user-agent:references :in-reply-to:message-id:date:cc:to:from:subject:dkim-signature; bh=Nl7YIofRRChjcrmNR29R1ufLWDq1ojIHa7FYh4XBYYI=; b=f4FLNj/wPEX67ugfTe4mLRPiaivSsgQLA05sJm0Bcj20dup5ytrO+rAV2ebY6H9dvo dU0kv9PoKGVi3Ag3dNuB55HP4AkJJg/uRi3v1uQJhIRYfwPjMV+omNuqSUubPgWGItSA 1ans1Si4RTcNf1ddN8g/VqtY+EOggNLDBDWVkXm4070Fx612r01ud+waUgvVYCBToYSf 70gjrkSq9o+ikyKj49yOz2/EnuZw601Fm13RMaDw4ts5HayF8XdhU7tHHCXuU/+72wEW b/8/dLTnXarXrEj9wuvG/bh3FBwx6PqnSIygYryWwlTEY0tcodIDhnE4yszhc9efaHMk ZGjg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2018-07-02 header.b=Jr1HMN44; spf=pass (google.com: domain of darrick.wong@oracle.com designates 156.151.31.85 as permitted sender) smtp.mailfrom=darrick.wong@oracle.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: from userp2120.oracle.com (userp2120.oracle.com. [156.151.31.85]) by mx.google.com with ESMTPS id k9-v6si23537429pfg.57.2018.10.09.17.13.15 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 09 Oct 2018 17:13:15 -0700 (PDT) Received-SPF: pass (google.com: domain of darrick.wong@oracle.com designates 156.151.31.85 as permitted sender) client-ip=156.151.31.85; Authentication-Results: mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2018-07-02 header.b=Jr1HMN44; spf=pass (google.com: domain of darrick.wong@oracle.com designates 156.151.31.85 as permitted sender) smtp.mailfrom=darrick.wong@oracle.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=oracle.com Received: from pps.filterd (userp2120.oracle.com [127.0.0.1]) by userp2120.oracle.com (8.16.0.22/8.16.0.22) with SMTP id w9A08bwF083047; Wed, 10 Oct 2018 00:13:15 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=subject : from : to : cc : date : message-id : in-reply-to : references : mime-version : content-type : content-transfer-encoding; s=corp-2018-07-02; bh=Nl7YIofRRChjcrmNR29R1ufLWDq1ojIHa7FYh4XBYYI=; b=Jr1HMN44d0gF/DymgWS2ST5eID/yTRT++1jMdP95477AjHkR2NpINGiZtch+SJSqvPRG ZNcz1Vte3xMbO+zwgu/Ng3ni4okCFXEpvOMDs2ZKM25myCmGk1pUX8CvicCphOJ+hUlU eoaEDlGnmRvUUprKYGBv30jcQQihlQ7KEzm55qXi5vZXM5nJQSxbyAqhSjjkXjSso30z +XDtVtWnLce+cYiNoOvJa35l4LUuNSiNfMT20MPuL17niqKoHwNk8yhJHgPxav+FvvNb vrg3gNmX0vVh2TK7agJzETkL/d/NfnLmPP9nKbq0Ky5qsAkhDV0F2L1Eiy1HoBaYmazx hA== Received: from userv0022.oracle.com (userv0022.oracle.com [156.151.31.74]) by userp2120.oracle.com with ESMTP id 2mxnpr0p5y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 10 Oct 2018 00:13:15 +0000 Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0022.oracle.com (8.14.4/8.14.4) with ESMTP id w9A0D9Mi013369 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 10 Oct 2018 00:13:09 GMT Received: from abhmp0014.oracle.com (abhmp0014.oracle.com [141.146.116.20]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id w9A0D8GO003654; Wed, 10 Oct 2018 00:13:08 GMT Received: from localhost (/10.159.249.114) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Wed, 10 Oct 2018 00:13:08 +0000 Subject: [PATCH 11/25] vfs: create generic_remap_file_range_touch to update inode metadata From: "Darrick J. Wong" To: david@fromorbit.com, darrick.wong@oracle.com Cc: sandeen@redhat.com, linux-nfs@vger.kernel.org, linux-cifs@vger.kernel.org, linux-unionfs@vger.kernel.org, linux-xfs@vger.kernel.org, linux-mm@kvack.org, linux-btrfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, ocfs2-devel@oss.oracle.com Date: Tue, 09 Oct 2018 17:13:06 -0700 Message-ID: <153913038664.32295.8625558259109244112.stgit@magnolia> In-Reply-To: <153913023835.32295.13962696655740190941.stgit@magnolia> References: <153913023835.32295.13962696655740190941.stgit@magnolia> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=9041 signatures=668706 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1807170000 definitions=main-1810100000 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: X-Virus-Scanned: ClamAV using ClamSMTP From: Darrick J. Wong Create a new VFS helper to handle inode metadata updates when remapping into a file. If the operation can possibly alter the file contents, we must update the ctime and mtime and remove security privileges, just like we do for regular file writes. Wire up ocfs2 to ensure consistent behavior. Signed-off-by: Darrick J. Wong --- fs/ocfs2/refcounttree.c | 8 ++++++++ fs/read_write.c | 24 ++++++++++++++++++++++++ fs/xfs/xfs_reflink.c | 29 +++++++---------------------- include/linux/fs.h | 1 + 4 files changed, 40 insertions(+), 22 deletions(-) diff --git a/fs/ocfs2/refcounttree.c b/fs/ocfs2/refcounttree.c index 36c56dfbe485..ee1ed11379b3 100644 --- a/fs/ocfs2/refcounttree.c +++ b/fs/ocfs2/refcounttree.c @@ -4855,6 +4855,14 @@ int ocfs2_reflink_remap_range(struct file *file_in, if (ret <= 0) goto out_unlock; + /* + * Update inode timestamps and remove security privileges before we + * take the ilock. + */ + ret = generic_remap_file_range_touch(file_out, is_dedupe); + if (ret) + goto out_unlock; + /* Lock out changes to the allocation maps and remap. */ down_write(&OCFS2_I(inode_in)->ip_alloc_sem); if (!same_inode) diff --git a/fs/read_write.c b/fs/read_write.c index b4acfb45d916..020bb7fdf431 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -1790,6 +1790,30 @@ int generic_remap_file_range_prep(struct file *file_in, loff_t pos_in, } EXPORT_SYMBOL(generic_remap_file_range_prep); +/* Update inode timestamps and remove security privileges when remapping. */ +int generic_remap_file_range_touch(struct file *file, bool is_dedupe) +{ + int ret; + + /* If can't alter the file contents, we're done. */ + if (is_dedupe) + return 0; + + /* Update the timestamps, since we can alter file contents. */ + if (!(file->f_mode & FMODE_NOCMTIME)) { + ret = file_update_time(file); + if (ret) + return ret; + } + + /* + * Clear the security bits if the process is not being run by root. + * This keeps people from modifying setuid and setgid binaries. + */ + return file_remove_privs(file); +} +EXPORT_SYMBOL(generic_remap_file_range_touch); + int do_clone_file_range(struct file *file_in, loff_t pos_in, struct file *file_out, loff_t pos_out, u64 len) { diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c index 4cf1e52efbff..0d67b2d0b3d4 100644 --- a/fs/xfs/xfs_reflink.c +++ b/fs/xfs/xfs_reflink.c @@ -1330,28 +1330,13 @@ xfs_reflink_remap_prep( truncate_inode_pages_range(&inode_out->i_data, pos_out, PAGE_ALIGN(pos_out + *len) - 1); - /* If we're altering the file contents... */ - if (!is_dedupe) { - /* - * ...update the timestamps (which will grab the ilock again - * from xfs_fs_dirty_inode, so we have to call it before we - * take the ilock). - */ - if (!(file_out->f_mode & FMODE_NOCMTIME)) { - ret = file_update_time(file_out); - if (ret) - goto out_unlock; - } - - /* - * ...clear the security bits if the process is not being run - * by root. This keeps people from modifying setuid and setgid - * binaries. - */ - ret = file_remove_privs(file_out); - if (ret) - goto out_unlock; - } + /* + * Update inode timestamps and remove security privileges before we + * take the ilock. + */ + ret = generic_remap_file_range_touch(file_out, is_dedupe); + if (ret) + goto out_unlock; return 1; out_unlock: diff --git a/include/linux/fs.h b/include/linux/fs.h index d8f90bdd34e2..661b9ef32d2b 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -1833,6 +1833,7 @@ extern ssize_t vfs_copy_file_range(struct file *, loff_t , struct file *, extern int generic_remap_file_range_prep(struct file *file_in, loff_t pos_in, struct file *file_out, loff_t pos_out, u64 *count, bool is_dedupe); +extern int generic_remap_file_range_touch(struct file *file, bool is_dedupe); extern int do_clone_file_range(struct file *file_in, loff_t pos_in, struct file *file_out, loff_t pos_out, u64 len); extern int vfs_clone_file_range(struct file *file_in, loff_t pos_in,