Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp464420ybt; Mon, 6 Jul 2020 13:50:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx6psftLn/RYzzBktAZqwYB+eZETlbbvMDZjNJwXYBh0wn/VbN9xvfT4KJ7CiiLEkeFVOkf X-Received: by 2002:a17:906:eb5a:: with SMTP id mc26mr41660813ejb.42.1594068619854; Mon, 06 Jul 2020 13:50:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594068619; cv=none; d=google.com; s=arc-20160816; b=qwpNtglCa9EXcgE+U2BQcuxcyifUoDznCuS8+R+HtB93TVQPgd9Ws1HQQLWO+9BsYD JSm36sIXb6Q/NxHmtlyy/qpDNaS9Heu5+Qppw13xBV4MwrlbVsmkuxQMFtr/J9ImZves fql2370rN/dvMnnJjKv3KWPq+AQxFP1BAP2KnqOkcmMMbf/wvAgCZ624IUZPwSH9Ff79 bX2/MKbO26zb6GtwCv8b2HIdDT55wpbjvOcrum4cuZ/W+sMvIjVDpcxG6O1uFMrSB7/1 uMEpQ50nf3ilkxNng+33W0NIoxywF6Tah+nkQ5jiTDgCX3gegN1B0xobSDF96guwS8HX k5rA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:dkim-filter; bh=rN5G63HY20iVL5jdiy3A5QPcL3ii8OKrJYS4rK5ji/k=; b=ZaAZno5wFeBjWbiXoSr5BUZQSyhUef+GcCTtAxMFpDHZHyt8zJyV3mlcQdG0gt7j5k JVBIf5HzaX570eXJ1C1TQBrehNg/mO/tGCUX50SLKN1dZOHuBt9kKlP7cLPKXJLZgc2x VJoA5nwONu5B7bX+3TjOolBYu1CoW1sWkZRdNlkygjUttbIeuox6oGgcEK2ZIVKapBKA ORQjJ7D8VNIyCOCK7NAENmKc6XaPl/fif7Dav9tJVMPa96vkHVXzHj4c+nMLSCatdiaU RU15kdozOggPrVp1WjEIstihCaOloD8HpDPweVxppP6EL5Qlx2xGqvS0uwO78wWO2Jtl MgmA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@efficios.com header.s=default header.b=GuVCBKDX; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=efficios.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t10si13344641ejs.137.2020.07.06.13.49.55; Mon, 06 Jul 2020 13:50:19 -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; dkim=pass header.i=@efficios.com header.s=default header.b=GuVCBKDX; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=efficios.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727789AbgGFUtq (ORCPT + 99 others); Mon, 6 Jul 2020 16:49:46 -0400 Received: from mail.efficios.com ([167.114.26.124]:57036 "EHLO mail.efficios.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726915AbgGFUtp (ORCPT ); Mon, 6 Jul 2020 16:49:45 -0400 Received: from localhost (localhost [127.0.0.1]) by mail.efficios.com (Postfix) with ESMTP id 864182DCBC1; Mon, 6 Jul 2020 16:49:44 -0400 (EDT) Received: from mail.efficios.com ([127.0.0.1]) by localhost (mail03.efficios.com [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id 4s6JLSRq24oJ; Mon, 6 Jul 2020 16:49:44 -0400 (EDT) Received: from localhost (localhost [127.0.0.1]) by mail.efficios.com (Postfix) with ESMTP id D55052DCAC7; Mon, 6 Jul 2020 16:49:42 -0400 (EDT) DKIM-Filter: OpenDKIM Filter v2.10.3 mail.efficios.com D55052DCAC7 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=efficios.com; s=default; t=1594068582; bh=rN5G63HY20iVL5jdiy3A5QPcL3ii8OKrJYS4rK5ji/k=; h=From:To:Date:Message-Id; b=GuVCBKDX+iEeZ+68jWrZCmVp9U0YVO8+SWqblfdPSroaxAz2qHcsxeKjgaX5W1Zvw GkZhyoZmWCgXTFC8K/PRMCKM00vcSbhMU4siQRYj5LFUdJKNeLGhLdwJUEFu+H5PVI opm8wDQimHONpUVwtu58Y35Z2bBchP5ZB7rEaVnGPHxwm0uMHBwf6VEaHxivuGzAly PEfQg06ZHtvsh4OIOfbDl7fB7MNue3h9CA55EbUCK9MZAtrVDBeJrZlTgFQ9lXyzTC oL89anirwILBOTltIkRJbV/uakxe27/YVPQKZ32aV1WCfxdZiAvpiQTBGWfaTOZF7I 9X3QELa9+0C2Q== X-Virus-Scanned: amavisd-new at efficios.com Received: from mail.efficios.com ([127.0.0.1]) by localhost (mail03.efficios.com [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id ZL6wLRdCWb7k; Mon, 6 Jul 2020 16:49:42 -0400 (EDT) Received: from localhost.localdomain (192-222-181-218.qc.cable.ebox.net [192.222.181.218]) by mail.efficios.com (Postfix) with ESMTPSA id 1940F2DCAC6; Mon, 6 Jul 2020 16:49:42 -0400 (EDT) From: Mathieu Desnoyers To: Thomas Gleixner Cc: linux-kernel@vger.kernel.org, Peter Zijlstra , "Paul E . McKenney" , Boqun Feng , "H . Peter Anvin" , Paul Turner , linux-api@vger.kernel.org, Florian Weimer , Mathieu Desnoyers , Dmitry Vyukov , Neel Natu Subject: [RFC PATCH for 5.8 3/4] rseq: Introduce RSEQ_FLAG_RELIABLE_CPU_ID Date: Mon, 6 Jul 2020 16:49:12 -0400 Message-Id: <20200706204913.20347-4-mathieu.desnoyers@efficios.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200706204913.20347-1-mathieu.desnoyers@efficios.com> References: <20200706204913.20347-1-mathieu.desnoyers@efficios.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org commit 93b585c08d16 ("Fix: sched: unreliable rseq cpu_id for new tasks") addresses an issue with cpu_id field of newly created processes. Expose a flag which can be used by user-space to query whether the kernel implements this fix. Considering that this issue can cause corruption of user-space per-cpu data updated with rseq, it is recommended that user-space detects availability of this fix by using the RSEQ_FLAG_RELIABLE_CPU_ID flag either combined with registration or on its own before using rseq. Signed-off-by: Mathieu Desnoyers Cc: Peter Zijlstra (Intel) Cc: Thomas Gleixner Cc: Florian Weimer Cc: "Paul E. McKenney" Cc: Boqun Feng Cc: "H . Peter Anvin" Cc: Paul Turner Cc: Dmitry Vyukov Cc: Neel Natu Cc: linux-api@vger.kernel.org --- include/uapi/linux/rseq.h | 5 +++++ kernel/rseq.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/include/uapi/linux/rseq.h b/include/uapi/linux/rseq.h index 3b5fba25461a..a548b77c9520 100644 --- a/include/uapi/linux/rseq.h +++ b/include/uapi/linux/rseq.h @@ -21,13 +21,18 @@ enum rseq_cpu_id_state { /* * RSEQ_FLAG_UNREGISTER: Unregister rseq ABI for caller thread. * RSEQ_FLAG_REGISTER: Register rseq ABI for caller thread. + * RSEQ_FLAG_RELIABLE_CPU_ID: rseq provides a reliable cpu_id field. * * Flag value 0 has the same behavior as RSEQ_FLAG_REGISTER, but cannot be * combined with other flags. This behavior is kept for backward compatibility. + * + * The flag RSEQ_FLAG_REGISTER can be combined with the RSEQ_FLAG_RELIABLE_CPU_ID + * flag. */ enum rseq_flags { RSEQ_FLAG_UNREGISTER = (1 << 0), RSEQ_FLAG_REGISTER = (1 << 1), + RSEQ_FLAG_RELIABLE_CPU_ID = (1 << 2), }; enum rseq_cs_flags_bit { diff --git a/kernel/rseq.c b/kernel/rseq.c index 47ce221cd6f9..32cc2e0d961f 100644 --- a/kernel/rseq.c +++ b/kernel/rseq.c @@ -333,6 +333,8 @@ SYSCALL_DEFINE4(rseq, struct rseq __user *, rseq, u32, rseq_len, current->rseq_sig = 0; break; case RSEQ_FLAG_REGISTER: + fallthrough; + case RSEQ_FLAG_REGISTER | RSEQ_FLAG_RELIABLE_CPU_ID: if (current->rseq) { /* * If rseq is already registered, check whether @@ -365,6 +367,8 @@ SYSCALL_DEFINE4(rseq, struct rseq __user *, rseq, u32, rseq_len, */ rseq_set_notify_resume(current); break; + case RSEQ_FLAG_RELIABLE_CPU_ID: + break; default: return -EINVAL; } -- 2.17.1