Received: by 2002:a05:6358:45e:b0:b5:b6eb:e1f9 with SMTP id 30csp2027622rwe; Fri, 2 Sep 2022 07:32:41 -0700 (PDT) X-Google-Smtp-Source: AA6agR4BAgD2utSCP520xPZWxAqexYhWnUV5pCCnUzoHiVfwPyFn20fhNe9ndmgwDwEyOXECBvyM X-Received: by 2002:a17:90b:3b92:b0:1fe:b74:3de0 with SMTP id pc18-20020a17090b3b9200b001fe0b743de0mr5189676pjb.217.1662129160981; Fri, 02 Sep 2022 07:32:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662129160; cv=none; d=google.com; s=arc-20160816; b=WN3RTCg+4wemOGmeX7uDNv5YdI1QonqJ31+2C9lmZfJgTSvLwzo5T7w4ya4CyrRt/b BZZZKvyYgErAU7T8luzkR1EriAH5c+gvbbmuYQAboMsIp3Rj9ibpIuH/9ubTbCOTvWoB R++c3wGLpDKw3wgpqo5pv663Za+FwAYtQS4uUyXlMR7sO1rTvOO0Pv06mGe8pzBAAuAq S7nQK7j1jRN4h1YxY0ZTTbpUOVoCoJZTm5iMlBEpjkoT83cU+TUP3/A7w9ewBYW8TtPN Uy2gRt6GCPT7MxtqmYPF0JfoFmSRUYDdA9eO8hZNG4XPk0lyDK/xK8VIWrkGVGy/S9of ggHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=fx3Gzt8wfZFUys/FJ7p4nDrMXCk9De/E7u182YxZvls=; b=GWX/8YRvaBayNsFWP7FtotQYCVsf6RzYVSnWDtJX7ThIrD8u9mxxNSmd12wIWns09d 8r2Qp8Yz3dxrj4wn5o8kxqH+VeHDghEPS85lCvk+cvqHNcnKxtZuHpmhm1GpX6HPscJl Mu5v3D53SMIFJqh/B1ZqN6aT/zjAB6xssSSvTOLNcw3i2c1y7aG9KiRtULMMSb9fIt6l i1J1EBrqgbleUFvfwFIV0LuKerxYW4Q4o0JNOrGDEgwkZuBktz+laluRN8CHwagFOdpG pAea5M5lyYjtpnbUSgMmf9wYbsQ/mwUgaHIYocD9SlhfMoBzfZrVIKpZB6n5hSwk+5O7 lZgA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=k98pZMiX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o1-20020a17090a4e8100b001fd9335c4a5si2137194pjh.108.2022.09.02.07.32.25; Fri, 02 Sep 2022 07:32:40 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=k98pZMiX; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236110AbiIBM0d (ORCPT + 99 others); Fri, 2 Sep 2022 08:26:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48408 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236170AbiIBMZw (ORCPT ); Fri, 2 Sep 2022 08:25:52 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9FD25D3448; Fri, 2 Sep 2022 05:23:28 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 510FBB82A98; Fri, 2 Sep 2022 12:22:30 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9FCF5C433D6; Fri, 2 Sep 2022 12:22:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1662121349; bh=BMQq+XVOq16fiD117B6x9rrAbs3XfQzw3IPiWDPqzlM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=k98pZMiX/xotA2hQ+7pgESch6InwX8at3M2ddZAMxQdYAFb9z7DphPqODvl0foCsR AIXAridBcMMCYnF9AX2sk7UcWVtUUiV9i5StDS6pccEJEcJT7b5Wy68UY8K+N849A5 QIMXANw1WoFTBCJTLXgWDFjPkATM2Lcvn2YjN9r0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Qu Wenruo , Filipe Manana , Goldwyn Rodrigues , David Sterba Subject: [PATCH 4.14 21/42] btrfs: check if root is readonly while setting security xattr Date: Fri, 2 Sep 2022 14:18:45 +0200 Message-Id: <20220902121359.542722507@linuxfoundation.org> X-Mailer: git-send-email 2.37.3 In-Reply-To: <20220902121358.773776406@linuxfoundation.org> References: <20220902121358.773776406@linuxfoundation.org> User-Agent: quilt/0.67 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-5.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,URIBL_BLACK autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Goldwyn Rodrigues commit b51111271b0352aa596c5ae8faf06939e91b3b68 upstream. For a filesystem which has btrfs read-only property set to true, all write operations including xattr should be denied. However, security xattr can still be changed even if btrfs ro property is true. This happens because xattr_permission() does not have any restrictions on security.*, system.* and in some cases trusted.* from VFS and the decision is left to the underlying filesystem. See comments in xattr_permission() for more details. This patch checks if the root is read-only before performing the set xattr operation. Testcase: DEV=/dev/vdb MNT=/mnt mkfs.btrfs -f $DEV mount $DEV $MNT echo "file one" > $MNT/f1 setfattr -n "security.one" -v 2 $MNT/f1 btrfs property set /mnt ro true setfattr -n "security.one" -v 1 $MNT/f1 umount $MNT CC: stable@vger.kernel.org # 4.9+ Reviewed-by: Qu Wenruo Reviewed-by: Filipe Manana Signed-off-by: Goldwyn Rodrigues Reviewed-by: David Sterba Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/xattr.c | 3 +++ 1 file changed, 3 insertions(+) --- a/fs/btrfs/xattr.c +++ b/fs/btrfs/xattr.c @@ -378,6 +378,9 @@ static int btrfs_xattr_handler_get(const struct dentry *unused, struct inode *inode, const char *name, void *buffer, size_t size) { + if (btrfs_root_readonly(BTRFS_I(inode)->root)) + return -EROFS; + name = xattr_full_name(handler, name); return __btrfs_getxattr(inode, name, buffer, size); }