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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 56EE3C74A5B for ; Fri, 17 Mar 2023 09:39:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231305AbjCQJjR (ORCPT ); Fri, 17 Mar 2023 05:39:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57748 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229962AbjCQJjP (ORCPT ); Fri, 17 Mar 2023 05:39:15 -0400 Received: from mail-pg1-x533.google.com (mail-pg1-x533.google.com [IPv6:2607:f8b0:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 352B423C75; Fri, 17 Mar 2023 02:39:14 -0700 (PDT) Received: by mail-pg1-x533.google.com with SMTP id k15so1762192pgt.10; Fri, 17 Mar 2023 02:39:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679045953; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=NeeR+x2NJdavxdOYfpdrEMQAe89MyGMfDA3FFptwvrc=; b=iPgHp0r6Z3pCnuf9b/SBxJeKIz3MPkwzGtNe6kovGNnvJsVW2f0ocF4dYmnxj/Cjby C0ONzUsYgQJ6MLn/PksYRPFZdhOKy2jks4Wcc9XUYYFBAtxitqc4zhcKgKFLuzYPm2Lo RHOTvKO+uTRyNc5I9L/MoHhlrct8jQg6t1HHRouhzSj90OEEt0vNLrdXcedcPKoCG2kJ AnBg5oqEwH4zIvuMiUtCIZhE0JczLpZWrAGE+O8INu0fO1JDhYowCKdLB2XNqQjNMw4X iXu5PiBjZ9sXSbuAJtj/Y8CkLck6A9wtt1Ze6Z0tC31V5d0VefMWQRQQLn877kVkUuDM jXDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679045953; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=NeeR+x2NJdavxdOYfpdrEMQAe89MyGMfDA3FFptwvrc=; b=iiBnIV0NVIWJdNrAlmeoWoqt+F3mjOf+/AZ89/W1gUpR0C8xeGN9udSK3o/FmAIqCj YHPi8x/9IVGYHKfhVcl0Q0Uc150v1mCN+8PCkZYZWKQXCxbxUmEAXP0X2R15qyXFK6xi P0jtXRnZXJNnDh3mm+7Wx2xPww822XmUhlkwSeYFJk1vrAJJjjHEPC3HFY7jzcwyaXxK fawHGx64NYYPG7Q6GK/Y3r5F1efcQ+S68Eq+X1IOko9HLG3aP+BIpwENBAziATopRPbx IXXNfe2VoSu6DiTphciBiuFWJAGxsy/2VYC3C4lcw4LhQgKYLxmGHvcdpf5eXI7sgUEe moyw== X-Gm-Message-State: AO0yUKX4BP0nEFk7CAIfvAxPfXJ7ngh040IAAeMTB7BwwBfTf23i+FL+ dMZWPzo1cTDimR9UnMLp+hBsFkNgAMMWygi76ag= X-Google-Smtp-Source: AK7set8b/hpUYvinzbakbM4Qe7xrTuC4DytJeB9Smn9Fv5M5epfCDXtDPeaUCFstb+NnkwQgXHiAMMQHl1WrhDoB3+U= X-Received: by 2002:a65:528c:0:b0:50b:18ac:fbea with SMTP id y12-20020a65528c000000b0050b18acfbeamr1788547pgp.9.1679045953561; Fri, 17 Mar 2023 02:39:13 -0700 (PDT) MIME-Version: 1.0 References: <20230307023946.14516-1-xin3.li@intel.com> <20230307023946.14516-29-xin3.li@intel.com> In-Reply-To: <20230307023946.14516-29-xin3.li@intel.com> From: Lai Jiangshan Date: Fri, 17 Mar 2023 17:39:01 +0800 Message-ID: Subject: Re: [PATCH v5 28/34] x86/fred: fixup fault on ERETU by jumping to fred_entrypoint_user To: Xin Li Cc: linux-kernel@vger.kernel.org, x86@kernel.org, kvm@vger.kernel.org, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, peterz@infradead.org, andrew.cooper3@citrix.com, seanjc@google.com, pbonzini@redhat.com, ravi.v.shankar@intel.com Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org > +#ifdef CONFIG_X86_FRED > +static bool ex_handler_eretu(const struct exception_table_entry *fixup, > + struct pt_regs *regs, unsigned long error_code) > +{ > + struct pt_regs *uregs = (struct pt_regs *)(regs->sp - offsetof(struct pt_regs, ip)); > + unsigned short ss = uregs->ss; > + unsigned short cs = uregs->cs; > + > + fred_info(uregs)->edata = fred_event_data(regs); > + uregs->ssx = regs->ssx; > + uregs->ss = ss; > + uregs->csx = regs->csx; > + uregs->current_stack_level = 0; > + uregs->cs = cs; Hello If the ERETU instruction had tried to return from NMI to ring3 and just faulted, is NMI still blocked? We know that IRET unconditionally enables NMI, but I can't find any clue in the FRED's manual. In the pseudocode of ERETU in the manual, it seems that NMI is only enabled when ERETU succeeds with bit28 in csx set. If so, this code will fail to reenable NMI if bit28 is not explicitly re-set in csx. Thanks, Lai > + > + /* Copy error code to uregs and adjust stack pointer accordingly */ > + uregs->orig_ax = error_code; > + regs->sp -= 8; > + > + return ex_handler_default(fixup, regs); > +}