* [PATCH v2] btrfs: check if root is readonly when setting posix acl
@ 2026-07-09 8:23 Sun YangKai
2026-07-09 9:54 ` Johannes Thumshirn
2026-07-09 10:43 ` Filipe Manana
0 siblings, 2 replies; 4+ messages in thread
From: Sun YangKai @ 2026-07-09 8:23 UTC (permalink / raw)
To: linux-btrfs; +Cc: Sun YangKai
From: Sun YangKai <sunyangkai@fnnas.com>
For a filesystem which has btrfs read-only property set to true, all
write operations including acl and xattr should be denied. However,
acl can still be set even if btrfs ro property is true.
This happens because no function on the set_acl code path checks the root
is readonly or not. It was checked in btrfs_setxattr_trans() but got
removed in
commit 353c2ea735e4 ("btrfs: remove redundant readonly root check in btrfs_setxattr_trans")
That commit didn't check if all the callers properly check the root's
read-only flag. A previous fix is
commit b51111271b03("btrfs: check if root is readonly while setting security xattr")
Always check if the root is read-only before performing the set acl
operation.
Fixes: 353c2ea735e4 ("btrfs: remove redundant readonly root check in btrfs_setxattr_trans")
Signed-off-by: Sun YangKai <sunyangkai@fnnas.com>
---
Changes to v1:
- add the missing header file
---
fs/btrfs/acl.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/fs/btrfs/acl.c b/fs/btrfs/acl.c
index e55b686fe1ab..662cdd1cbdef 100644
--- a/fs/btrfs/acl.c
+++ b/fs/btrfs/acl.c
@@ -15,6 +15,7 @@
#include "xattr.h"
#include "acl.h"
#include "misc.h"
+#include "btrfs_inode.h"
struct posix_acl *btrfs_get_acl(struct inode *inode, int type, bool rcu)
{
@@ -107,6 +108,9 @@ int btrfs_set_acl(struct mnt_idmap *idmap, struct dentry *dentry,
struct inode *inode = d_inode(dentry);
umode_t old_mode = inode->i_mode;
+ if (btrfs_root_readonly(BTRFS_I(inode)->root))
+ return -EROFS;
+
if (type == ACL_TYPE_ACCESS && acl) {
ret = posix_acl_update_mode(idmap, inode,
&inode->i_mode, &acl);
--
2.54.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH v2] btrfs: check if root is readonly when setting posix acl
2026-07-09 8:23 [PATCH v2] btrfs: check if root is readonly when setting posix acl Sun YangKai
@ 2026-07-09 9:54 ` Johannes Thumshirn
2026-07-09 10:43 ` Filipe Manana
1 sibling, 0 replies; 4+ messages in thread
From: Johannes Thumshirn @ 2026-07-09 9:54 UTC (permalink / raw)
To: Sun YangKai, linux-btrfs; +Cc: Sun YangKai
Looks good,
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] btrfs: check if root is readonly when setting posix acl
2026-07-09 8:23 [PATCH v2] btrfs: check if root is readonly when setting posix acl Sun YangKai
2026-07-09 9:54 ` Johannes Thumshirn
@ 2026-07-09 10:43 ` Filipe Manana
2026-07-10 9:03 ` Sun YangKai
1 sibling, 1 reply; 4+ messages in thread
From: Filipe Manana @ 2026-07-09 10:43 UTC (permalink / raw)
To: Sun YangKai; +Cc: linux-btrfs, Sun YangKai
On Thu, Jul 9, 2026 at 9:26 AM Sun YangKai <sunk67188@gmail.com> wrote:
>
> From: Sun YangKai <sunyangkai@fnnas.com>
>
> For a filesystem which has btrfs read-only property set to true, all
> write operations including acl and xattr should be denied. However,
> acl can still be set even if btrfs ro property is true.
>
> This happens because no function on the set_acl code path checks the root
> is readonly or not. It was checked in btrfs_setxattr_trans() but got
> removed in
> commit 353c2ea735e4 ("btrfs: remove redundant readonly root check in btrfs_setxattr_trans")
>
> That commit didn't check if all the callers properly check the root's
> read-only flag. A previous fix is
> commit b51111271b03("btrfs: check if root is readonly while setting security xattr")
>
> Always check if the root is read-only before performing the set acl
> operation.
>
> Fixes: 353c2ea735e4 ("btrfs: remove redundant readonly root check in btrfs_setxattr_trans")
> Signed-off-by: Sun YangKai <sunyangkai@fnnas.com>
Test case please (fstests).
> ---
> Changes to v1:
> - add the missing header file
>
> ---
> fs/btrfs/acl.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/fs/btrfs/acl.c b/fs/btrfs/acl.c
> index e55b686fe1ab..662cdd1cbdef 100644
> --- a/fs/btrfs/acl.c
> +++ b/fs/btrfs/acl.c
> @@ -15,6 +15,7 @@
> #include "xattr.h"
> #include "acl.h"
> #include "misc.h"
> +#include "btrfs_inode.h"
>
> struct posix_acl *btrfs_get_acl(struct inode *inode, int type, bool rcu)
> {
> @@ -107,6 +108,9 @@ int btrfs_set_acl(struct mnt_idmap *idmap, struct dentry *dentry,
> struct inode *inode = d_inode(dentry);
> umode_t old_mode = inode->i_mode;
>
> + if (btrfs_root_readonly(BTRFS_I(inode)->root))
> + return -EROFS;
> +
> if (type == ACL_TYPE_ACCESS && acl) {
> ret = posix_acl_update_mode(idmap, inode,
> &inode->i_mode, &acl);
> --
> 2.54.0
>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v2] btrfs: check if root is readonly when setting posix acl
2026-07-09 10:43 ` Filipe Manana
@ 2026-07-10 9:03 ` Sun YangKai
0 siblings, 0 replies; 4+ messages in thread
From: Sun YangKai @ 2026-07-10 9:03 UTC (permalink / raw)
To: Filipe Manana; +Cc: linux-btrfs, sunk67188
On 2026/7/9 18:43, Filipe Manana wrote:
> On Thu, Jul 9, 2026 at 9:26 AM Sun YangKai <sunk67188@gmail.com> wrote:
>>
>> From: Sun YangKai <sunyangkai@fnnas.com>
>>
>> For a filesystem which has btrfs read-only property set to true, all
>> write operations including acl and xattr should be denied. However,
>> acl can still be set even if btrfs ro property is true.
>>
>> This happens because no function on the set_acl code path checks the root
>> is readonly or not. It was checked in btrfs_setxattr_trans() but got
>> removed in
>> commit 353c2ea735e4 ("btrfs: remove redundant readonly root check in btrfs_setxattr_trans")
>>
>> That commit didn't check if all the callers properly check the root's
>> read-only flag. A previous fix is
>> commit b51111271b03("btrfs: check if root is readonly while setting security xattr")
>>
>> Always check if the root is read-only before performing the set acl
>> operation.
>>
>> Fixes: 353c2ea735e4 ("btrfs: remove redundant readonly root check in btrfs_setxattr_trans")
>> Signed-off-by: Sun YangKai <sunyangkai@fnnas.com>
>
> Test case please (fstests).
Ok, I'll work on that later.
I've noticed the test case btrfs/275 for b51111271b03 and I'll take that
as reference.
Thanks,
Sun YangKai
>
>> ---
>> Changes to v1:
>> - add the missing header file
>>
>> ---
>> fs/btrfs/acl.c | 4 ++++
>> 1 file changed, 4 insertions(+)
>>
>> diff --git a/fs/btrfs/acl.c b/fs/btrfs/acl.c
>> index e55b686fe1ab..662cdd1cbdef 100644
>> --- a/fs/btrfs/acl.c
>> +++ b/fs/btrfs/acl.c
>> @@ -15,6 +15,7 @@
>> #include "xattr.h"
>> #include "acl.h"
>> #include "misc.h"
>> +#include "btrfs_inode.h"
>>
>> struct posix_acl *btrfs_get_acl(struct inode *inode, int type, bool rcu)
>> {
>> @@ -107,6 +108,9 @@ int btrfs_set_acl(struct mnt_idmap *idmap, struct dentry *dentry,
>> struct inode *inode = d_inode(dentry);
>> umode_t old_mode = inode->i_mode;
>>
>> + if (btrfs_root_readonly(BTRFS_I(inode)->root))
>> + return -EROFS;
>> +
>> if (type == ACL_TYPE_ACCESS && acl) {
>> ret = posix_acl_update_mode(idmap, inode,
>> &inode->i_mode, &acl);
>> --
>> 2.54.0
>>
>>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-07-10 9:03 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-09 8:23 [PATCH v2] btrfs: check if root is readonly when setting posix acl Sun YangKai
2026-07-09 9:54 ` Johannes Thumshirn
2026-07-09 10:43 ` Filipe Manana
2026-07-10 9:03 ` Sun YangKai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox