Fixes bug with pop_ros_tf
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 22 Feb 2013 00:27:57 +0000 (16:27 -0800)
committerBarret Rhoden <brho@cs.berkeley.edu>
Fri, 22 Feb 2013 00:27:57 +0000 (16:27 -0800)
Removing memset() in 0a19848d0 was a little hasty.  We don't need to
zero out the entire struct, but we did need to have zeroed flags.  o/w,
the kernel might see the SC_UEVENT flag set, and think userspace wants
an event sent to whatever gibberish is on the stack at sysc->ev_q.

user/parlib/include/i686/vcore.h

index 9be8f19..31b25d5 100644 (file)
@@ -81,6 +81,8 @@ static inline void pop_ros_tf(struct user_trapframe *tf, uint32_t vcoreid)
        rst->sysc = &rst->local_sysc;   /* point to the local one */
        /* Need to prep the async sysc in case we need to notify ourselves */
        rst->sysc->num = SYS_self_notify;
+       rst->sysc->flags = 0;
+       rst->sysc->ev_q = 0;            /* technically not needed but will avoid bugs */
        rst->sysc->arg0 = vcoreid;      /* arg 1 & 2 already = 0 (null notif, no u_ne)*/
        rst->sysc->arg3 = TRUE;         /* just a private VCPD notification */
        rst->eax_save = 0;                      /* avoid bugs */