]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
xfs: fix unreachable BIGTIME check in dquot flush validation
authorAlexey Nepomnyashih <sdl@nppct.ru>
Wed, 3 Jun 2026 20:41:47 +0000 (20:41 +0000)
committerCarlos Maiolino <cem@kernel.org>
Tue, 9 Jun 2026 07:14:41 +0000 (09:14 +0200)
The dqp->q_id == 0 check inside the XFS_DQTYPE_BIGTIME block is
unreachable because root dquots return successfully earlier. Reject root
dquots with XFS_DQTYPE_BIGTIME before that early return, preserving the
intended validation and removing the unreachable condition.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: 4ea1ff3b4968 ("xfs: widen ondisk quota expiration timestamps to handle y2038+")
Cc: stable@vger.kernel.org # v5.10+
Signed-off-by: Alexey Nepomnyashih <sdl@nppct.ru>
Reviewed-by: "Darrick J. Wong" <djwong@kernel.org>
Reviewed-by: Allison Henderson <achender@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
fs/xfs/xfs_dquot.c

index 69e9bc588c8b69a9b783c0abe6c873dda48875a9..c311f61d9554178defb7f6ec0b1dbc5d4d959da5 100644 (file)
@@ -1216,6 +1216,14 @@ xfs_qm_dqflush_check(
            type != XFS_DQTYPE_PROJ)
                return __this_address;
 
+       /* bigtime flag should never be set on root dquots */
+       if (dqp->q_type & XFS_DQTYPE_BIGTIME) {
+               if (!xfs_has_bigtime(dqp->q_mount))
+                       return __this_address;
+               if (dqp->q_id == 0)
+                       return __this_address;
+       }
+
        if (dqp->q_id == 0)
                return NULL;
 
@@ -1231,14 +1239,6 @@ xfs_qm_dqflush_check(
            !dqp->q_rtb.timer)
                return __this_address;
 
-       /* bigtime flag should never be set on root dquots */
-       if (dqp->q_type & XFS_DQTYPE_BIGTIME) {
-               if (!xfs_has_bigtime(dqp->q_mount))
-                       return __this_address;
-               if (dqp->q_id == 0)
-                       return __this_address;
-       }
-
        return NULL;
 }