!6 fix Warn when large kernel timestamps cannot be handled

From: @xielhxie
Reviewed-by: @liuzhiqiang26
Signed-off-by: @liuzhiqiang26
This commit is contained in:
openeuler-ci-bot 2021-04-02 17:41:39 +08:00 committed by Gitee
commit 5025ac2be2
2 changed files with 73 additions and 1 deletions

View File

@ -0,0 +1,68 @@
From 43b6e31f39edbe7de4f4feeef4d0cf6be093e021 Mon Sep 17 00:00:00 2001
From: Jan Kara <jack@suse.cz>
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" <ldv@altlinux.org>
Signed-off-by: Jan Kara <jack@suse.cz>
---
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 <time.h>])
+
# =========
# 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

View File

@ -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 <xieliuhua@huawei.com> - 1:4.06-2
- fix Warn when large kernel timestamps cannot be handled
* Thu Jan 14 2021 yanglongkang <yanglongkang@huawei.com> - 1:4.06-1
- Upgrade to 4.06