From patchwork Mon Mar 21 12:23:11 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Austin S. Hemmelgarn" X-Patchwork-Id: 8632091 Return-Path: X-Original-To: patchwork-linux-btrfs@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id B88C9C0553 for ; Mon, 21 Mar 2016 12:23:27 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id D30AE2017E for ; Mon, 21 Mar 2016 12:23:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id E25B320125 for ; Mon, 21 Mar 2016 12:23:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755118AbcCUMXT (ORCPT ); Mon, 21 Mar 2016 08:23:19 -0400 Received: from mail-qg0-f50.google.com ([209.85.192.50]:36249 "EHLO mail-qg0-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754920AbcCUMXR (ORCPT ); Mon, 21 Mar 2016 08:23:17 -0400 Received: by mail-qg0-f50.google.com with SMTP id u110so150197977qge.3 for ; Mon, 21 Mar 2016 05:23:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=qe/LWvm/2WGnDpNYt8fd5bQBbuvaWp4VmG+kOQGaCPc=; b=uX2sn4g/Otv+wqb0mDeIouioZNisBZhrxfz0OHi5+w8VSFiffBxavsT/QrO8KouERA 02nsuS2Wa+d3pNqeoPD5oJW+hqahZh0210V6MCr/Oj4oQUxYjbPZSlRbxK+iI8CcxE91 XqNl90QAMAElV7Nff2LKTZ878ddMVtDD6OLDgCo2teGbhv5vmD+CkmWVj4LdHSUSJBOi 6PZiHTMRac0KNtfr/RZhATCPm7ePrgEwAQJutPFPia7HOfsx6h8lQow4mvoI/wSe/grM HG9fM7Gr9omt5KrmPIgtMh7YZe2XDfYUKqC6WmXBQ4TtSfm9nCIuDq6iNaFptMAHtSI/ zTkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=qe/LWvm/2WGnDpNYt8fd5bQBbuvaWp4VmG+kOQGaCPc=; b=TD2fZQ8vJ+TBRUukk+ZEcbYoxaVGtEQTkf0ygZr5wrYsLedC8HPdYanF+fPoinBjjl 2jSP0m1jKJe8rfbawbYSudl7UkCbjn3xtHbF7yYd7LMk+c4KE/XbyJ4c5Af7h/8qNDFV ksXMmMfRDVvUJgHr8xBTvebWLNnuZv+31fmCASHi3gx3PuEZFHODjYAaN/zqO/BAkVo/ 3ID7vckAfbgO6kMzoBAX17PkqDHvhLHEJi6MfS6NkeRQpzjFc3XwcRIMGRNo5+EcuECc 1xyGWek/eg30xpMiIIpQkBnBsuOpEdNbH1fUUayKAlrMnyC9ZRr17sWG2xlYipGy/H9x PVfg== X-Gm-Message-State: AD7BkJITFN89lh8n2mpXmMDVCbxCUCnLz9ie7lOsqC4F7tTZ0arHnczGG1upvmf4sDXCGA== X-Received: by 10.140.240.3 with SMTP id l3mr42338225qhc.93.1458562996444; Mon, 21 Mar 2016 05:23:16 -0700 (PDT) Received: from wild-karde.localdomain (rrcs-70-62-41-24.central.biz.rr.com. [70.62.41.24]) by smtp.googlemail.com with ESMTPSA id p129sm11982095qhp.44.2016.03.21.05.23.15 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 21 Mar 2016 05:23:15 -0700 (PDT) Received: by wild-karde.localdomain (Postfix, from userid 1000) id 12B9E1A51449; Mon, 21 Mar 2016 08:23:13 -0400 (EDT) From: "Austin S. Hemmelgarn" To: linux-btrfs@vger.kernel.org, dsterba@suse.com Cc: "Austin S. Hemmelgarn" Subject: [PATCH] btrfs-progs: fix fi du so it works in more cases Date: Mon, 21 Mar 2016 08:23:11 -0400 Message-Id: <1458562991-6882-1-git-send-email-ahferroin7@gmail.com> X-Mailer: git-send-email 2.7.4 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Currently, btrfs fi du uses open_file_or_dir(), which tries to open it's argument with o_RDWR. Because of POSIX semantics, this fails for non-root users when the file is read-only or is an executable that is being run currently, or for all users (including root) when the filesystem is read-only. THis results in a somewhat confusing 'Unknown error -1' message when trying to check such files. Switch to using open_file_or_dir3() with O_RDONLY passed in the flags, as this avoids the limitations listed above, and we have no need to write to the files anyway (and thus shouldn't be opening them writable). Signed-off-by: Austin S. Hemmelgarn --- Build and runtime tested on x86-64 with glibc. I intend to take the time at some point this week to audit all users of open_file_or_dir() and similarly change any that don't need to write to what they're opening, possibly adding a helper function to do a read-only open. cmds-fi-du.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmds-fi-du.c b/cmds-fi-du.c index 2ffd917..168fc72 100644 --- a/cmds-fi-du.c +++ b/cmds-fi-du.c @@ -438,7 +438,7 @@ static int du_add_file(const char *filename, int dirfd, ret = sprintf(pathp, "/%s", filename); pathp += ret; - fd = open_file_or_dir(path, &dirstream); + fd = open_file_or_dir3(path, &dirstream, O_RDONLY); if (fd < 0) { ret = fd; goto out;