On Sun, 14 Nov 2010 12:25:33 +0300 Vasiliy Kulikov <segoon@xxxxxxxxxxxx> wrote: > On some architectures __kernel_suseconds_t is int. On these archs > struct timeval has padding bytes at the end. This struct is copied to > userspace with these padding bytes uninitialized. This leads to leaking > of contents of kernel stack memory. > > Signed-off-by: Vasiliy Kulikov <segoon@xxxxxxxxxxxx> > --- > Patch v1 used memset(), it was waste of cycles on almost all archs. > > Compile tested. > > fs/select.c | 7 ++++--- > 1 files changed, 4 insertions(+), 3 deletions(-) > > diff --git a/fs/select.c b/fs/select.c > index b7b10aa..43d4805 100644 > --- a/fs/select.c > +++ b/fs/select.c > @@ -288,7 +288,6 @@ static int poll_select_copy_remaining(struct timespec *end_time, void __user *p, > int timeval, int ret) > { > struct timespec rts; > - struct timeval rtv; > > if (!p) > return ret; > @@ -306,8 +305,10 @@ static int poll_select_copy_remaining(struct timespec *end_time, void __user *p, > rts.tv_sec = rts.tv_nsec = 0; > > if (timeval) { > - rtv.tv_sec = rts.tv_sec; > - rtv.tv_usec = rts.tv_nsec / NSEC_PER_USEC; > + struct timeval rtv = { > + .tv_sec = rts.tv_sec, > + .tv_usec = rts.tv_nsec / NSEC_PER_USEC > + }; > > if (!copy_to_user(p, &rtv, sizeof(rtv))) > return ret; Please check the assembly code - this will still leave four bytes of uninitalised stack data in 'rtv', surely. -- To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html