Received: by 2002:a05:6358:45e:b0:b5:b6eb:e1f9 with SMTP id 30csp3056928rwe; Mon, 29 Aug 2022 05:15:10 -0700 (PDT) X-Google-Smtp-Source: AA6agR71ItQG+S263t6FW/XBX/Wcrf+ZNVeclOkgsMjnX6y2NwOEDgMksks5kf8gSzGBqvbpAsnx X-Received: by 2002:aa7:c956:0:b0:43b:206d:c283 with SMTP id h22-20020aa7c956000000b0043b206dc283mr16202414edt.381.1661775310548; Mon, 29 Aug 2022 05:15:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1661775310; cv=none; d=google.com; s=arc-20160816; b=orx9tkl87N2cJ56LVQ023/e/8gJJDZXecsNyg5zKAy33x4BC8sn3CfO2VmTIFNHjEW Wxs/P+6tROGQL21lewPhl2CnDraDrml8GC9T3KjvkjPVYlQWSSlk3znQoqdiOThqefR3 EPhZZVMzJRrhkigHrCJEvZuZ46m0mwznE7pvc73DqYrXsZbeK/niMsklpA1HzSR0/WBi FVSnr6KT38w0H5bWhdysSm7wLQXNKgJHWKLnWF5jxyNctfdHXqUdvwsY5N7MJYWAOoRs ZwSo1imMiZDTAeAeQBjuDtVsqUzqCk/QnXvCIMFHjLb6sbdaTh1ElpfN+AoSd4dZL0c0 krRw== 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=k9XvPe5U+mQxY/62zh5F7T9PBMg0RA35j06ahqOetac=; b=ECiRkHoq0A68+yIWoaTMTZ1y1bxxNLzAfHbO7fnRKAlxH5iVQIdl2rNUjd3MXmjdxC Ps32Hfkkt/mJsHk8mBJUFd8hi/sihUGD1aYnJai94F2PYDyDLEyxbPjWyszjfK5Nnzq6 SoaEZX9PZWIp1YvoWtU0KcuiiKvi6ATkloTWPDaDEcVDbmo/dzsNQVU/ZaoD/dV68glN Ad8CxL1d4rm8kZx5eJs0duvtI1+uox5+MJY3z9Zb8kNr4ISLUmkP2Qn9PmGHo9Gi4wKp CeCX6prt0SHHj6L9MC2MQyLB+193eTNswziO8Zv8iILHYFemg6NgbzzvX5Ss78NrfTWa 0AOw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=P3EHVlYk; 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 hp38-20020a1709073e2600b0072fa13ddca0si6523004ejc.229.2022.08.29.05.14.44; Mon, 29 Aug 2022 05:15:10 -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=P3EHVlYk; 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 S232937AbiH2Lh6 (ORCPT + 99 others); Mon, 29 Aug 2022 07:37:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42104 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232428AbiH2LhB (ORCPT ); Mon, 29 Aug 2022 07:37:01 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 90F766DF9E; Mon, 29 Aug 2022 04:21: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 2137DB80EF5; Mon, 29 Aug 2022 11:09:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7267DC433D6; Mon, 29 Aug 2022 11:09:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1661771385; bh=aw/3zNij5f5EZVoU20NAljEgXvZHzpu7ZFU2j+Zl8Uo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=P3EHVlYkRWME5GIDBECg3mfTmOZEO6+JCrw0pPzlsSJifvlxdTSri1pkRTkIxHVQR U7dqWHpePdM8DzLoNJ5Z1pPPI66MVNJvmEFF/J7j8ZMYNFUB5MUVUdjYBrF1yIkkDX wLmbis0gGYADSVfdSZ52K9/M1CPpzPNsoIHbpstg= 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 5.15 098/136] btrfs: check if root is readonly while setting security xattr Date: Mon, 29 Aug 2022 12:59:25 +0200 Message-Id: <20220829105808.695855923@linuxfoundation.org> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220829105804.609007228@linuxfoundation.org> References: <20220829105804.609007228@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=-7.1 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 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 @@ -391,6 +391,9 @@ static int btrfs_xattr_handler_set(const const char *name, const void *buffer, size_t size, int flags) { + if (btrfs_root_readonly(BTRFS_I(inode)->root)) + return -EROFS; + name = xattr_full_name(handler, name); return btrfs_setxattr_trans(inode, name, buffer, size, flags); }