From patchwork Tue Apr 8 17:24:30 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Petar Jovanovic X-Patchwork-Id: 337703 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 106081400B6 for ; Wed, 9 Apr 2014 03:26:01 +1000 (EST) Received: from localhost ([::1]:42134 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WXZmY-0004T3-Pz for incoming@patchwork.ozlabs.org; Tue, 08 Apr 2014 13:25:58 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32930) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WXZln-0004GN-RA for qemu-devel@nongnu.org; Tue, 08 Apr 2014 13:25:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WXZli-0007gZ-G0 for qemu-devel@nongnu.org; Tue, 08 Apr 2014 13:25:11 -0400 Received: from mx2.rt-rk.com ([89.216.37.149]:41273 helo=mail.rt-rk.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WXZli-0007RV-A4 for qemu-devel@nongnu.org; Tue, 08 Apr 2014 13:25:06 -0400 X-Virus-Scanned: amavisd-new at rt-rk.com Received: from mcs14.domain.local (mcs14.domain.local [192.168.236.230]) by mail.rt-rk.com (Postfix) with ESMTPSA id 2F2A51A1180; Tue, 8 Apr 2014 19:24:40 +0200 (CEST) From: Petar Jovanovic To: qemu-devel@nongnu.org Date: Tue, 8 Apr 2014 19:24:30 +0200 Message-Id: <1396977870-108623-1-git-send-email-petar.jovanovic@rt-rk.com> X-Mailer: git-send-email 1.7.9.5 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 89.216.37.149 Cc: riku.voipio@linaro.org, petar.jovanovic@imgtec.com Subject: [Qemu-devel] [PATCH] linux-user: fix getrusage and wait4 failures with invalid rusage struct X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org From: Petar Jovanovic Implementations of system calls getrusage and wait4 have not previously handled correctly cases when incorrect address of struct rusage is passed. This change makes sure return values are correctly set for these cases. Signed-off-by: Petar Jovanovic --- linux-user/syscall.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 9864813..fc52f0b 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -6309,7 +6309,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, struct rusage rusage; ret = get_errno(getrusage(arg1, &rusage)); if (!is_error(ret)) { - host_to_target_rusage(arg2, &rusage); + ret = host_to_target_rusage(arg2, &rusage); } } break; @@ -6974,6 +6974,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, abi_long status_ptr = arg2; struct rusage rusage, *rusage_ptr; abi_ulong target_rusage = arg4; + abi_long rusage_err; if (target_rusage) rusage_ptr = &rusage; else @@ -6985,8 +6986,12 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, if (put_user_s32(status, status_ptr)) goto efault; } - if (target_rusage) - host_to_target_rusage(target_rusage, &rusage); + if (target_rusage) { + rusage_err = host_to_target_rusage(target_rusage, &rusage); + if (rusage_err) { + ret = rusage_err; + } + } } } break;