[10/11] linux-user: zero fstat buffer to initialize nsec fields

Message ID 7df850df9ebaa654ce7abc823ea774b9c493e4e8.1250193232.git.riku.voipio@iki.fi
State Superseded
Headers show

Commit Message

Riku Voipio Aug. 13, 2009, 8:06 p.m.
From: Ulrich Hecht <uli@suse.de>

The fstat implementation does not initialize the nanosecond fields in the
stat buffer; this caused funny values to turn up there, preventing, for
instance, cp -p from preserving timestamps because utimensat rejected
the out-of-bounds nanosecond values. Resetting the entire structure
to zero fixes that.

Signed-off-by: Ulrich Hecht <uli@suse.de>
Signed-off-by: Riku Voipio <riku.voipio@iki.fi>
 linux-user/syscall.c |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)


diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index f90be71..66a25a0 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -5526,6 +5526,7 @@  abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
                 if (!lock_user_struct(VERIFY_WRITE, target_st, arg2, 0))
                     goto efault;
+                memset(target_st, 0, sizeof(*target_st));
                 __put_user(st.st_dev, &target_st->st_dev);
                 __put_user(st.st_ino, &target_st->st_ino);
                 __put_user(st.st_mode, &target_st->st_mode);