On Mon, Feb 28, 2022 at 06:51:18PM -0800, Darrick J. Wong wrote: > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > The XFS implementation of the linkat call does not reserve quota for the > potential directory expansion. This means that we don't reject the > expansion with EDQUOT when we're at or near a hard limit, which means > that one can use linkat() to exceed quota. Fix this by adding a quota > reservation. Could someone review this, please? I'd like to get a 5.18-fixes branch rolling along with the other patches that have already been sent. --D > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> > --- > fs/xfs/xfs_inode.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/fs/xfs/xfs_inode.c b/fs/xfs/xfs_inode.c > index 04bf467b1090..6e556c9069e8 100644 > --- a/fs/xfs/xfs_inode.c > +++ b/fs/xfs/xfs_inode.c > @@ -1249,6 +1249,10 @@ xfs_link( > xfs_trans_ijoin(tp, sip, XFS_ILOCK_EXCL); > xfs_trans_ijoin(tp, tdp, XFS_ILOCK_EXCL); > > + error = xfs_trans_reserve_quota_nblks(tp, tdp, resblks, 0, false); > + if (error) > + goto error_return; > + > error = xfs_iext_count_may_overflow(tdp, XFS_DATA_FORK, > XFS_IEXT_DIR_MANIP_CNT(mp)); > if (error)