Re: [PATCH v4 1/5] xfs: fix capability check in xfs
Carlos Maiolino <[email protected]>
| Newsgroups | org.kernel.vger.linux-xfs,org.kernel.vger.linux-kernel,org.kernel.vger.linux-security-module,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
On Thu, Aug 06, 2026 at 12:22:29PM -0500, [email protected] wrote: > On Tue, Aug 04, 2026 at 11:45:51AM +0200, [email protected] wrote: > > 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. > > Hi, > > this makes perfect sense, but since you say "should fix this issue", > did you have a chance to set up a reproducer, and verify? Hi Serge. Yes, I do have a reproducer to test this all, I'm in process of wiring it up on a xfstests once I get to it on my pile of stuff to do :) > > > This also fix the remaining calls to has_capability_noaudit() > > > > Fixes: eba0549bc7d1 ("xfs: don't generate selinux audit messages for capability testing") > > Cc: <[email protected]> # v5.18 > > Reported-by: Dr. Thomas Orgis <[email protected]> > > Signed-off-by: Carlos Maiolino <[email protected]> > > Reviewed-by: "Darrick J. Wong" <[email protected]> > > Reviewed-by: Serge Hallyn <[email protected]> > > thanks, > -serge > > > --- > > fs/xfs/xfs_fsmap.c | 2 +- > > fs/xfs/xfs_ioctl.c | 2 +- > > fs/xfs/xfs_iops.c | 2 +- > > 3 files changed, 3 insertions(+), 3 deletions(-) > > > > diff --git a/fs/xfs/xfs_fsmap.c b/fs/xfs/xfs_fsmap.c > > index b6a3bc9f143c..7c79fbe0a74c 100644 > > --- a/fs/xfs/xfs_fsmap.c > > +++ b/fs/xfs/xfs_fsmap.c > > @@ -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. */ > > diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c > > index 1b53701bebea..1a8af827dde1 100644 > > --- a/fs/xfs/xfs_ioctl.c > > +++ b/fs/xfs/xfs_ioctl.c > > @@ -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; > > > > diff --git a/fs/xfs/xfs_iops.c b/fs/xfs/xfs_iops.c > > index 6339f4956ecb..7a8c77fdcf68 100644 > > --- a/fs/xfs/xfs_iops.c > > +++ b/fs/xfs/xfs_iops.c > > @@ -835,7 +835,7 @@ 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; > > > > -- > > 2.55.0 > > >