Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp1645298ybi; Sat, 1 Jun 2019 01:52:19 -0700 (PDT) X-Google-Smtp-Source: APXvYqyMlZts18uaRmq+vMxv88+ga3X82qxU3kJYEKQVfyrFEJl+fttcMPGrBxZaqpdwDksFtFht X-Received: by 2002:a65:4349:: with SMTP id k9mr13772698pgq.243.1559379139574; Sat, 01 Jun 2019 01:52:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559379139; cv=none; d=google.com; s=arc-20160816; b=EKC0H8IU7r2CtoqnYwD4U5o/TLmB7OZnuI6KJWGP+H07I+7d/HEvUrxVKRInkOfrV8 soFwj93iMEG56ZpyzJt+7IBDVVRa1/k4UzXyo8sQ3vFa3cjxfaCC3V3XGHJ7D7eeiOkn S7BEuo3noLkcHMNinA6W2g2a4WSuA99QJszXzC+Zn4zVaYt3xwzP4cu1d4WWSyXA9uQX JT1+oDocmF6UlJvqamqbRoD3LiqK46W99YC+Xlehuracfw+MhRlvsfp+MTBpAI3Gt9qp n0u9R8LQUKCN07c1G34g2xYPu2BB2V9J+TGbBzoWEbTuyQSIZh2bZEDA304G/5i4d8kR QQ0w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:subject:content-transfer-encoding :mime-version:user-agent:organization:references:in-reply-to:date:cc :to:from:message-id; bh=bZMuHvC39E6PwMNAEgs+JR894pfNY3zeN+BAnlUW0+I=; b=v9EYyYbbeA32BI89QH4LM2tSfB1Dv97nWGwtNIedmCWA3xcnsoGt1lSlalSyfx4HT7 6Wh991glN3Yo/jGXMjlv1+vtALBGD1TbfsSPL0uvawmS60rMgU1yWZqXf0RV8+a7FaVy x+GifjqTpmxeEkulc+hYQuoNVZ72wiQsnlChVcI4OrNWRiEl/FKJRobFQkjWUFLdG2B2 DvMDBDS9RtUr62HRAVAWXJ63byBIbI3MEOCFxRi2ID6GKGW7GYnCt8mJBOVoLMMAougd ELqHkbEpjzkXJ9Akfq9v/iNblrEIACgpxzlih8gNO2A+9i+dir+cN0DDtAjOoS9CQ4UM xnZg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id m23si8084651pgj.296.2019.06.01.01.51.51; Sat, 01 Jun 2019 01:52:19 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726683AbfFAItx (ORCPT + 99 others); Sat, 1 Jun 2019 04:49:53 -0400 Received: from ou.quest-ce.net ([195.154.187.82]:50923 "EHLO ou.quest-ce.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726058AbfFAItw (ORCPT ); Sat, 1 Jun 2019 04:49:52 -0400 Received: from [2a01:e35:39f2:1220:9dd7:c176:119b:4c9d] (helo=opteyam2) by ou.quest-ce.net with esmtpsa (TLS1.1:RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1hWzhq-000CZz-Pq; Sat, 01 Jun 2019 10:49:39 +0200 Message-ID: <7ba353ba112ebbe1493fcc210795cf74a0e83f74.camel@opteya.com> From: Yann Droneaud To: Christian Brauner Cc: viro@zeniv.linux.org.uk, linux-kernel@vger.kernel.org, torvalds@linux-foundation.org, jannh@google.com, fweimer@redhat.com, oleg@redhat.com, arnd@arndb.de, dhowells@redhat.com, Pavel Emelyanov , Andrew Morton , Adrian Reber , Andrei Vagin , linux-api@vger.kernel.org Date: Sat, 01 Jun 2019 10:49:38 +0200 In-Reply-To: <20190531220815.owrc5kbbdemmwdhs@brauner.io> References: <20190529152237.10719-1-christian@brauner.io> <1058006e0df4b52b3e53c7b3202c04140899aeb5.camel@opteya.com> <20190531220815.owrc5kbbdemmwdhs@brauner.io> Organization: OPTEYA Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.32.2 (3.32.2-1.fc30) MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 2a01:e35:39f2:1220:9dd7:c176:119b:4c9d X-SA-Exim-Mail-From: ydroneaud@opteya.com X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on ou.quest-ce.net X-Spam-Level: X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham version=3.3.2 Subject: Re: [PATCH v1 1/2] fork: add clone3 X-SA-Exim-Version: 4.2.1 (built Mon, 26 Dec 2011 16:24:06 +0000) X-SA-Exim-Scanned: Yes (on ou.quest-ce.net) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, Le samedi 01 juin 2019 à 00:08 +0200, Christian Brauner a écrit : > On Wed, May 29, 2019 at 05:42:14PM +0200, Yann Droneaud wrote: > > Le mercredi 29 mai 2019 à 17:22 +0200, Christian Brauner a écrit : > > > This adds the clone3 system call. > > > > > > > > > diff --git a/kernel/fork.c b/kernel/fork.c > > > index b4cba953040a..6bc3e3d17150 100644 > > > --- a/kernel/fork.c > > > +++ b/kernel/fork.c > > > @@ -2472,7 +2475,96 @@ SYSCALL_DEFINE5(clone, unsigned long, > > > clone_flags, unsigned long, newsp, > > > unsigned long, tls) > > > #endif > > > { > > > - return _do_fork(clone_flags, newsp, 0, parent_tidptr, > > > child_tidptr, tls); > > > + struct kernel_clone_args args = { > > > + .flags = clone_flags, > > > + .stack = newsp, > > > + .pidfd = parent_tidptr, > > > + .parent_tidptr = parent_tidptr, > > > + .tls = tls, > > > + .child_tidptr = child_tidptr, > > > + }; > > > + > > > + /* clone(CLONE_PIDFD) uses parent_tidptr to return a pidfd */ > > > + if ((clone_flags & CLONE_PIDFD) && (clone_flags & > > > CLONE_PARENT_SETTID)) > > > + return -EINVAL; > > > + > > > + return _do_fork(&args); > > > +} > > > + > > > +static bool clone3_flags_valid(u64 flags) > > > +{ > > > + if (flags & CLONE_DETACHED) > > > + return false; > > > + > > > + if (flags & ~CLONE_MAX) > > > + return false; > > > + > > > + return true; > > > +} > > > + > > > +static int copy_clone_args_from_user(struct kernel_clone_args > > > *kargs, > > > + struct clone_args __user *uargs, > > > + size_t size) > > > +{ > > > + struct clone_args args; > > > + > > > + if (unlikely(size > PAGE_SIZE)) > > > + return -E2BIG; > > > + > > > + if (unlikely(size < sizeof(struct clone_args))) > > > + return -EINVAL; > > > + > > > + if (unlikely(!access_ok(uargs, size))) > > > + return -EFAULT; > > > + > > > + if (size > sizeof(struct clone_args)) { > > > + unsigned char __user *addr; > > > + unsigned char __user *end; > > > + unsigned char val; > > > + > > > + addr = (void __user *)uargs + sizeof(struct > > > clone_args); > > > + end = (void __user *)uargs + size; > > > + > > > + for (; addr < end; addr++) { > > > + if (get_user(val, addr)) > > > + return -EFAULT; > > > + if (val) > > > + return -E2BIG; > > > > Should be -EINVAL: having something after the structure should be > > handled just like an invalid flags, while still allowing future > > userspace program to probe for support for newer feature. > > (Traveling until Monday, so sorry for delayed responses.) > > This copies what: > > kernel/sched/core.c:sched_copy_attr() > kernel/event/core.c:perf_copy_attr() > > are already doing. Consistency might be good here but, I think. > I would have prefer all the above to returns -EINVAL for consistency with the unknown flags check ... "Designing the API: Planning for Extension" [1] doesn't mandate return -EINVAL for that case, but does make perf_event_open() and perf_copy_attr() the example to follow ... so you're right. [1] https://www.kernel.org/doc/html/v5.1/process/adding-syscalls.html#designing-the-api-planning-for-extension Regards. -- Yann Droneaud OPTEYA