Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp4966524imu; Mon, 12 Nov 2018 21:57:16 -0800 (PST) X-Google-Smtp-Source: AJdET5cF+b35RQi3jEDz8k9vCEZ8bQGlrgt+JUE1JTCjhwbTOna1hGJVyvja6bs0CRXoWm38drXj X-Received: by 2002:a62:1f9d:: with SMTP id l29mr1836453pfj.14.1542088636466; Mon, 12 Nov 2018 21:57:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542088636; cv=none; d=google.com; s=arc-20160816; b=HlsVbhrGBPZY7fRq33rohvgWA8gjY5QnWNDjwKDcu/UeW9RYGpvHOybnnWL0up5XM/ xNNSFc7vl8+5o6X9Hn2Wna3/tai4/M0PV3DkxLU98HH8uJv6cqZdTgXLvN5nAojKltJl bMrd3sedWlKCkafJwe0R49c8TyOmj/l8IrtSR5UcJCziLxL/rr3K7fChuVMML6hCQoi5 WwsdyuD2B3QIx7PRIl9+4cnoC2rcWqrP9gDZASMp+IJxdQOdXRJA7KN/iu8m37K1e95t moHwuEwylHDai3WrjpYyzPoN+P1g/8JOUifNvXait2mZe7Md8kwbDJ7JyBiFbdJLym1u lK+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=HjeMBhGGugoRRwDEK+aRwaFIreBjl9MvQVlEhjh8dig=; b=aEIShJXSJtd0CnsjcTwchRg+4gzH4jMdRcRh9akd7VP2eD99MHiUiZOJhgH389U4sd HTxXQCADPOffjw/47FncJ8ty2g82cM6Wd1AwGG9txhBDU9hWAXQv7JEK46LchmvDgtaC iJX82Y6ORiu6ZF7wXSc4RBz8DhMZH3lm3OVkyWzGhHOaPHXfoD7Rpej0CaXJSRwomMg1 XoGdCg/B2UQte8RM758BZnB8EQDLIj0/Olk+36BnTqnAqQMGgYvWQMBd2z+xfWmKwaLG fOGnsN1RzXkOLw3NL7gFVVOQlzzK2rDuroEGKTcgtCrhwXsCruf5nHdI/JonxzssVL/8 3lRg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=05XtQrD+; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x124-v6si21563546pfb.154.2018.11.12.21.57.01; Mon, 12 Nov 2018 21:57:16 -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=05XtQrD+; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731614AbeKMPw3 (ORCPT + 99 others); Tue, 13 Nov 2018 10:52:29 -0500 Received: from mail.kernel.org ([198.145.29.99]:35816 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731541AbeKMPs6 (ORCPT ); Tue, 13 Nov 2018 10:48:58 -0500 Received: from sasha-vm.mshome.net (unknown [64.114.255.114]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 30D312245E; Tue, 13 Nov 2018 05:52:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1542088350; bh=hzcItAcedX+yThxQ9ISycLrOD1SKkH1U4A2xr9DjgFQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=05XtQrD+PIWhE/oT3xn392xpcqm8TBVHDT36ML/7GCp7gzbEvO8eF2NxoBc5aFPyv APs4FXcoxEsOmmjPmd9vifDj7MWgvJXX02dcQAY45IIBREwERYRC0wfZI9M6J6chLU 1v4fno3HcOuNuDVkMBVfHS6r/c9Cxuezqf7zRyKo= From: Sasha Levin To: stable@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Jann Horn , Jeff Mahoney , Eric Biggers , Al Viro , Andrew Morton , Linus Torvalds , Sasha Levin , reiserfs-devel@vger.kernel.org Subject: [PATCH AUTOSEL 4.9 04/17] reiserfs: propagate errors from fill_with_dentries() properly Date: Tue, 13 Nov 2018 00:52:10 -0500 Message-Id: <20181113055223.79060-4-sashal@kernel.org> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20181113055223.79060-1-sashal@kernel.org> References: <20181113055223.79060-1-sashal@kernel.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jann Horn [ Upstream commit b10298d56c9623f9b173f19959732d3184b35f4f ] fill_with_dentries() failed to propagate errors up to reiserfs_for_each_xattr() properly. Plumb them through. Note that reiserfs_for_each_xattr() is only used by reiserfs_delete_xattrs() and reiserfs_chown_xattrs(). The result of reiserfs_delete_xattrs() is discarded anyway, the only difference there is whether a warning is printed to dmesg. The result of reiserfs_chown_xattrs() does matter because it can block chowning of the file to which the xattrs belong; but either way, the resulting state can have misaligned ownership, so my patch doesn't improve things greatly. Credit for making me look at this code goes to Al Viro, who pointed out that the ->actor calling convention is suboptimal and should be changed. Link: http://lkml.kernel.org/r/20180802163335.83312-1-jannh@google.com Signed-off-by: Jann Horn Reviewed-by: Andrew Morton Cc: Jeff Mahoney Cc: Eric Biggers Cc: Al Viro Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Signed-off-by: Sasha Levin --- fs/reiserfs/xattr.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/fs/reiserfs/xattr.c b/fs/reiserfs/xattr.c index 06a9fae202a7..9e313fc7fdc7 100644 --- a/fs/reiserfs/xattr.c +++ b/fs/reiserfs/xattr.c @@ -184,6 +184,7 @@ struct reiserfs_dentry_buf { struct dir_context ctx; struct dentry *xadir; int count; + int err; struct dentry *dentries[8]; }; @@ -206,6 +207,7 @@ fill_with_dentries(struct dir_context *ctx, const char *name, int namelen, dentry = lookup_one_len(name, dbuf->xadir, namelen); if (IS_ERR(dentry)) { + dbuf->err = PTR_ERR(dentry); return PTR_ERR(dentry); } else if (d_really_is_negative(dentry)) { /* A directory entry exists, but no file? */ @@ -214,6 +216,7 @@ fill_with_dentries(struct dir_context *ctx, const char *name, int namelen, "not found for file %pd.\n", dentry, dbuf->xadir); dput(dentry); + dbuf->err = -EIO; return -EIO; } @@ -261,6 +264,10 @@ static int reiserfs_for_each_xattr(struct inode *inode, err = reiserfs_readdir_inode(d_inode(dir), &buf.ctx); if (err) break; + if (buf.err) { + err = buf.err; + break; + } if (!buf.count) break; for (i = 0; !err && i < buf.count && buf.dentries[i]; i++) { -- 2.17.1