Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp299435ybt; Wed, 17 Jun 2020 00:58:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw3LiDLF552nxK/8DIF/JagMi/WSKBHgKV1503Nkszod3TDLetVURBe1qSvhFPIZdDM+oX6 X-Received: by 2002:aa7:d9c6:: with SMTP id v6mr6098480eds.29.1592380731469; Wed, 17 Jun 2020 00:58:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592380731; cv=none; d=google.com; s=arc-20160816; b=lUQNXSw6K/DaxyFWPqqh3xb5HOWO96DHkfPbjBxGy6vkF2Xnwp8URMEKuiAin8TvvL O7T9/8eZfEhnkfUBKJoFOriNOoA3iDOTYT9T9LbU9QIy/J7eQ113tYmgGOwXhl+WzTQ5 laGYUwWNjxtD7yWi5xTH78rGDljRhsTOYBZpRUMTqI5zssm4N8MyNLdpd85gbKfW3kvy OA6GUcmlBPrGFj+gWPWv39WbXEGLHKck6O91Mrh3qU3BgI7WAzak8pq69gm6KFfXf/PD ek9h/dZWMSFGHDl1ZbTwAy0VLUtMnWAEmUT+k7PzMRTY7CgS35l19eSJodZCNnetOfUY DcBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date; bh=iUMDlLmIdWtotEjMR5OsnIaWN28bbN5894ECllO7rJo=; b=GF0VfIXmjFVmCpGepaIP9tm+xJJ0fTxibA19K2sYxxuJX+Wo8bFfN0tnhnmDX1PPQj Kbi6dlsj92Y6a/sLy5DOAoVAENGDH9WgbsjwCmO83R5NgnW427yeKQdcK3OksVnDp0Aj Tc/Qi8445J8zi4qMPSSGl+SXKYwkmGPyD4NClCrMgDgr4xOFS6LMVdIAi9N29ejRYZop +0Oxc8MKsc0x0SEI4Tmqwc7b/JS6VvClG3Z6ndm8BrAwx2iG67qiZpoMlMo2k02i9HHl bhRRDktOha1FpAmTMk0lUvm5EsO92pqy6+vAImhWMo0ZZMD/ThFkVZ2DJTUj1vTrHWfr 9uHg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d12si2523366ejw.465.2020.06.17.00.58.29; Wed, 17 Jun 2020 00:58:51 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725894AbgFQH4k (ORCPT + 99 others); Wed, 17 Jun 2020 03:56:40 -0400 Received: from verein.lst.de ([213.95.11.211]:42288 "EHLO verein.lst.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725873AbgFQH4j (ORCPT ); Wed, 17 Jun 2020 03:56:39 -0400 Received: by verein.lst.de (Postfix, from userid 2407) id 1200968B05; Wed, 17 Jun 2020 09:56:37 +0200 (CEST) Date: Wed, 17 Jun 2020 09:56:36 +0200 From: Christoph Hellwig To: Vegard Nossum Cc: linux-kernel@vger.kernel.org, hch@lst.de, mm-commits@vger.kernel.org, viro@zeniv.linux.org.uk Subject: Re: [merged] exec-open-code-copy_string_kernel.patch removed from -mm tree Message-ID: <20200617075636.GA13618@lst.de> References: <20200605201952.V2waw9dhw%akpm@linux-foundation.org> <079d08bb-f8de-e119-a427-4ff0274f4616@oracle.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <079d08bb-f8de-e119-a427-4ff0274f4616@oracle.com> User-Agent: Mutt/1.5.17 (2007-11-01) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jun 16, 2020 at 03:14:44PM +0200, Vegard Nossum wrote: > > On 2020-06-05 22:19, akpm@linux-foundation.org wrote: >> The patch titled >> Subject: exec: open code copy_string_kernel >> has been removed from the -mm tree. Its filename was >> exec-open-code-copy_string_kernel.patch >> >> This patch was dropped because it was merged into mainline or a subsystem tree >> >> ------------------------------------------------------ >> From: Christoph Hellwig >> Subject: exec: open code copy_string_kernel >> >> Currently copy_string_kernel is just a wrapper around copy_strings that >> simplifies the calling conventions and uses set_fs to allow passing a >> kernel pointer. But due to the fact the we only need to handle a single >> kernel argument pointer, the logic can be sigificantly simplified while >> getting rid of the set_fs. >> >> Link: http://lkml.kernel.org/r/20200501104105.2621149-3-hch@lst.de >> Signed-off-by: Christoph Hellwig >> Cc: Alexander Viro >> Signed-off-by: Andrew Morton >> --- >> >> fs/exec.c | 45 +++++++++++++++++++++++++++++++++++---------- >> 1 file changed, 35 insertions(+), 10 deletions(-) >> >> --- a/fs/exec.c~exec-open-code-copy_string_kernel >> +++ a/fs/exec.c >> @@ -592,17 +592,42 @@ out: >> */ >> int copy_string_kernel(const char *arg, struct linux_binprm *bprm) >> { >> - int r; >> - mm_segment_t oldfs = get_fs(); >> - struct user_arg_ptr argv = { >> - .ptr.native = (const char __user *const __user *)&arg, >> - }; >> - >> - set_fs(KERNEL_DS); >> - r = copy_strings(1, argv, bprm); >> - set_fs(oldfs); >> + int len = strnlen(arg, MAX_ARG_STRLEN) + 1 /* terminating NUL */; >> + unsigned long pos = bprm->p; >> - return r; >> + if (len == 0) >> + return -EFAULT; > > Just a quick question, how can len ever be 0 here when len was set to > strnlen() + 1? Should the test be different? > > The old version (i.e. copy_strings()) seems to return -EFAULT when > strnlen() returns 0. So, the nasty part here is that strnlen_user has different semantics from strnlen: - strlen excludes the terminating null byte and never returns error codes - strnlen_user includes the terminating null byte, and a 0 return means it could not access the user address (a condition that can't happen for strlen). Now with that back to your original question: I think then len == 0 check can just be removed without replacement.