From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LSzQ3-0000aD-Ak for qemu-devel@nongnu.org; Fri, 30 Jan 2009 14:52:51 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LSzQ2-0000Zm-Se for qemu-devel@nongnu.org; Fri, 30 Jan 2009 14:52:50 -0500 Received: from [199.232.76.173] (port=53348 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LSzQ2-0000Zd-DH for qemu-devel@nongnu.org; Fri, 30 Jan 2009 14:52:50 -0500 Received: from hall.aurel32.net ([88.191.82.174]:57475) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1LSzQ1-0004lo-RN for qemu-devel@nongnu.org; Fri, 30 Jan 2009 14:52:50 -0500 Date: Fri, 30 Jan 2009 20:52:48 +0100 From: Aurelien Jarno Subject: Re: [Qemu-devel] [PATCH] fix read() and acct() on NULL arguments Message-ID: <20090130195248.GD25214@hall.aurel32.net> References: <20090119152912.GA20568@kos.to> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-15 Content-Disposition: inline In-Reply-To: <20090119152912.GA20568@kos.to> Sender: Aurelien Jarno Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Riku Voipio Cc: qemu-devel@nongnu.org On Mon, Jan 19, 2009 at 05:29:12PM +0200, Riku Voipio wrote: > Returning efault in these cases is not correct. Originally > proposed by Thayne Harbaugh in 2007: > > http://www.mail-archive.com/qemu-devel@nongnu.org/msg14658.html > > Signed-off-by: Riku Voipio Thanks, applied. > --- > linux-user/syscall.c | 24 ++++++++++++++++-------- > 1 files changed, 16 insertions(+), 8 deletions(-) > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index 4eb003a..ab81b3a 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -3713,10 +3713,14 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, > ret = 0; /* avoid warning */ > break; > case TARGET_NR_read: > - if (!(p = lock_user(VERIFY_WRITE, arg2, arg3, 0))) > - goto efault; > - ret = get_errno(read(arg1, p, arg3)); > - unlock_user(p, arg2, ret); > + if (arg3 == 0) > + ret = 0; > + else { > + if (!(p = lock_user(VERIFY_WRITE, arg2, arg3, 0))) > + goto efault; > + ret = get_errno(read(arg1, p, arg3)); > + unlock_user(p, arg2, ret); > + } > break; > case TARGET_NR_write: > if (!(p = lock_user(VERIFY_READ, arg2, arg3, 1))) > @@ -4217,10 +4221,14 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, > goto unimplemented; > #endif > case TARGET_NR_acct: > - if (!(p = lock_user_string(arg1))) > - goto efault; > - ret = get_errno(acct(path(p))); > - unlock_user(p, arg1, 0); > + if (arg1 == 0) { > + ret = get_errno(acct(NULL)); > + } else { > + if (!(p = lock_user_string(arg1))) > + goto efault; > + ret = get_errno(acct(path(p))); > + unlock_user(p, arg1, 0); > + } > break; > #ifdef TARGET_NR_umount2 /* not on alpha */ > case TARGET_NR_umount2: > -- > 1.5.6.5 > > > -- > "rm -rf" only sounds scary if you don't have backups > > > -- Aurelien Jarno GPG: 1024D/F1BCDB73 aurelien@aurel32.net http://www.aurel32.net