Thread (8 messages) 8 messages, 4 authors, 2019-04-29

Re: [PATCH 1/2] y2038: make CONFIG_64BIT_TIME unconditional

From: Lukasz Majewski <lukma@denx.de>
Date: 2019-04-27 15:06:23
Also in: lkml

Hi Stepan,
27.04.2019 в 00:46:53 +0200 Lukasz Majewski написал:
quoted
Hi Arnd,
  
quoted
As Stepan Golosunov points out, we made a small mistake in the
get_timespec64() function in the kernel. It was originally added
under the assumption that CONFIG_64BIT_TIME would get enabled on
all 32-bit and 64-bit architectures, but when I did the
conversion, I only turned it on for 32-bit ones.

The effect is that the get_timespec64() function never clears the
upper half of the tv_nsec field for 32-bit tasks in compat mode.
Clearing this is required for POSIX compliant behavior of
functions that pass a 'timespec' structure with a 64-bit tv_sec
and a 32-bit tv_nsec, plus uninitialized padding.  
quoted
At least for my setup (32bit ARM with 64 bit time support) this
patch is not fixing anything.  
The patch is not supposed to fix anything on 32-bit architectures as
in-kernel struct timespec64 has 32-bit tv_nsec there.  Thus truncation
should happen automatically.  I also missed that fact when I was
reading get_timespec64 code.
Yes. You are right. The tv_nsec is 32 bit.
(I am wondering whether such trucation is undefined behaviour in C
According to [1] - Chapter 6.3.1.3 - Point 3 it is
implementation-defined.
and
whether there should be sign-extension instead of zeroing-out for the
in_compat_syscall() case though.)
What I've found is that "typically" the high order bits are discarded.

However, it is still "implementation dependent".
quoted
quoted
The easiest fix for linux-5.1 is to just make the Kconfig symbol
unconditional, as it was originally intended. As a follow-up,
we should remove any #ifdef CONFIG_64BIT_TIME completely.

Link:
https://lore.kernel.org/lkml/20190422090710.bmxdhhankurhafxq@sghpc.golosunov.pp.ru/ (local)
Cc: Lukasz Majewski <lukma@denx.de> Cc: Stepan Golosunov
[off-list ref] Signed-off-by: Arnd Bergmann
[off-list ref] ---
Please apply this one as a bugfix for 5.1
---
 arch/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/Kconfig b/arch/Kconfig
index 33687dddd86a..9092e0ffe4d3 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -764,7 +764,7 @@ config COMPAT_OLD_SIGACTION
 	bool
 
 config 64BIT_TIME
-	def_bool ARCH_HAS_64BIT_TIME
+	def_bool y
 	help
 	  This should be selected by all architectures that need
to support new system calls with a 64-bit time_t. This is
relevant on all 32-bit  
Note:

[1] - http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf


Best regards,

Lukasz Majewski

--

DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de

Attachments

  • (unnamed) [application/pgp-signature] 488 bytes
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help