Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp1420193ybt; Thu, 18 Jun 2020 08:16:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJygeeDw9TrorMi8e1I5oKJsvbFS0R4Q2UzDmSwrG6lqzMwKysd9/yqW9rNuda3O0Nb/YVFc X-Received: by 2002:a17:906:3154:: with SMTP id e20mr4584143eje.171.1592493397507; Thu, 18 Jun 2020 08:16:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592493397; cv=none; d=google.com; s=arc-20160816; b=YuwSkbiQ4ahk55vy78JqQ+hmiO2JCYQ5u4qqWuQuBamkkOnrlNS/i7Owx9v1w7DnG6 S2bFjXm1H2z7KT2/ESQMAoYy0HnCioxiX/0/VJ8LthLuD9qHRT/D9Si7rkjztdsEYdr2 51IwQCqCJsjRAI2BslPJFhNCB9ZuhrDEW8Baln/bIBgfS1MBzfeUKM/KDk1LUO417/AD tWT9O+LSQyH+CnBRQrXVvrB7DIqxsbEpsTHiPtXskZg3ikI/OiO9B+uwxOAb2WW0p+vA tvJdfmL98sa9/RE1TQyHRso/wEiOdymuyckb0fOd9rbPT/IrA6LBF6IoUt501hLJ2Buw E4IA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=fO4GINLTqRPNQqITpuXVhFaUv7xlTQUTH2mrBTAzQv8=; b=sUHdkGXVf97KSGmBmBKU/dXQ7pQkQGe83YrRczknCXBkTr8dOxHr7I4C9KvP1pL3HK GQDBLSabaESCphK+jm+ZVQxPAyq4W2Dk1hyqq9asYJGUYEnYrbYJjlnmwtJfJ4fcYRFa 0zP5CXuYzlDc4qd4jaureGKWnw3wt2dv8+F50k8VafowJnUd/yR1zbmsgcccQm2V3yps wdrPMuL1snaqmR0Wyt8Y5GxbTKeGBlXBU7Z/w2OC/o9C1UlbAAAWXR0Ek/GIMF3zHjiE qrieAkdx9lz5OibXbOr5tyIJF7cs7kL6v7Mk/e9i37X+Kb2qGNKvQxQP8ZzBmdxRf5jF Wbwg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=ksbBZY96; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id de28si2037144edb.492.2020.06.18.08.16.13; Thu, 18 Jun 2020 08:16:37 -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=@google.com header.s=20161025 header.b=ksbBZY96; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727970AbgFRPN6 (ORCPT + 99 others); Thu, 18 Jun 2020 11:13:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33846 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726879AbgFRPN5 (ORCPT ); Thu, 18 Jun 2020 11:13:57 -0400 Received: from mail-oo1-xc42.google.com (mail-oo1-xc42.google.com [IPv6:2607:f8b0:4864:20::c42]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E17B8C06174E for ; Thu, 18 Jun 2020 08:13:56 -0700 (PDT) Received: by mail-oo1-xc42.google.com with SMTP id q188so1241517ooq.4 for ; Thu, 18 Jun 2020 08:13:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=fO4GINLTqRPNQqITpuXVhFaUv7xlTQUTH2mrBTAzQv8=; b=ksbBZY96J7SnvGtlTve3J3SqjR6CAXehOpIYzIb0OdARGchl6NKK4Xn+TdQ3i8Y/K5 xeMev+1/0WxRTSMPrqYppwHlLwHOpH+401TlWjVS5iyDj6WPNXYBcn0X1ONfNJshJ9gE zQDMTlcEH/ByaIadS2y3fycvjMUczwll0Bw3NMMSkZ1wtk2UoxRYDBddROZ2hB+LOHf+ sjM/IcRhtoAd7dvpeRd0pFCFD34N5W48Ln3/2fTXwJl2HR5PNGaAxPsXQoCh0MmMDZX3 IeGmfqzrJW8uJ2FCJv0h3VQ2l50CItP9NsLuBExTaMHve67TjoLhRcBokk3rNwYOcymw XxQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=fO4GINLTqRPNQqITpuXVhFaUv7xlTQUTH2mrBTAzQv8=; b=mId9QxrnuxT/DSKiNONhLe+i3DgRJXR44ch21eiaAB+xNKPaHA6Z6tQbbjKkGG98Mo EiQrYlmqP+JrvRhE07mJGDU5UZ6n+l/tqC4xMg7xyiicvFgieOFSXhWJ9w+Z3GmcdZPH ccqR2G7TWk8z8xK/ZeE2YRrnAQiOh2BJG7mWBhGUYo6hHut0764nJrcgs3FwVwjNfQXH /P1ndz4noXfUlnrqasnqTTVJ2cpB9kVgZz5ZPPIBIqsjoUazWL8ofExfkGYW1JgGK6ij l6I3/4WlsnWmZDAJ+92EdmvA3P3BkQhvv32VwOcDM4Hgi2MvWnP0Brruor5cZ9k6sFoK 1K4A== X-Gm-Message-State: AOAM533S52HCgTBkX5vDvOlFQP+sK54RoxXK0PYIj2D3FE4pgu4btzbj lXj8ul/tIDo8oSTiL8iBsNt9MUcV0l5vFry25Qput+j8WTqyfA== X-Received: by 2002:a05:6820:50a:: with SMTP id m10mr4543140ooj.54.1592493236068; Thu, 18 Jun 2020 08:13:56 -0700 (PDT) MIME-Version: 1.0 References: <20200618144407.520952071@infradead.org> <20200618144801.760070502@infradead.org> In-Reply-To: <20200618144801.760070502@infradead.org> From: Marco Elver Date: Thu, 18 Jun 2020 17:13:45 +0200 Message-ID: Subject: Re: [PATCH 3/7] x86/entry: Fixup bad_iret vs noinstr To: Peter Zijlstra Cc: Josh Poimboeuf , LKML , "the arch/x86 maintainers" , Dmitry Vyukov , Andrey Konovalov , Mark Rutland , mhelsley@vmware.com, Steven Rostedt , jthierry@redhat.com, mbenes@suse.cz Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 18 Jun 2020 at 16:50, Peter Zijlstra wrote: > > vmlinux.o: warning: objtool: fixup_bad_iret()+0x8e: call to memcpy() leaves .noinstr.text section > > Worse, when KASAN there is no telling what memcpy() actually is. Force > the use of __memcpy() which is our assmebly implementation. > > Reported-by: Marco Elver > Suggested-by: Marco Elver > Signed-off-by: Peter Zijlstra (Intel) KASAN no longer crashes, although the stack size increase appears to be sufficient for the particular case I ran into. Tested-by: Marco Elver Thanks! > --- > arch/x86/kernel/traps.c | 6 +++--- > arch/x86/lib/memcpy_64.S | 4 ++++ > 2 files changed, 7 insertions(+), 3 deletions(-) > > --- a/arch/x86/kernel/traps.c > +++ b/arch/x86/kernel/traps.c > @@ -685,13 +685,13 @@ struct bad_iret_stack *fixup_bad_iret(st > (struct bad_iret_stack *)__this_cpu_read(cpu_tss_rw.x86_tss.sp0) - 1; > > /* Copy the IRET target to the temporary storage. */ > - memcpy(&tmp.regs.ip, (void *)s->regs.sp, 5*8); > + __memcpy(&tmp.regs.ip, (void *)s->regs.sp, 5*8); > > /* Copy the remainder of the stack from the current stack. */ > - memcpy(&tmp, s, offsetof(struct bad_iret_stack, regs.ip)); > + __memcpy(&tmp, s, offsetof(struct bad_iret_stack, regs.ip)); > > /* Update the entry stack */ > - memcpy(new_stack, &tmp, sizeof(tmp)); > + __memcpy(new_stack, &tmp, sizeof(tmp)); > > BUG_ON(!user_mode(&new_stack->regs)); > return new_stack; > --- a/arch/x86/lib/memcpy_64.S > +++ b/arch/x86/lib/memcpy_64.S > @@ -8,6 +8,8 @@ > #include > #include > > +.pushsection .noinstr.text, "ax" > + > /* > * We build a jump to memcpy_orig by default which gets NOPped out on > * the majority of x86 CPUs which set REP_GOOD. In addition, CPUs which > @@ -184,6 +186,8 @@ SYM_FUNC_START_LOCAL(memcpy_orig) > retq > SYM_FUNC_END(memcpy_orig) > > +.popsection > + > #ifndef CONFIG_UML > > MCSAFE_TEST_CTL > >