[tip: timers/core] timers/itimer: Zero-init old itimerval before copy to userspace

tip-bot2 for Jérémy Jean posted 1 patch 1 month, 2 weeks ago
kernel/time/itimer.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[tip: timers/core] timers/itimer: Zero-init old itimerval before copy to userspace
Posted by tip-bot2 for Jérémy Jean 1 month, 2 weeks ago
The following commit has been merged into the timers/core branch of tip:

Commit-ID:     18c7d85864e554adc8fad1e8d2e9d2cb6c3911c8
Gitweb:        https://git.kernel.org/tip/18c7d85864e554adc8fad1e8d2e9d2cb6c3911c8
Author:        Jérémy Jean <Jeremy.Jean@oss.cyber.gouv.fr>
AuthorDate:    Sun, 09 Aug 2026 19:04:16 
Committer:     Thomas Gleixner <tglx@kernel.org>
CommitterDate: Tue, 11 Aug 2026 15:43:12 +02:00

timers/itimer: Zero-init old itimerval before copy to userspace

On native sparc64, struct __kernel_old_timeval contains a four-byte hole
after tv_usec because tv_sec is 64-bit while __kernel_suseconds_t is 32-bit.
put_itimerval() fills only the named fields in a stack-allocated
__kernel_old_itimerval and copies the entire object to userspace, so
getitimer() can expose the two padding holes.

Zero-initialize the aggregate before assigning the fields so implicit
padding is deterministic before it crosses the user/kernel boundary.

Signed-off-by: Jérémy Jean <Jeremy.Jean@oss.cyber.gouv.fr>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Assisted-by: Codex:gpt-5
Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/20260809190428.1523014-1-Jeremy.Jean@oss.cyber.gouv.fr
---
 kernel/time/itimer.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/time/itimer.c b/kernel/time/itimer.c
index 7c6110e..03a32df 100644
--- a/kernel/time/itimer.c
+++ b/kernel/time/itimer.c
@@ -100,7 +100,7 @@ static int do_getitimer(int which, struct itimerspec64 *value)
 static int put_itimerval(struct __kernel_old_itimerval __user *o,
 			 const struct itimerspec64 *i)
 {
-	struct __kernel_old_itimerval v;
+	struct __kernel_old_itimerval v = {};
 
 	v.it_interval.tv_sec = i->it_interval.tv_sec;
 	v.it_interval.tv_usec = i->it_interval.tv_nsec / NSEC_PER_USEC;