Fix quota evasion on xfs and add capable_noaudit
Subsystems (6)
[email protected]
maintainerv3 cover Fix quota evasion on xfs and add capable_noaudit
From: Carlos Maiolino <[email protected]>
Hi there.
This is the (hopefully) final version of the series I've been working on to fix a quota evasion issue on xfs. This bug has originally been introduced by accident while turning off audit messages while checking quota limits in xfs by replacing capable() calls by has_capability_noaudit().
This series concatenates both series I sent for xfs and capabilities infrastructure as they are dependent.
The first patch fix the xfs bug in a way that makes it easily portable to older LTS kernels.
From second patch and beyond, it adds a new helper for the capabilities framework named capable_noaudit() which as the same semantics as capable() but without generating audit messages.
The following patches then replaces both generic quota call to capable() and properly update xfs code to use this new helper.
Last but not least this unexport has_capability_noaudit which had been previously exported.
Giving this affects different subsystems, I think it would be easier to pull everything from a single tree (as long as everything is properly reviewed of course).
Serge, Honza, are you guys ok if I pull those patches and send them to Linus through xfs tree so we don't need to split the series?
Christoph, this series moves back to pass the capable_noaudit() result straight back to xfs_trans_alloc_ichange() instead of moving the capability check into xfs_trans_dqresv() as Darrick was not in agreement with that (patch unreviewed and open for comments).
Changelog from the last state of these patches:
Patch2: removed the redundant external classifier from the declaration
in include/linux/capability.h.
Serge, I kept your RwB here as the external is redundant, please let me know if you are ok with it or not.
Patch4: Replace all ns_capable_noaudit() calls by capable_noaudit() and
keep the CAP_FOWNER (instead replacing it by SYS_RESOURCE)
Carlos Maiolino (5):
xfs: fix capability check in xfs
capability: Add new capable_noaudit
quota: Don't issue audit messages on quota enforcing
xfs: replace ns_capable_noaudit
capability: unexport has_capability_noaudit
fs/quota/dquot.c | 2 +- fs/xfs/xfs_fsmap.c | 3 +-- fs/xfs/xfs_ioctl.c | 2 +- fs/xfs/xfs_iops.c | 3 ++- include/linux/capability.h | 5 +++++ kernel/capability.c | 18 +++++++++++++++++- 6 files changed, 27 insertions(+), 6 deletions(-)
Signature · 1 line
2.54.0
[email protected]
maintainerPATCH v3 1/5 xfs: fix capability check in xfs
From: Carlos Maiolino <[email protected]>
An user reported a bug where he managed to evade group's quota by changing a file's gid to a different group id the same user belonged to, even though quotas were enforced on both gids and the file's size was big enough to exceed the quota's hardlimit.
Commit eba0549bc7d1 replaced a capable() call by a has_capability_noaudit() to prevent unnecessary selinux audit messages. Turns out that both calls have slightly different semantics even though their documentation seems similar. Where in a nutshell:
capable() - Tests the task's effective credentials has_ns_capability_noaudit() - Tests the task's real credentials
This most of the time has no practical difference but in some cases like changing attrs (specifically group id in this case) through a NFS client this will allow the quota code to use XFS_QMOPT_FORCE_RES, effectively bypassing quota accounting checks.
Using instead ns_capable_noaudit() should fix this issue and prevent selinux audit messages.
This also fix the remaining calls to has_capability_noaudit()
--- fs/xfs/xfs_fsmap.c | 2 +- fs/xfs/xfs_ioctl.c | 2 +- fs/xfs/xfs_iops.c | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-)
fs/xfs/xfs_fsmap.c +1 -1
@@ -1175,7 +1175,7 @@ xfs_getfsmap(return -EINVAL ; use_rmap =xfs_has_rmapbt (mp) && -has_capability_noaudit (current,CAP_SYS_ADMIN ); +ns_capable_noaudit (&init_user_ns,CAP_SYS_ADMIN ); head->fmh_entries =0 ;/* Set up our device handlers. */
fs/xfs/xfs_ioctl.c +1 -1
@@ -647,7 +647,7 @@ xfs_ioctl_setattr_get_trans( goto out_error; error =xfs_trans_alloc_ichange (ip,NULL ,NULL , pdqp, -has_capability_noaudit (current,CAP_FOWNER ), &tp); +ns_capable_noaudit (&init_user_ns,CAP_FOWNER ), &tp);if (error) goto out_error;
fs/xfs/xfs_iops.c +2 -1
@@ -835,7 +835,8 @@ xfs_setattr_nonsize( } error =xfs_trans_alloc_ichange (ip, udqp, gdqp,NULL , -has_capability_noaudit (current,CAP_FOWNER ), &tp); +ns_capable_noaudit (&init_user_ns,CAP_FOWNER ), + &tp);if (error) goto out_dqrele;
Signature · 1 line
2.54.0
Re: [PATCH v3 1/5] xfs: fix capability check in xfs
fs/xfs/xfs_iops.c xfs_setattr_nonsize( · line 838
Quoted 9 lines · On Thu, Jul 02, 2026 at 11:33:17AM +0200, [email protected] wrote:
index
6339f4956ecb..205fe2dae732100644fs/xfs/xfs_iops.c +1
-1@@ -835,7 +835,8 @@ xfs_setattr_nonsize( } error = xfs_trans_alloc_ichange(ip, udqp, gdqp, NULL, -has_capability_noaudit (current,CAP_FOWNER ), &tp); + ns_capable_noaudit(&init_user_ns, CAP_FOWNER),
Extra indentation and an overly long line caused by that here.
Otherwise looks good.
Carlos Maiolino
maintainerRe: [PATCH v3 1/5] xfs: fix capability check in xfs
Quoted 11 lines · Christoph Hellwig
fs/xfs/xfs_iops.c xfs_setattr_nonsize( · line 838
Quoted 9 lines · On Thu, Jul 02, 2026 at 11:33:17AM +0200, [email protected] wrote:
index
6339f4956ecb..205fe2dae732100644fs/xfs/xfs_iops.c +1
-1@@ -835,7 +835,8 @@ xfs_setattr_nonsize( } error = xfs_trans_alloc_ichange(ip, udqp, gdqp, NULL, -has_capability_noaudit (current,CAP_FOWNER ), &tp); + ns_capable_noaudit(&init_user_ns, CAP_FOWNER),
Thanks, I tried to keep the parameters aligned, but I can bring it one tab back. Do you mind if I fix it at commit time if -unlikely- no other change is required?
This is what it will look like:
error = xfs_trans_alloc_ichange(ip, udqp, gdqp, NULL,
- has_capability_noaudit(current, CAP_FOWNER), &tp);
+ ns_capable_noaudit(&init_user_ns, CAP_FOWNER),
+ &tp);
Quoted 4 lines
Extra indentation and an overly long line caused by that here.
Otherwise looks good.
Re: [PATCH v3 1/5] xfs: fix capability check in xfs
Quoted 20 lines · Carlos Maiolino
Quoted 11 lines · Christoph Hellwig
fs/xfs/xfs_iops.c xfs_setattr_nonsize( · line 838
Quoted 9 lines · On Thu, Jul 02, 2026 at 11:33:17AM +0200, [email protected] wrote:
index
6339f4956ecb..205fe2dae732100644fs/xfs/xfs_iops.c +1
-1@@ -835,7 +835,8 @@ xfs_setattr_nonsize( } error = xfs_trans_alloc_ichange(ip, udqp, gdqp, NULL, -has_capability_noaudit (current,CAP_FOWNER ), &tp); + ns_capable_noaudit(&init_user_ns, CAP_FOWNER),Thanks, I tried to keep the parameters aligned, but I can bring it one tab back. Do you mind if I fix it at commit time if -unlikely- no other change is required?
This is what it will look like:
error = xfs_trans_alloc_ichange(ip, udqp, gdqp, NULL,
fs/xfs/xfs_iops.c xfs_setattr_nonsize( · line 839
Quoted 3 lines
fs/xfs/xfs_iops.c +2
-1- has_capability_noaudit(current, CAP_FOWNER), &tp); +ns_capable_noaudit (&init_user_ns,CAP_FOWNER ), + &tp);
This still adds an extra tab. Like much (but not all) of the kernel we use two-tabs by default, which is also in the other two hinks. This now adds a third. Just keep it as it was:
error = xfs_trans_alloc_ichange(ip, udqp, gdqp, NULL, ns_capable_noaudit(&init_user_ns, CAP_FOWNER), &tp);
Carlos Maiolino
maintainerRe: [PATCH v3 1/5] xfs: fix capability check in xfs
Quoted 25 lines · Christoph Hellwig
Quoted 20 lines · Carlos Maiolino
Quoted 11 lines · Christoph Hellwig
fs/xfs/xfs_iops.c xfs_setattr_nonsize( · line 838
Quoted 9 lines · On Thu, Jul 02, 2026 at 11:33:17AM +0200, [email protected] wrote:
index
6339f4956ecb..205fe2dae732100644fs/xfs/xfs_iops.c +1
-1@@ -835,7 +835,8 @@ xfs_setattr_nonsize( } error = xfs_trans_alloc_ichange(ip, udqp, gdqp, NULL, -has_capability_noaudit (current,CAP_FOWNER ), &tp); + ns_capable_noaudit(&init_user_ns, CAP_FOWNER),Thanks, I tried to keep the parameters aligned, but I can bring it one tab back. Do you mind if I fix it at commit time if -unlikely- no other change is required?
This is what it will look like:
error = xfs_trans_alloc_ichange(ip, udqp, gdqp, NULL,
fs/xfs/xfs_iops.c xfs_setattr_nonsize( · line 839
Quoted 3 lines
fs/xfs/xfs_iops.c +2
-1- has_capability_noaudit(current, CAP_FOWNER), &tp); +ns_capable_noaudit (&init_user_ns,CAP_FOWNER ), + &tp);
Quoted 8 lines
This still adds an extra tab. Like much (but not all) of the kernel we use two-tabs by default, which is also in the other two hinks. This now adds a third. Just keep it as it was:
error = xfs_trans_alloc_ichange(ip, udqp, gdqp, NULL, ns_capable_noaudit(&init_user_ns, CAP_FOWNER), &tp);
Ok, will do!
Carlos Maiolino
maintainerRe: [PATCH v3 1/5] xfs: fix capability check in xfs
In reply to Christoph HellwigQuoted 11 lines
fs/xfs/xfs_iops.c xfs_setattr_nonsize( · line 839
Quoted 2 lines
fs/xfs/xfs_iops.c +2
-0+ns_capable_noaudit (&init_user_ns,CAP_FOWNER ), + &tp);This still adds an extra tab. Like much (but not all) of the kernel we use two-tabs by default, which is also in the other two hinks. This now adds a third. Just keep it as it was:
error = xfs_trans_alloc_ichange(ip, udqp, gdqp, NULL, ns_capable_noaudit(&init_user_ns, CAP_FOWNER), &tp);
FWIW, I also fixed these in the patch 4 which I had screwed up too :)
[email protected]
maintainerPATCH v3 2/5 capability: Add new capable_noaudit
In reply to [email protected]From: Carlos Maiolino <[email protected]>
In some situations (quota enforcement bypass in this case) we'd like to check for a specific capability without triggering spurious audit messages from security modules like selinux.
Add a new helper so we don't need to use ns_capable_noaudit() directly.
V3: remove the extern declaration
--- include/linux/capability.h | 5 +++++ kernel/capability.c | 17 +++++++++++++++++ 2 files changed, 22 insertions(+)
include/linux/capability.h +5 -0
@@ -145,6 +145,7 @@ extern bool has_capability_noaudit(struct task_struct *t, int cap);extern bool has_ns_capability_noaudit (struct task_struct *t,struct user_namespace *ns,int cap);extern bool capable (int cap); +bool capable_noaudit (int cap);extern bool ns_capable (struct user_namespace *ns,int cap);extern bool ns_capable_noaudit (struct user_namespace *ns,int cap);extern bool ns_capable_setid (struct user_namespace *ns,int cap);
@@ -167,6 +168,10 @@ static inline bool capable(int cap) {return true; } +static inline bool capable_noaudit (int cap) +{ +return true; +}static inline bool ns_capable (struct user_namespace *ns,int cap) {return true;
kernel/capability.c +17 -0
@@ -416,6 +416,23 @@ bool capable(int cap) return ns_capable(&init_user_ns, cap); }EXPORT_SYMBOL (capable); + +/** +* capable_noaudit - Determine if the current task has a superior +* capability in effect (unaudited). +* @cap: The capability to be tested for +* +* This is the same as capable(), except it uses CAP_OPT_NOAUDIT as to prevent +* issuing spurious audit messages. +* +* This sets PF_SUPERPRIV on the task if the capability is available on the +* assumption that it's about to be used. +*/ +bool capable_noaudit (int cap) +{ +return ns_capable_noaudit (&init_user_ns, cap); +} +EXPORT_SYMBOL (capable_noaudit);#endif /* CONFIG_MULTIUSER */ /**
Signature · 1 line
2.54.0
Re: [PATCH v3 2/5] capability: Add new capable_noaudit
Quoted 59 lines · On Thu, Jul 02, 2026 at 11:33:19AM +0200, [email protected] wrote:
From: Carlos Maiolino <[email protected]>
In some situations (quota enforcement bypass in this case) we'd like to check for a specific capability without triggering spurious audit messages from security modules like selinux.
Add a new helper so we don't need to use
ns_capable_noaudit()directly.V3: remove the extern declaration
Signed-off-by Carlos Maiolino <[email protected]>Cc Jan Kara <[email protected]>Cc Darrick J. Wong <[email protected]>Cc Dave Chinner <[email protected]>Cc Eric Sandeen <[email protected]>Cc Dr. Thomas Orgis" <[email protected]>Reviewed-by Christoph Hellwig <[email protected]>Reviewed-by Serge Hallyn <[email protected]>--- include/linux/capability.h | 5 +++++ kernel/capability.c | 17 +++++++++++++++++ 2 files changed, 22 insertions(+)include/linux/capability.h +5
-0@@ -145,6 +145,7 @@ extern bool has_capability_noaudit(struct task_struct *t, int cap);extern bool has_ns_capability_noaudit (struct task_struct *t,struct user_namespace *ns,int cap);extern bool capable (int cap); +bool capable_noaudit (int cap);extern bool ns_capable (struct user_namespace *ns,int cap);extern bool ns_capable_noaudit (struct user_namespace *ns,int cap);extern bool ns_capable_setid (struct user_namespace *ns,int cap);@@ -167,6 +168,10 @@ static inline bool capable(int cap) {return true; } +static inline bool capable_noaudit (int cap) +{ +return true; +}static inline bool ns_capable (struct user_namespace *ns,int cap) {return true;kernel/capability.c +1
-0@@ -416,6 +416,23 @@ bool capable(int cap)return ns_capable (&init_user_ns, cap); }EXPORT_SYMBOL (capable); +
kernel/capability.c bool capable(int cap) · line 429
Quoted 10 lines
kernel/capability.c +10
-0+/** +* capable_noaudit - Determine if the current task has a superior +* capability in effect (unaudited). +* @cap: The capability to be tested for +* +* This is the same as capable(), except it uses CAP_OPT_NOAUDIT as to prevent +* issuing spurious audit messages. +* +* This sets PF_SUPERPRIV on the task if the capability is available on the +* assumption that it's about to be used.
Same complaint about the documentation as last time:
https://lore.kernel.org/linux-fsdevel/20260626151656.GT6078@frogsfrogsfrogs/
--D
Quoted 13 lines
kernel/capability.c +6
-0+*/ +bool capable_noaudit (int cap) +{ +return ns_capable_noaudit (&init_user_ns, cap); +} +EXPORT_SYMBOL (capable_noaudit);#endif /* CONFIG_MULTIUSER */ /** Signature · 1 line
2.54.0
Carlos Maiolino
maintainerRe: [PATCH v3 2/5] capability: Add new capable_noaudit
Quoted 65 lines · Darrick J. Wong
Quoted 64 lines · On Thu, Jul 02, 2026 at 11:33:19AM +0200, [email protected] wrote:
From: Carlos Maiolino <[email protected]>
In some situations (quota enforcement bypass in this case) we'd like to check for a specific capability without triggering spurious audit messages from security modules like selinux.
Add a new helper so we don't need to use
ns_capable_noaudit()directly.V3: remove the extern declaration
Signed-off-by Carlos Maiolino <[email protected]>Cc Jan Kara <[email protected]>Cc Darrick J. Wong <[email protected]>Cc Dave Chinner <[email protected]>Cc Eric Sandeen <[email protected]>Cc Dr. Thomas Orgis" <[email protected]>Reviewed-by Christoph Hellwig <[email protected]>Reviewed-by Serge Hallyn <[email protected]>--- include/linux/capability.h | 5 +++++ kernel/capability.c | 17 +++++++++++++++++ 2 files changed, 22 insertions(+)include/linux/capability.h +5
-0@@ -145,6 +145,7 @@ extern bool has_capability_noaudit(struct task_struct *t, int cap);extern bool has_ns_capability_noaudit (struct task_struct *t,struct user_namespace *ns,int cap);extern bool capable (int cap); +bool capable_noaudit (int cap);extern bool ns_capable (struct user_namespace *ns,int cap);extern bool ns_capable_noaudit (struct user_namespace *ns,int cap);extern bool ns_capable_setid (struct user_namespace *ns,int cap);@@ -167,6 +168,10 @@ static inline bool capable(int cap) {return true; } +static inline bool capable_noaudit (int cap) +{ +return true; +}static inline bool ns_capable (struct user_namespace *ns,int cap) {return true;kernel/capability.c +6
-0@@ -416,6 +416,23 @@ bool capable(int cap)return ns_capable (&init_user_ns, cap); }EXPORT_SYMBOL (capable); + +/** +* capable_noaudit - Determine if the current task has a superior +* capability in effect (unaudited). +* @cap: The capability to be tested for +*
Quoted 8 lines
kernel/capability.c bool capable(int cap) · line 429
Quoted 5 lines
kernel/capability.c +5
-0+* This is the same as capable(), except it uses CAP_OPT_NOAUDIT as to prevent +* issuing spurious audit messages. +* +* This sets PF_SUPERPRIV on the task if the capability is available on the +* assumption that it's about to be used. Same complaint about the documentation as last time:
https://lore.kernel.org/linux-fsdevel/20260626151656.GT6078@frogsfrogsfrogs/
Right. I assumed "capability in effect" would suffice that, but I can add some extra comment here.
Quoted 17 lines
--D
Quoted 13 lines
kernel/capability.c +6
-0+*/ +bool capable_noaudit (int cap) +{ +return ns_capable_noaudit (&init_user_ns, cap); +} +EXPORT_SYMBOL (capable_noaudit);#endif /* CONFIG_MULTIUSER */ /** Signature · 1 line
2.54.0
[email protected]
maintainerPATCH v3 3/5 quota: Don't issue audit messages on quota enforcing
In reply to [email protected]From: Carlos Maiolino <[email protected]>
Calling capable() to determine if we can bypass quota enforcement or not can trigger spurious audit messages. We don't really require it here so just use the capable_noaudit() version.
--- fs/quota/dquot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/quota/dquot.c +1 -1
@@ -1308,7 +1308,7 @@ static int ignore_hardlimit(struct dquot *dquot) {struct mem_dqinfo *info = &sb_dqopt (dquot->dq_sb)->info[dquot->dq_id.type]; -return capable (CAP_SYS_RESOURCE ) && +return capable_noaudit (CAP_SYS_RESOURCE ) && (info->dqi_format->qf_fmt_id !=QFMT_VFS_OLD || !(info->dqi_flags &DQF_ROOT_SQUASH )); }
Signature · 1 line
2.54.0
Re: [PATCH v3 3/5] quota: Don't issue audit messages on quota enforcing
Quoted 6 lines · On Thu 02-07-26 11:33:21, [email protected] wrote:
From: Carlos Maiolino <[email protected]>
Calling
capable()to determine if we can bypass quota enforcement or not can trigger spurious audit messages. We don't really require it here so just use thecapable_noaudit()version.
Quoted 12 lines
Signed-off-by Carlos Maiolino <[email protected]>Cc Jan Kara <[email protected]>Cc Serge E. Hallyn <[email protected]>Cc Dave Chinner <[email protected]>Cc Eric Sandeen <[email protected]>Cc Dr. Thomas Orgis" <[email protected]>Reviewed-by "Darrick J. Wong" <[email protected]>Reviewed-by Christoph Hellwig <[email protected]>
Makes sense. Feel free to add:
Honza
Quoted 20 lines
--- fs/quota/dquot.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)fs/quota/dquot.c +1
-1@@ -1308,7 +1308,7 @@ static int ignore_hardlimit(struct dquot *dquot) {struct mem_dqinfo *info = &sb_dqopt (dquot->dq_sb)->info[dquot->dq_id.type]; -return capable (CAP_SYS_RESOURCE ) && +return capable_noaudit (CAP_SYS_RESOURCE ) && (info->dqi_format->qf_fmt_id !=QFMT_VFS_OLD || !(info->dqi_flags &DQF_ROOT_SQUASH )); }Signature · 1 line
2.54.0
Signature · 2 lines
Jan Kara <[email protected]> SUSE Labs, CR
[email protected]
maintainerPATCH v3 4/5 xfs: replace ns_capable_noaudit
In reply to [email protected]From: Carlos Maiolino <[email protected]>
Now that capable_noaudit() is available, we don't need to keep using ns_capable_noaudit() and specifying the usernaspace every single time.
--- fs/xfs/xfs_fsmap.c | 3 +-- fs/xfs/xfs_ioctl.c | 2 +- fs/xfs/xfs_iops.c | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-)
fs/xfs/xfs_fsmap.c +1 -2
@@ -1174,8 +1174,7 @@ xfs_getfsmap(if (!xfs_getfsmap_check_keys (&head->fmh_keys[0 ], &head->fmh_keys[1 ]))return -EINVAL ; - use_rmap =xfs_has_rmapbt (mp) && -ns_capable_noaudit (&init_user_ns,CAP_SYS_ADMIN ); + use_rmap =xfs_has_rmapbt (mp) &&capable_noaudit (CAP_SYS_ADMIN ); head->fmh_entries =0 ;/* Set up our device handlers. */
fs/xfs/xfs_ioctl.c +1 -1
@@ -647,7 +647,7 @@ xfs_ioctl_setattr_get_trans( goto out_error; error =xfs_trans_alloc_ichange (ip,NULL ,NULL , pdqp, -ns_capable_noaudit (&init_user_ns,CAP_FOWNER ), &tp); +capable_noaudit (CAP_FOWNER ), &tp);if (error) goto out_error;
fs/xfs/xfs_iops.c +1 -1
@@ -835,7 +835,7 @@ xfs_setattr_nonsize( } error =xfs_trans_alloc_ichange (ip, udqp, gdqp,NULL , -ns_capable_noaudit (&init_user_ns,CAP_FOWNER ), +capable_noaudit (CAP_FOWNER ), &tp);if (error) goto out_dqrele;
Signature · 1 line
2.54.0
Re: [PATCH v3 4/5] xfs: replace ns_capable_noaudit
Quoted 43 lines · On Thu, Jul 02, 2026 at 11:33:23AM +0200, [email protected] wrote:
From: Carlos Maiolino <[email protected]>
Now that
capable_noaudit()is available, we don't need to keep usingns_capable_noaudit()and specifying the usernaspace every single time.Signed-off-by Carlos Maiolino <[email protected]>Cc Jan Kara <[email protected]>Cc Christoph Hellwig <[email protected]>Cc Serge E. Hallyn <[email protected]>Cc Darrick J. Wong <[email protected]>Cc Dave Chinner <[email protected]>Cc Eric Sandeen <[email protected]>Cc Dr. Thomas Orgis" <[email protected]>--- fs/xfs/xfs_fsmap.c | 3 +-- fs/xfs/xfs_ioctl.c | 2 +- fs/xfs/xfs_iops.c | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-)fs/xfs/xfs_fsmap.c +1
-2@@ -1174,8 +1174,7 @@ xfs_getfsmap(if (!xfs_getfsmap_check_keys (&head->fmh_keys[0 ], &head->fmh_keys[1 ]))return -EINVAL ; - use_rmap =xfs_has_rmapbt (mp) && -ns_capable_noaudit (&init_user_ns,CAP_SYS_ADMIN ); + use_rmap =xfs_has_rmapbt (mp) &&capable_noaudit (CAP_SYS_ADMIN ); head->fmh_entries =0 ;/* Set up our device handlers. */ fs/xfs/xfs_ioctl.c +0
-0
fs/xfs/xfs_ioctl.c xfs_ioctl_setattr_get_trans( · line 650
Quoted 5 lines
fs/xfs/xfs_ioctl.c +1
-1@@ -647,7 +647,7 @@ xfs_ioctl_setattr_get_trans( goto out_error; error =xfs_trans_alloc_ichange (ip,NULL ,NULL , pdqp, -ns_capable_noaudit (&init_user_ns,CAP_FOWNER ), &tp); +capable_noaudit (CAP_FOWNER ), &tp);
Not sure why the indentation changed, otherwise the patch looks fine to me.
--D
Quoted 20 lines
fs/xfs/xfs_ioctl.c +0
-0if (error) goto out_error;fs/xfs/xfs_iops.c +1
-1@@ -835,7 +835,7 @@ xfs_setattr_nonsize( } error =xfs_trans_alloc_ichange (ip, udqp, gdqp,NULL , -ns_capable_noaudit (&init_user_ns,CAP_FOWNER ), +capable_noaudit (CAP_FOWNER ), &tp);if (error) goto out_dqrele;Signature · 1 line
2.54.0
Carlos Maiolino
maintainerRe: [PATCH v3 4/5] xfs: replace ns_capable_noaudit
Quoted 46 lines · Darrick J. Wong
Quoted 45 lines · On Thu, Jul 02, 2026 at 11:33:23AM +0200, [email protected] wrote:
From: Carlos Maiolino <[email protected]>
Now that
capable_noaudit()is available, we don't need to keep usingns_capable_noaudit()and specifying the usernaspace every single time.Signed-off-by Carlos Maiolino <[email protected]>Cc Jan Kara <[email protected]>Cc Christoph Hellwig <[email protected]>Cc Serge E. Hallyn <[email protected]>Cc Darrick J. Wong <[email protected]>Cc Dave Chinner <[email protected]>Cc Eric Sandeen <[email protected]>Cc Dr. Thomas Orgis" <[email protected]>--- fs/xfs/xfs_fsmap.c | 3 +-- fs/xfs/xfs_ioctl.c | 2 +- fs/xfs/xfs_iops.c | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-)fs/xfs/xfs_fsmap.c +1
-2@@ -1174,8 +1174,7 @@ xfs_getfsmap(if (!xfs_getfsmap_check_keys (&head->fmh_keys[0 ], &head->fmh_keys[1 ]))return -EINVAL ; - use_rmap =xfs_has_rmapbt (mp) && -ns_capable_noaudit (&init_user_ns,CAP_SYS_ADMIN ); + use_rmap =xfs_has_rmapbt (mp) &&capable_noaudit (CAP_SYS_ADMIN ); head->fmh_entries =0 ;/* Set up our device handlers. */ fs/xfs/xfs_ioctl.c +0
-0@@ -647,7 +647,7 @@ xfs_ioctl_setattr_get_trans( goto out_error;
Quoted 6 lines
fs/xfs/xfs_ioctl.c xfs_ioctl_setattr_get_trans( · line 650
Quoted 3 lines
fs/xfs/xfs_ioctl.c +1
-1error =xfs_trans_alloc_ichange (ip,NULL ,NULL , pdqp, -ns_capable_noaudit (&init_user_ns,CAP_FOWNER ), &tp); +capable_noaudit (CAP_FOWNER ), &tp);Not sure why the indentation changed, otherwise the patch looks fine to me.
Purely my screw up. I fixed it already to send to the next version. Was just waiting for more comments
Quoted 24 lines
--D
Quoted 20 lines
fs/xfs/xfs_ioctl.c +0
-0if (error) goto out_error;fs/xfs/xfs_iops.c +1
-1@@ -835,7 +835,7 @@ xfs_setattr_nonsize( } error =xfs_trans_alloc_ichange (ip, udqp, gdqp,NULL , -ns_capable_noaudit (&init_user_ns,CAP_FOWNER ), +capable_noaudit (CAP_FOWNER ), &tp);if (error) goto out_dqrele;Signature · 1 line
2.54.0
[email protected]
maintainerPATCH v3 5/5 capability: unexport has_capability_noaudit
In reply to [email protected]From: Carlos Maiolino <[email protected]>
This has been originally exported to be used in xfs. Giving we are not using it anymore, unexport for consistency.
--- kernel/capability.c | 1 - 1 file changed, 1 deletion(-)
kernel/capability.c +0 -1
@@ -326,7 +326,6 @@ bool has_capability_noaudit(struct task_struct *t, int cap) {return has_ns_capability_noaudit (t, &init_user_ns, cap); } -EXPORT_SYMBOL (has_capability_noaudit); static bool ns_capable_common(struct user_namespace *ns, int cap,
Signature · 1 line
2.54.0