From 8560ef291ca06948e5f49bccf4bf1e714654b718 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Wed, 16 May 2012 12:23:58 +0200 Subject: Fix a few goofs in sys_sysctl() * system.c (sys_sysctl): Cast pointer to long, not size_t, when we intend to use it as an address. Set oldlen to 0 prior to reading into it - we want to have deterministic result if read fails. Signed-off-by: Denys Vlasenko --- system.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'system.c') diff --git a/system.c b/system.c index 8efe90e..270bd5b 100644 --- a/system.c +++ b/system.c @@ -951,8 +951,8 @@ sys_sysctl(struct tcb *tcp) tprints(", ..."); tprintf("}, %d, ", info.nlen); } else { - size_t oldlen; - if (umove(tcp, (size_t)info.oldlenp, &oldlen) >= 0 + size_t oldlen = 0; + if (umove(tcp, (long)info.oldlenp, &oldlen) >= 0 && info.nlen >= 2 && ((name[0] == CTL_KERN && (name[1] == KERN_OSRELEASE @@ -978,7 +978,6 @@ sys_sysctl(struct tcb *tcp) info.oldval, (unsigned long)oldlen, info.newval, (unsigned long)info.newlen); } - tprints("}"); } free(name); -- cgit v1.2.3