]> git.ipfire.org Git - thirdparty/xfsprogs-dev.git/commitdiff
xfsprogs: xfs_fsr: Verify bulkstat version information in qsort's cmp()
authorChandan Babu R <chandanrlinux@gmail.com>
Fri, 12 Feb 2021 22:23:05 +0000 (17:23 -0500)
committerEric Sandeen <sandeen@sandeen.net>
Fri, 12 Feb 2021 22:23:05 +0000 (17:23 -0500)
This commit introduces a check to verify that correct bulkstat structures are
being processed by qsort's cmp() function.

Suggested-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Chandan Babu R <chandanrlinux@gmail.com>
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Reviewed-by: Darrick J. Wong <djwong@kernel.org>
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
fsr/xfs_fsr.c

index b885395ed7ca8c8e400539156de4a9330b6133cb..6cf8bfb7f8991edc0c6b67fb02eb19dda727c258 100644 (file)
@@ -582,8 +582,15 @@ fsrall_cleanup(int timeout)
 static int
 cmp(const void *s1, const void *s2)
 {
-       return( ((struct xfs_bulkstat *)s2)->bs_extents -
-               ((struct xfs_bulkstat *)s1)->bs_extents);
+       const struct xfs_bulkstat       *bs1 = s1;
+       const struct xfs_bulkstat       *bs2 = s2;
+
+       ASSERT((bs1->bs_version == XFS_BULKSTAT_VERSION_V1 &&
+               bs2->bs_version == XFS_BULKSTAT_VERSION_V1) ||
+               (bs1->bs_version == XFS_BULKSTAT_VERSION_V5 &&
+               bs2->bs_version == XFS_BULKSTAT_VERSION_V5));
+
+       return (bs2->bs_extents - bs1->bs_extents);
 }
 
 /*