Projects
Eulaceura:Factory
quota
_service:obs_scm:0002-quotaio_xfs-Warn-when-lar...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:obs_scm:0002-quotaio_xfs-Warn-when-large-kernel-timestamps-cannot.patch of Package quota
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
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2