From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id E650DC04A6A for ; Thu, 10 Aug 2023 17:02:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4C01E6B0071; Thu, 10 Aug 2023 13:02:24 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4706C6B0072; Thu, 10 Aug 2023 13:02:24 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3603F6B0075; Thu, 10 Aug 2023 13:02:24 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 2714D6B0071 for ; Thu, 10 Aug 2023 13:02:24 -0400 (EDT) Received: from smtpin22.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id C56991210F6 for ; Thu, 10 Aug 2023 17:02:22 +0000 (UTC) X-FDA: 81108813324.22.D5D86B2 Received: from fanzine2.igalia.com (fanzine2.igalia.com [213.97.179.56]) by imf11.hostedemail.com (Postfix) with ESMTP id 7D8FF4007E for ; Thu, 10 Aug 2023 17:01:44 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=hsrqEwj5; dmarc=none; spf=pass (imf11.hostedemail.com: domain of andrealmeid@igalia.com designates 213.97.179.56 as permitted sender) smtp.mailfrom=andrealmeid@igalia.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1691686906; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=+8cb/lhV+x8UwVjoJQYGCnkcCuUk06gy5cDVFa9lP4Y=; b=226gjm88qguVY0aLvqJuJgkxZt1UaLUMRaHug4KdIebBu6twqF5po2QjAEvKjm9CtSwAkX JxxiGwMhEnJhcAO8CJc/k4FxeB3wQP/vWYO/xQNPjNX4jxTfkzYGJtqaNKrzByQvDsEwO9 mfoUPX9kIwI5Z0VIG+KDO9heUCUwn/0= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=igalia.com header.s=20170329 header.b=hsrqEwj5; dmarc=none; spf=pass (imf11.hostedemail.com: domain of andrealmeid@igalia.com designates 213.97.179.56 as permitted sender) smtp.mailfrom=andrealmeid@igalia.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1691686906; a=rsa-sha256; cv=none; b=fw32p/iVzTBF19zhUwc/0wpLiKEA/1jlXBzMk3zBDtAYJo63bskV4D6IRQaNLajbPascI9 CXSLU2sSjYvHvzfOArvRqTQjtewmJTNmjd9kUJwMwXD4nVnuMxayPH+mvy7erD+eKLmtBg 9xGRz4DnTBLwOqe0+2J5Tql972lxTbQ= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:In-Reply-To:From: References:Cc:To:Subject:MIME-Version:Date:Message-ID:Sender:Reply-To: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=+8cb/lhV+x8UwVjoJQYGCnkcCuUk06gy5cDVFa9lP4Y=; b=hsrqEwj5uFEl/A5N0NsIkOKko7 VBHWm8seX0TywTYIz6PrrK4tDN+b292bTV8mrnhY9V9o2xntn1fKqNdnx9TfNCnjRf7bW5kNVHpwL lTSU5/Icyjn9S1KEQxca+JR/WtQFa1Ifc+UH3LC/DEzrKTtHDpIG5ciNNwrrV37wPVduwRvFMxDFf WMwxsAeXae6gquIRGZKoL1wWIBeM5LvnbdvjoOUfvvZEg0NKD+hH5K6TFs7Moe+a9qOEaurTJYWSy ItDAauA5HLg82zjn6oOGfImeRSP1QTlzDYJ83GceVZKFr4w3G7hTmHfNSMtLyrUcp8fVHbYOBgFqy lVrrCDEA==; Received: from [191.193.179.209] (helo=[192.168.1.111]) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_128_GCM:128) (Exim) id 1qU92L-00Gl8h-Vp; Thu, 10 Aug 2023 19:01:26 +0200 Message-ID: <3bcdb026-8558-43ca-80c1-776216dcd86c@igalia.com> Date: Thu, 10 Aug 2023 14:01:20 -0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 05/14] futex: Add sys_futex_wake() To: Peter Zijlstra Cc: linux-kernel@vger.kernel.org, mingo@redhat.com, dvhart@infradead.org, dave@stgolabs.net, tglx@linutronix.de, axboe@kernel.dk, Andrew Morton , urezki@gmail.com, hch@infradead.org, lstoakes@gmail.com, Arnd Bergmann , linux-api@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, malteskarupke@web.de, Geert Uytterhoeven References: <20230807121843.710612856@infradead.org> <20230807123323.090897260@infradead.org> <071c02ae-a74d-46d8-990b-262264b62caf@igalia.com> <20230810121341.GX212435@hirez.programming.kicks-ass.net> Content-Language: en-US From: =?UTF-8?Q?Andr=C3=A9_Almeida?= In-Reply-To: <20230810121341.GX212435@hirez.programming.kicks-ass.net> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 7D8FF4007E X-Stat-Signature: q1amosq75ihpcukashh3crnqoxusyrd9 X-Rspam-User: X-HE-Tag: 1691686904-990677 X-HE-Meta: U2FsdGVkX18zLkEDnXu68ZUJhr3Ce0tJr7B0RbwpVBuWtLjuZhd3Git5iwUiFSofI8z03Swvf0s+t95vtq+DI1IjY+tRy402P99ZNhOYsUT3D4JGUioM4JM1szj/on7+Kivi0dZBqrZV+WgdBXobz6jGT7noZTlpq7r/yX0DLNgI9qEmlnjySFwILXA0VXsNPYpMmumSAnR4nu3OrlsmnWrEVe6jEj7mbXsT4dCAJmvcVF9qk0MDTGsmGrAvGwSTAstiNIT8uTt8DlGB0X9lfdYxKBWOGT0xoydd0/8mFQngygO/IirJSkwiRtAk6dQuYQdSxumyfcxuioDgfzHA1cMebCgv31cYfRTosJG1j8aHjgUUYg6pu7S/ssTgFNgCTn21GLFimo7PXfC0Isd7swG5dpSufAHVSHapAh4tRWYTr0AM9JiFmrqFeHUQC2s1uOifat5kdG61YsatojbhSpKpk3xNGltugqFwdhxZXPTH2e/RtHjhclV7g0DH0lkXOXzG9UzF9SkhXB5si3WFaFrYRXRJ8u1ETnaNCGoV1ncCxtHoAyRKQidYESZl94Lb+1g+oSvjDTcS/QdSxM/QIvC8oBo260IU7KrGmpQjV8pBMy5FhWalQvdESi9iv7Pd0KB3LbLPn7gO58kRZhHCZjlF6MW8q2OAjIdwdO3mbrCGbvpP3rnzXTkCU8cKmP/olsn3yII+cgJFQiFXqI0c7UyJnuRX9InBGGZ/BtOFSjtc5bDjTfgu4ZDsKx6KLNyxfVSzqXjA7EsPYu4rz/HvAoKiNF/eFuIwB3DHsb/s+mmFJyTYHuaysJjvX5wPxF98Ra3Jp/OErt9VfPCe1FDZ1Jnkoj9Z+ldc86i7FrMSKJGSZmARenR8wCOWvPhfCxd9cIO3lomMTn07QvGdUSx7TrL9MyjD3GbYQKf02hgTGL+b01ErFFgW1X9KzjbO1dQYCRFviiiiwPZaV6mJ5Ma qRZJBpjm ye1co1WAzDDkpw9L5jmbeZBF7YEeb1ZSjWaLvBH3AaX77cyh8N2KMucneqPfFIH+8liiVYJEENqvz6zYSnDktxuRVXU7CtFDjcpu2BFQSbagheL5R3ylDxWVRVm90aOlMHx9vfgIOlmIj74h3l69PCDHs+y1F00VD01mfSBgGwC4/Ku3ZVjgPv+s+84cPqp3hIujq3kB1SCHuLnT5W1/1gM6V5I0PiBnWGHCRFsWBfhlLHVP/Dlk/IpHvDygrjmlhy/Q+N7ya69Ny2SclCuGDjVvbW+9ONgtJStIiHRAOSE8XFePGxp1UVVbriKaVBpPHIUMCpgL1lG4Aj+lrrmBzYZon4p9jvnInxPe7GkU2faPMhPfVEMxN5TveOquYuP9iOecsVpq6dBO/8PJNDJ7EXQiojwfIjaSY3ZwZsPg7jy9wDL3wHX5VkPASs5CRYkVv9knUm7tbSuEEOQNT2Us8JDrJXw== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: Em 10/08/2023 09:13, Peter Zijlstra escreveu: > On Wed, Aug 09, 2023 at 07:25:19PM -0300, André Almeida wrote: >> Hi Peter, >> >> Em 07/08/2023 09:18, Peter Zijlstra escreveu: >>> To complement sys_futex_waitv() add sys_futex_wake(). This syscall >>> implements what was previously known as FUTEX_WAKE_BITSET except it >>> uses 'unsigned long' for the bitmask and takes FUTEX2 flags. >>> >>> The 'unsigned long' allows FUTEX2_SIZE_U64 on 64bit platforms. >>> >>> Signed-off-by: Peter Zijlstra (Intel) >>> Acked-by: Geert Uytterhoeven >>> --- >> >> [...] >> >>> +/* >>> + * sys_futex_wake - Wake a number of futexes >>> + * @uaddr: Address of the futex(es) to wake >>> + * @mask: bitmask >>> + * @nr: Number of the futexes to wake >>> + * @flags: FUTEX2 flags >>> + * >>> + * Identical to the traditional FUTEX_WAKE_BITSET op, except it is part of the >>> + * futex2 family of calls. >>> + */ >>> + >>> +SYSCALL_DEFINE4(futex_wake, >>> + void __user *, uaddr, >>> + unsigned long, mask, >>> + int, nr, >>> + unsigned int, flags) >>> +{ >> >> Do you think we could have a >> >> if (!nr) >> return 0; >> >> here? Otherwise, calling futex_wake(&f, 0, flags) will wake 1 futex (if >> available), which is a strange undocumented behavior in my opinion. > > Oh 'cute' that.. yeah, but how about I put it ... > >>> + if (flags & ~FUTEX2_VALID_MASK) >>> + return -EINVAL; >>> + >>> + flags = futex2_to_flags(flags); >>> + if (!futex_flags_valid(flags)) >>> + return -EINVAL; >>> + >>> + if (!futex_validate_input(flags, mask)) >>> + return -EINVAL; > > here, because otherwise we get: > > sys_futex_wake(&f, 0xFFFF, 0, FUTEX2_SIZE_U8) > > to return 0, even though that is 'obviously' nonsensical and should > return -EINVAL. Or even garbage flags would be 'accepted'. > > (because 0xFFFF is larger than U8 can accomodate) > That make sense to me, but we would also want to validate the value of f, if it's NULL or something strange to return -EINVAL... but this happens only inside get_futex_key()... To make this right, I think we would need to move this verification to the syscall validation part: if (unlikely((address % sizeof(u32)) != 0)) return -EINVAL; if (unlikely(!access_ok(uaddr, sizeof(u32)))) return -EFAULT; And have u32 replaced with the proper size being used. >>> + >>> + return futex_wake(uaddr, flags, nr, mask); >>> +}