Received: by 2002:a05:6358:701b:b0:131:369:b2a3 with SMTP id 27csp83495rwo; Fri, 21 Jul 2023 08:51:50 -0700 (PDT) X-Google-Smtp-Source: APBJJlGtG/QDsEBFiNdxWGk6IbjQRDDyb29fCOsPnzIcXkHKM2Mv8Sr9ccirU2hlG/dZTshYo9ei X-Received: by 2002:a05:6a00:24d4:b0:663:5624:6fde with SMTP id d20-20020a056a0024d400b0066356246fdemr482033pfv.22.1689954710445; Fri, 21 Jul 2023 08:51:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689954710; cv=none; d=google.com; s=arc-20160816; b=pcymE160MfcQxdLys0nY/yjNYllxuVh69zbLcAzrgwzVavwXekKPkP9Je9kDNgUxQA U5TRWgf+GpjR7xqTyCqldUvoSc+Ey2p3hYQcVu8If7LOYUCxdBQ7Y8Lb53ZtW9fD5Nir U11maSWm1rqnKHpS26iHS70yGPtHV50+yIim3fuTBn8T2fyiHLHONjc2px8jnlRkVX5V VL7I9H+q6ZzR55VB+cv/4C95n1+bRVLHGtGKm2rdSx1UoNkCXEkMIaS+xoSkeo5OluXT 81YA4VWM9bimb2e7ENQhSFz/ftddmgQQsHECe3H0OlKJMEACYohj9cMAtQvXOM0k+rdo 9srA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:references :cc:to:from:content-language:subject:user-agent:mime-version:date :message-id:dkim-signature; bh=+Jtor7wVKKNS5MffYiRyHgMXWkSZohtdTTdgJNdmVDU=; fh=bredyX3VbdLsEuX1cy/WQ/NT0njjuX4B/Ad0ByceEwI=; b=q8Wgsv+SUSH6tgz0pYik16ruhql2Dcd6T7bb3585NVmNgUrvyRzPXcoMzl59q82X4R g6R/MzWtzyOlzV1a1mxBmtrYk3QYajYKqYaUKKJcwJon+vi3CbEmwfkvBXBBdigqJykl uPJAhwLn6SnvoT70T4+cQsi7ca626uR+WjnimDnrph+PwzWqGP95vNjnsEgRq0Rg/Q1g qCsBfZ9qCfW7dETh41HsnNga1ul+8glHqW/xhhUAQSjnWLENa5dqgTpqOD6akijPf5c4 oyGghkeulTfRMeHq7LWN0kCjHEPa279GC71vigmCNf//OqbPWH0Pu8Ljibe/U5xG564h N3fg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel-dk.20221208.gappssmtp.com header.s=20221208 header.b=xEAHe0uk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id be11-20020a056a001f0b00b0068281dbbd13si3132768pfb.76.2023.07.21.08.51.23; Fri, 21 Jul 2023 08:51:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel-dk.20221208.gappssmtp.com header.s=20221208 header.b=xEAHe0uk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231954AbjGUP3W (ORCPT + 99 others); Fri, 21 Jul 2023 11:29:22 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34962 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231951AbjGUP3V (ORCPT ); Fri, 21 Jul 2023 11:29:21 -0400 Received: from mail-io1-xd2f.google.com (mail-io1-xd2f.google.com [IPv6:2607:f8b0:4864:20::d2f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4AB3430F4 for ; Fri, 21 Jul 2023 08:29:17 -0700 (PDT) Received: by mail-io1-xd2f.google.com with SMTP id ca18e2360f4ac-760dff4b701so30124039f.0 for ; Fri, 21 Jul 2023 08:29:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel-dk.20221208.gappssmtp.com; s=20221208; t=1689953356; x=1690558156; h=content-transfer-encoding:in-reply-to:references:cc:to:from :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=+Jtor7wVKKNS5MffYiRyHgMXWkSZohtdTTdgJNdmVDU=; b=xEAHe0ukghvZo0tCv+eVYjjDykaj3iRP+0jpRYElUjWwhDUsDI6IHCM+UGflw+0KdF MHHNsYgi2cSvcZmvLeY1Nyrgj0KzN5l+2lp87/TLA5HYBhQ3kGnnugU6r7P2Iayw5UwM 3jh9AWURrmJ/YVbWOLsM6GJgxsIKcSt+mvagtSxiSt7cDNFF1BpwDDMcDO8vGvrNA+hf mCbbu6v2PSO4TTENBgtLo3SzA7KjZSirF+ueXCYvHYHUkPB4eKdSOylvY1Ve7varVnDt etyltBVKEDzP2tXHXh0AVjho4k5G6uv0u8RmzWExzAqDTYlXCFpUtLI8PfHvQYr4DAq2 Otlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689953356; x=1690558156; h=content-transfer-encoding:in-reply-to:references:cc:to:from :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=+Jtor7wVKKNS5MffYiRyHgMXWkSZohtdTTdgJNdmVDU=; b=Lr/2Tbe2qZRbbJtVG6Ay7SryV/qtHTmOOw0UgehcEUa+mNDbdZiskMsz2vlNvReEjw Pa9zVJb/SmwUnC5YUOHseA6h7PxtTnHA6c6rbJvXcayueDAFEATL0T/btjSNlTRNXY63 rNkSrTGi6VbCtHXxbvklYJKL898X3/k53J+CtolKm4RAmlaxnGipB4bYX0uZGHXD7yCj GiGruP68aVAsVFAMS4ZMdFxo0ctenLRvG/FD3BVsyn4XH+vTAuki2EdVIWIi/VhUBMts gtiqZSA0v1Yl55shS/8jiCl2DbN3DgTfY3PrC12BPJEgSToJfxyjmevzjeDGRgRhUBg5 fs7g== X-Gm-Message-State: ABy/qLZ5AI4jSjKuQzVk7Vo48Azeczv2QbepwNaxktHrDxJ+xOJ+flme 3d8DJRmPNVofP5DJWJK2S1E/xQ== X-Received: by 2002:a05:6602:3e87:b0:780:cb36:6f24 with SMTP id el7-20020a0566023e8700b00780cb366f24mr2123148iob.2.1689953356527; Fri, 21 Jul 2023 08:29:16 -0700 (PDT) Received: from [192.168.1.94] ([96.43.243.2]) by smtp.gmail.com with ESMTPSA id t18-20020a6b0912000000b00787496dad4bsm1123827ioi.49.2023.07.21.08.29.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 21 Jul 2023 08:29:15 -0700 (PDT) Message-ID: <94b8fcc4-12b5-8d8c-3eb3-fe1e73a25456@kernel.dk> Date: Fri, 21 Jul 2023 09:29:14 -0600 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux aarch64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Subject: Re: [PATCH 06/10] io_uring: add support for futex wake and wait Content-Language: en-US From: Jens Axboe To: Peter Zijlstra Cc: io-uring@vger.kernel.org, linux-kernel@vger.kernel.org, andres@anarazel.de References: <20230720221858.135240-1-axboe@kernel.dk> <20230720221858.135240-7-axboe@kernel.dk> <20230721113031.GG3630545@hirez.programming.kicks-ass.net> <20230721113718.GA3638458@hirez.programming.kicks-ass.net> In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,NICE_REPLY_A,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 7/21/23 8:43?AM, Jens Axboe wrote: > On 7/21/23 5:37?AM, Peter Zijlstra wrote: >> On Fri, Jul 21, 2023 at 01:30:31PM +0200, Peter Zijlstra wrote: >> >> Sorry, I was too quick.. >> >> iof->uaddr = sqe->addr; >> iof->val = sqe->futex_val; >> iof->mask = sqe->futex_mask; >> flags = sqe->futex_flags; >> >> if (flags & ~FUTEX2_MASK) >> return -EINVAL; >> >> iof->flags = futex2_to_flags(flags); >> if (!futex_flags_valid(iof->flags)) >> return -EINVAL; >> >> if (!futex_validate_input(iof->flags, iof->val) || >> !futex_validate_input(iof->flags, iof->mask)) >> return -EINVAL > > Something like that should work, with some variable names fixed up. I > just went with 'addr' for the futex address, addr2 for the value, and > addr3 for the mask. > > Rebased on top of your first 4 updated patches, and added a single patch > that moves FUTEX2_MASK, will run some testing to validate it's all still > sane. FWIW, here's the io_uring incremental after that rebase. Update the liburing futex branch as well, updating the prep helpers to take 64 bit values for mask/val and also add the flags argument that was missing as well. Only other addition was adding those 4 new patches instead of the old 3 ones, and adding single patch that just moves FUTEX2_MASK to futex.h. All checks out fine, tests pass and it works. diff --git a/io_uring/futex.c b/io_uring/futex.c index 93df54dffaa0..4c9f2c841b98 100644 --- a/io_uring/futex.c +++ b/io_uring/futex.c @@ -18,11 +18,11 @@ struct io_futex { u32 __user *uaddr; struct futex_waitv __user *uwaitv; }; - unsigned int futex_val; - unsigned int futex_flags; - unsigned int futex_mask; - unsigned int futex_nr; + unsigned long futex_val; + unsigned long futex_mask; unsigned long futexv_owned; + u32 futex_flags; + unsigned int futex_nr; }; struct io_futex_data { @@ -171,15 +171,28 @@ bool io_futex_remove_all(struct io_ring_ctx *ctx, struct task_struct *task, int io_futex_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) { struct io_futex *iof = io_kiocb_to_cmd(req, struct io_futex); + u32 flags; - if (unlikely(sqe->fd || sqe->buf_index || sqe->addr3)) + if (unlikely(sqe->fd || sqe->buf_index || sqe->file_index)) return -EINVAL; iof->uaddr = u64_to_user_ptr(READ_ONCE(sqe->addr)); - iof->futex_val = READ_ONCE(sqe->len); - iof->futex_mask = READ_ONCE(sqe->file_index); - iof->futex_flags = READ_ONCE(sqe->futex_flags); - if (iof->futex_flags & FUTEX_CMD_MASK) + iof->futex_val = READ_ONCE(sqe->addr2); + iof->futex_mask = READ_ONCE(sqe->addr3); + iof->futex_nr = READ_ONCE(sqe->len); + if (iof->futex_nr && req->opcode != IORING_OP_FUTEX_WAITV) + return -EINVAL; + + flags = READ_ONCE(sqe->futex_flags); + if (flags & ~FUTEX2_MASK) + return -EINVAL; + + iof->futex_flags = futex2_to_flags(flags); + if (!futex_flags_valid(iof->futex_flags)) + return -EINVAL; + + if (!futex_validate_input(iof->futex_flags, iof->futex_val) || + !futex_validate_input(iof->futex_flags, iof->futex_mask)) return -EINVAL; iof->futexv_owned = 0; @@ -211,7 +224,6 @@ int io_futexv_prep(struct io_kiocb *req, const struct io_uring_sqe *sqe) if (ret) return ret; - iof->futex_nr = READ_ONCE(sqe->off); if (!iof->futex_nr || iof->futex_nr > FUTEX_WAITV_MAX) return -EINVAL; -- Jens Axboe