Module Name:    src
Committed By:   uwe
Date:           Wed Jun 13 02:09:09 UTC 2018

Modified Files:
        src/sys/dev/wscons: wsevent.c

Log Message:
wsevent_copyout_events50 - don't leak garbage from the kernel stack.

On 64-bit machines struct timespec50 has padding between 32-bit tv_sec
and long tv_nsec that is not affected by normal assignment.  Scrub it
before we uiomove struct owscons_event.


To generate a diff of this commit:
cvs rdiff -u -r1.37 -r1.38 src/sys/dev/wscons/wsevent.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/wscons/wsevent.c
diff -u src/sys/dev/wscons/wsevent.c:1.37 src/sys/dev/wscons/wsevent.c:1.38
--- src/sys/dev/wscons/wsevent.c:1.37	Wed Oct 25 08:12:39 2017
+++ src/sys/dev/wscons/wsevent.c	Wed Jun 13 02:09:09 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: wsevent.c,v 1.37 2017/10/25 08:12:39 maya Exp $ */
+/* $NetBSD: wsevent.c,v 1.38 2018/06/13 02:09:09 uwe Exp $ */
 
 /*-
  * Copyright (c) 2006, 2008 The NetBSD Foundation, Inc.
@@ -104,7 +104,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: wsevent.c,v 1.37 2017/10/25 08:12:39 maya Exp $");
+__KERNEL_RCSID(0, "$NetBSD: wsevent.c,v 1.38 2018/06/13 02:09:09 uwe Exp $");
 
 #ifdef _KERNEL_OPT
 #include "opt_compat_netbsd.h"
@@ -202,6 +202,9 @@ wsevent_copyout_events50(const struct ws
 
 		ev50.type = ev->type;
 		ev50.value = ev->value;
+#if INT32_MAX < LONG_MAX	/* scrub padding */
+		memset(&ev50.time, 0, offsetof(struct timespec50, tv_nsec));
+#endif
 		timespec_to_timespec50(&ev->time, &ev50.time);
 
 		error = uiomove(&ev50, sizeof(ev50), uio);

Reply via email to