diff --git a/0002-quotaio_xfs-Warn-when-large-kernel-timestamps-cannot.patch b/0002-quotaio_xfs-Warn-when-large-kernel-timestamps-cannot.patch new file mode 100644 index 0000000..83d9a38 --- /dev/null +++ b/0002-quotaio_xfs-Warn-when-large-kernel-timestamps-cannot.patch @@ -0,0 +1,68 @@ +From 43b6e31f39edbe7de4f4feeef4d0cf6be093e021 Mon Sep 17 00:00:00 2001 +From: Jan Kara +Date: Mon, 23 Nov 2020 17:12:27 +0100 +Subject: [PATCH] quotaio_xfs: Warn when large kernel timestamps cannot be + handled + +When time_t is 32-bit, warn if the kernel returns anything that cannot +fit in these time stamps. This also fixes a compilation warning that +shift exceeds data type size. Similarly when converting data to pass to +kernel, just avoid the pointless shift (generating compiler warning) +when time_t is 32-bit. + +Reported-by: "Dmitry V. Levin" +Signed-off-by: Jan Kara +--- + configure.ac | 2 ++ + quotaio_xfs.c | 9 +++++++++ + 2 files changed, 11 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 2239b49..296b77a 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -82,6 +82,8 @@ AS_IF([test x"$enable_werror" != "xno"], [ + ]) + AC_SUBST([WARN_CFLAGS]) + ++AC_CHECK_SIZEOF([time_t], [], [#include ]) ++ + # ========= + # Find ldap + # ========= +diff --git a/quotaio_xfs.c b/quotaio_xfs.c +index 2db1c0c..5abb2c2 100644 +--- a/quotaio_xfs.c ++++ b/quotaio_xfs.c +@@ -45,8 +45,13 @@ report: xfs_report + static inline time_t xfs_kern2utildqblk_ts(const struct xfs_kern_dqblk *k, + __s32 timer, __s8 timer_hi) + { ++#if SIZEOF_TIME_T > 4 + if (k->d_fieldmask & FS_DQ_BIGTIME) + return (__u32)timer | (__s64)timer_hi << 32; ++#else ++ if (k->d_fieldmask & FS_DQ_BIGTIME && timer_hi != 0) ++ errstr(_("Truncating kernel returned time stamp.")); ++#endif + return timer; + } + +@@ -54,10 +59,14 @@ static inline void xfs_util2kerndqblk_ts(const struct xfs_kern_dqblk *k, + __s32 *timer_lo, __s8 *timer_hi, time_t timer) + { + *timer_lo = timer; ++#if SIZEOF_TIME_T > 4 + if (k->d_fieldmask & FS_DQ_BIGTIME) + *timer_hi = timer >> 32; + else + *timer_hi = 0; ++#else ++ *timer_hi = 0; ++#endif + } + + static inline int want_bigtime(time_t timer) +-- +2.23.0 + diff --git a/quota.spec b/quota.spec index e13d91b..381bf6a 100644 --- a/quota.spec +++ b/quota.spec @@ -1,7 +1,7 @@ Name: quota Version: 4.06 Epoch: 1 -Release: 1 +Release: 2 Summary: Linux Diskquota system as part of the Linux kernel License: BSD and GPLv2 and GPLv2+ and LGPLv2+ URL: http://sourceforge.net/projects/linuxquota/ @@ -14,6 +14,7 @@ Source4: rpc-rquotad.sysconfig Patch0: 0000-Limit-number-of-comparison-characters-to-4.patch Patch1: 0001-Limit-maximum-of-RPC-port.patch +Patch2: 0002-quotaio_xfs-Warn-when-large-kernel-timestamps-cannot.patch BuildRequires: autoconf, automake, coreutils, rpcgen, systemd BuildRequires: e2fsprogs-devel, gettext-devel, openldap-devel @@ -122,6 +123,9 @@ make check %{_mandir}/man*/* %changelog +* Wed Mar 31 2021 xieliuhua - 1:4.06-2 +- fix Warn when large kernel timestamps cannot be handled + * Thu Jan 14 2021 yanglongkang - 1:4.06-1 - Upgrade to 4.06