Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752912AbdFMJ33 (ORCPT ); Tue, 13 Jun 2017 05:29:29 -0400 Received: from mail-wr0-f193.google.com ([209.85.128.193]:33262 "EHLO mail-wr0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751884AbdFMJ30 (ORCPT ); Tue, 13 Jun 2017 05:29:26 -0400 Subject: Re: [PATCH] fs: fcntl, avoid undefined behaviour To: zhong jiang Cc: viro@zeniv.linux.org.uk, linux-kernel@vger.kernel.org, Jeff Layton , "J. Bruce Fields" , linux-fsdevel@vger.kernel.org, Xishi Qiu References: <20161014092342.25546-1-jslaby@suse.cz> <593E20A1.10608@huawei.com> From: Jiri Slaby Message-ID: <53f29baf-4da1-f2db-aec4-32291dc8db7d@suse.cz> Date: Tue, 13 Jun 2017 11:29:23 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.1.1 MIME-Version: 1.0 In-Reply-To: <593E20A1.10608@huawei.com> Content-Type: text/plain; charset=iso-8859-2 Content-Language: en-GB Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1581 Lines: 52 On 06/12/2017, 07:03 AM, zhong jiang wrote: > On 2016/10/14 17:23, Jiri Slaby wrote: >> fcntl(0, F_SETOWN, 0x80000000) triggers: >> UBSAN: Undefined behaviour in fs/fcntl.c:118:7 >> negation of -2147483648 cannot be represented in type 'int': >> CPU: 1 PID: 18261 Comm: syz-executor Not tainted 4.8.1-0-syzkaller #1 >> ... >> Call Trace: >> ... >> [] ? f_setown+0x1d8/0x200 >> [] ? SyS_fcntl+0x999/0xf30 >> [] ? entry_SYSCALL_64_fastpath+0x23/0xc1 >> >> Fix that by checking the arg parameter properly (against INT_MAX) and >> return immediatelly in case it is wrong. No error is returned, the >> same as in other cases. >> >> Signed-off-by: Jiri Slaby >> Cc: Jeff Layton >> Cc: "J. Bruce Fields" >> Cc: Alexander Viro >> Cc: linux-fsdevel@vger.kernel.org >> --- >> fs/fcntl.c | 4 ++++ >> 1 file changed, 4 insertions(+) >> >> diff --git a/fs/fcntl.c b/fs/fcntl.c >> index 350a2c8cfd28..bfc3b040d956 100644 >> --- a/fs/fcntl.c >> +++ b/fs/fcntl.c >> @@ -112,6 +112,10 @@ void f_setown(struct file *filp, unsigned long arg, int force) >> enum pid_type type; >> struct pid *pid; >> int who = arg; >> + >> + if (arg > INT_MAX) >> + return; >> + >> type = PIDTYPE_PID; >> if (who < 0 >> type = PIDTYPE_PGID; > Hi, Jiri > > I hit the same issue, but I see the upstream is still not changed. Had any problem? Hi, it needed an update which I have just sent. So let's see if that gets applied. thanks, -- js suse labs