From patchwork Tue Jan 31 08:34:56 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amir Goldstein X-Patchwork-Id: 9546721 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id C6D0B60236 for ; Tue, 31 Jan 2017 08:35:44 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B98AE2811E for ; Tue, 31 Jan 2017 08:35:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AE5F228210; Tue, 31 Jan 2017 08:35:44 +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=-6.3 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EB3D5281A7 for ; Tue, 31 Jan 2017 08:35:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750955AbdAaIfk (ORCPT ); Tue, 31 Jan 2017 03:35:40 -0500 Received: from mail-wm0-f67.google.com ([74.125.82.67]:34096 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750913AbdAaIf2 (ORCPT ); Tue, 31 Jan 2017 03:35:28 -0500 Received: by mail-wm0-f67.google.com with SMTP id c85so82376828wmi.1; Tue, 31 Jan 2017 00:35:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=ONogHM0vfihV0hcJ0iHgnqhuTjsEGLZgR2cBfpFeE7w=; b=IkYJwn19lr0HUPQc4jFdZg0BjD/HtnApXtpRYXGYDcE2Ls2dnkZ3W1QGTAPDWEYMe0 j3Iae9N054kKImQ46s+j7szuLDcnneVDuuzXhctR3mbaW2IOF66YbyChb2l7pWfaKA36 qdztOD7t1K9/OvrDiL1VSNT5HVVvK52CfKWS4ZVkm3LIprS89P0C/pBXKTxixkjcuIOJ SCRR1IhbvnE6NCL9Qttlt/66/oL1CHFa44GNb/HtckhvmquXtGaDVBm5dDtOMl+rp3KE 0O7eJv+VG+A3vWdtuKh1bYlBWTePyY6iXx1snTkBe5QZxS2G0Lrhpy1qE6bzvWoNqkZp tUyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=ONogHM0vfihV0hcJ0iHgnqhuTjsEGLZgR2cBfpFeE7w=; b=AicyApp9wBrgkCrq12oMpar9y0AKqwTxE3tZLSzpWPQWk8wRdGzrdfY8xomD6SbeCN 53BffSzY0G4RyRWDS2K1M7T4/tROM/8QH553GSEnSmuiM3Pm1ty8eyumIWMsaF3szlnC fQL0QsvZz8e5Kok+70XD/TIFh3YpXTCUoc1tNqR7h6J2iW6Qc5habwIgxC5E4WzmCfvh 91UVLZOb6QoSuLBJwSkFS/0gTHJvG/XICUdcAnHqvGbHHurU22HB4GodeUQ+8wFXueGt 67MYjk6ImrhkBiK4I2GP83etWZ2XEMmQmYmd8lCaaTa/DKRT7lm3ozRkdPrC+hybeJfv JqKQ== X-Gm-Message-State: AIkVDXL87ohnuXAA4T2ybnF6BdD//2p7vBcSRR5QS8EDez1neJs/89IBHw9jwQpUPrSn2g== X-Received: by 10.28.43.135 with SMTP id r129mr16919223wmr.121.1485851716720; Tue, 31 Jan 2017 00:35:16 -0800 (PST) Received: from amir-VirtualBox.ctera.local (bzq-79-176-143-83.red.bezeqint.net. [79.176.143.83]) by smtp.gmail.com with ESMTPSA id i189sm22752140wmg.7.2017.01.31.00.35.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 31 Jan 2017 00:35:16 -0800 (PST) From: Amir Goldstein To: Miklos Szeredi Cc: Jan Kara , Christoph Hellwig , Al Viro , linux-unionfs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-api@vger.kernel.org Subject: [PATCH v3 2/5] vfs: deny copy_file_range() for non regular files Date: Tue, 31 Jan 2017 10:34:56 +0200 Message-Id: <1485851699-25313-3-git-send-email-amir73il@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1485851699-25313-1-git-send-email-amir73il@gmail.com> References: <1485851699-25313-1-git-send-email-amir73il@gmail.com> Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP There is no in-tree file system that implements copy_file_range() for non regular files. Deny an attempt to copy_file_range() a directory with EISDIR and any other non regualr file with EINVAL to conform with behavior of vfs_{clone,dedup}_file_range(). This change is needed prior to converting sb_start_write() to file_start_write() in the vfs helper. Cc: linux-api@vger.kernel.org Cc: Christoph Hellwig Cc: Al Viro Signed-off-by: Amir Goldstein Reviewed-by: Christoph Hellwig --- fs/read_write.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/fs/read_write.c b/fs/read_write.c index 5816d4c..511178d 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -1518,6 +1518,11 @@ ssize_t vfs_copy_file_range(struct file *file_in, loff_t pos_in, if (flags != 0) return -EINVAL; + if (S_ISDIR(inode_in->i_mode) || S_ISDIR(inode_out->i_mode)) + return -EISDIR; + if (!S_ISREG(inode_in->i_mode) || !S_ISREG(inode_out->i_mode)) + return -EINVAL; + ret = rw_verify_area(READ, file_in, &pos_in, len); if (unlikely(ret)) return ret;