From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34727) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aHTXU-0002a8-29 for qemu-devel@nongnu.org; Fri, 08 Jan 2016 04:40:56 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1aHTXQ-00082M-Nn for qemu-devel@nongnu.org; Fri, 08 Jan 2016 04:40:55 -0500 Received: from out1134-177.mail.aliyun.com ([42.120.134.177]:61122) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1aHTXQ-00081V-Ac for qemu-devel@nongnu.org; Fri, 08 Jan 2016 04:40:52 -0500 References: <1452218349-3793-1-git-send-email-chengang@emindsoft.com.cn> <568F7270.5000506@vivier.eu> From: Chen Gang Message-ID: <568F8412.4000507@emindsoft.com.cn> Date: Fri, 8 Jan 2016 17:40:34 +0800 MIME-Version: 1.0 In-Reply-To: <568F7270.5000506@vivier.eu> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH] linux-user/syscall.c: Add SO_RCVTIMEO and SO_SNDTIMEO for getsockopt List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Laurent Vivier , riku.voipio@iki.fi Cc: peter.maydell@linaro.org, qemu-devel@nongnu.org, rth@twiddle.net Firstly, thank you very much for your careful work. On 2016年01月08日 16:25, Laurent Vivier wrote: > > > Le 08/01/2016 02:59, chengang@emindsoft.com.cn a écrit : [...] >> @@ -1692,10 +1693,30 @@ static abi_long do_getsockopt(int sockfd, int level, int optname, >> switch (optname) { >> /* These don't just return a single integer */ >> case TARGET_SO_LINGER: >> - case TARGET_SO_RCVTIMEO: >> - case TARGET_SO_SNDTIMEO: >> case TARGET_SO_PEERNAME: >> goto unimplemented; >> + > > useless blank line > OK. >> + case TARGET_SO_RCVTIMEO: >> + optname = SO_RCVTIMEO; >> + goto time_case; >> + case TARGET_SO_SNDTIMEO: >> + optname = SO_SNDTIMEO; >> + time_case: > > Something like in "int_case", I think optlen is a pointer, not the length: > > if (get_user_u32(len, optlen)) > return -TARGET_EFAULT; > if (len < 0) > return -TARGET_EINVAL; > OK. > >> + if (optlen < sizeof(struct target_timeval)) { >> + return -TARGET_EINVAL; >> + } > > You don't have to check the len (kernel doesn't), EINVAL is not listed > in the getsockopt() error cases, it should be an EFAULT, and this will > be managed by copy_to_user_timeval(). > OK. >> + lv = sizeof(tv); >> + ret = get_errno(getsockopt(sockfd, level, optname, &tv, &lv)); >> + if (ret < 0) { >> + return ret; >> + } > > if (len > lv) > len = lv; > OK. >> + if (copy_to_user_timeval(optval_addr, &tv)) { >> + return -TARGET_EFAULT; >> + } >> + if (put_user_u32(sizeof(struct target_timeval), optlen)) { >> + return -TARGET_EFAULT; >> + } > > if (put_user_u32(len, optlen)) > return -TARGET_EFAULT; > OK. I shall send patch v2 for it, in the next week. Thanks. -- Chen Gang (陈刚) Open, share, and attitude like air, water, and life which God blessed