Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp3963326ybb; Mon, 23 Mar 2020 10:55:53 -0700 (PDT) X-Google-Smtp-Source: ADFU+vv38gtBqZm3IT5Uj5E4FgPZTGVbA7keLPbe4IVamN0TEbYMXHwN9Ja5dZFPFYCn51U+e6X0 X-Received: by 2002:aca:c596:: with SMTP id v144mr425088oif.136.1584986153626; Mon, 23 Mar 2020 10:55:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584986153; cv=none; d=google.com; s=arc-20160816; b=nSeI4xet7/OH6UolqKtgGzGSno3CUBmY8oaJ/x1h5YyvNOslQ8ug27QkanAh6Bi/fk a+WSs8s+TkC0+P8Hmd4jBgkZXJzfMqd8t2U0J3J7H5zV437hSmSe4ULikCN23Eem9Ird a+IVd5XUS1yBOS6zDBvsU5dqNTbg/K1e5mHSxjlYTkpbMRMdWL5wjcoYiPXoUIqFZOUe lyBt/bwe75PyQgvVG7KUzBgfIQqgo6lTowv1Jfz7TvooUwj3zgmAnam9i8Xbh20sut6X B0pkIJVvpQs0s1aEovzJ5QMDDwyNw6IXUn40aNLFH1QIuJw5Ch/2InubAIaQW7t9WTmd YpTw== 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=+XjXArON/nteRXhEm+avg+BQR0G/+8Zsnf7Y6LGWsQw=; b=Ij6yEerTMzdqOORKwBCcMArDwi3VB4imxXaS1Oo+kpnL/kusuViRDGrWjH/wO1UbzS A4iq3dcWsK1uKX5AdlaETZkqLSRofUNvOBe+FsxbG0ojVaaNU3P/MnJCZdEj8xm1gklz VvOt5zALJDCg9PqFeAuUvquHprFTHiqMessnkE3xRM5Wn2y1c8XxsfqFt86q1sQ9mvSr CZPnKthypaz9w4aZBfNYTWKSStazjUhDKGzgeLmnfL9Fbhs4kGiP0RkrqNIyDWTdTfNy kK4eWts/ZqnxD9fP8UhoDCMthpOoGTLAIHtvuEkTaB5cWcHY/VCmWG6468Y90eORCY+1 rWqA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=LRurrVu3; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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. [209.132.180.67]) by mx.google.com with ESMTP id u135si7537768oif.248.2020.03.23.10.55.41; Mon, 23 Mar 2020 10:55:53 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=LRurrVu3; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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 S1727158AbgCWRzU (ORCPT + 99 others); Mon, 23 Mar 2020 13:55:20 -0400 Received: from mail-wr1-f65.google.com ([209.85.221.65]:40566 "EHLO mail-wr1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727090AbgCWRzT (ORCPT ); Mon, 23 Mar 2020 13:55:19 -0400 Received: by mail-wr1-f65.google.com with SMTP id f3so18228236wrw.7 for ; Mon, 23 Mar 2020 10:55:19 -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=+XjXArON/nteRXhEm+avg+BQR0G/+8Zsnf7Y6LGWsQw=; b=LRurrVu3FEJrjddH9Dp7x6EbblzfnT1KxjLAvNlZhOC/xTqU1Ow8u7Dl5F8H1x+wCc dUDgrllLRf4HfPHH5q4tSb1tyd4vk2uR2DFjPa0SAxNTrOxtkHQ4HfY3Anzy3cUVBl+l Y7MMZ5nADcEIY1taSc9wDaV9zTlh+9sRomE7ZfuZdQ3aYFKS627GU9nAo4cZP/Hyz8YM RUPfV3wz0cqgN/SmqpdSu4AGSzE9af5zZmBOTg3Yf93WoSsU09odZzqwLUbJFasFjNV5 FSTAule32F4o17HEMxIsw+KiT6utAOgfMK5VQfd0Z6542bNo4pEyVSlrqWDdV28FEiCe UV6w== 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=+XjXArON/nteRXhEm+avg+BQR0G/+8Zsnf7Y6LGWsQw=; b=X7K+tZBZZFrHlQskPrkWvN8abFzdg2VZFZ1APYV5RHJ+eLWnX9Mu3skbe+zLEayFiI XqnR8Iyz/kXx8pXvuqCCxwjpSttQq3BMX12C57KPqrGuFVx9pOo99nYb1bMEtdL8bGRl 7f3z93OC8Bgo1CPwYtR4CJL0QlSBDegCTlLOV25qh1Zcwm7SR18rnlRf16Xl49H7M1NT /BkRHF8mJGV5xQtjmMACNgVpS+fF/HvhHBXPGYWaCj81hVckSqFRsaW8Giyg+8nCgRcI 70n1ijG4wEXxc+hGNJ6L27eJsfcReqznwtMib4601Q1//N5Vyq4IonHU7mGERjdHv6D4 4u/w== X-Gm-Message-State: ANhLgQ195IclCsDMungQDhjPHIoGJd/A/0adRT8TzWpQE8t6U2DOL30E aSrh1gbJl4fgRNVkA45SiglkBDWjx6Un7cM7vMGIWQ== X-Received: by 2002:a05:6000:100f:: with SMTP id a15mr29680460wrx.382.1584986118163; Mon, 23 Mar 2020 10:55:18 -0700 (PDT) MIME-Version: 1.0 References: <000000000000277a0405a16bd5c9@google.com> <5058aabe-f32d-b8ef-57ed-f9c0206304c5@redhat.com> <20200323163925.GP28711@linux.intel.com> In-Reply-To: From: Alexander Potapenko Date: Mon, 23 Mar 2020 18:55:07 +0100 Message-ID: Subject: Re: BUG: unable to handle kernel NULL pointer dereference in handle_external_interrupt_irqoff To: Nick Desaulniers Cc: Dmitry Vyukov , Paolo Bonzini , syzbot , clang-built-linux , Borislav Petkov , "H. Peter Anvin" , Jim Mattson , Joerg Roedel , KVM list , LKML , Ingo Molnar , syzkaller-bugs , Thomas Gleixner , Vitaly Kuznetsov , Wanpeng Li , "the arch/x86 maintainers" , Sean Christopherson 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 I've reduced the faulty test case to the following code: ================================= a; long b; register unsigned long current_stack_pointer asm("rsp"); handle_external_interrupt_irqoff() { asm("and $0xfffffffffffffff0, %%rsp\n\tpush $%c[ss]\n\tpush " "%[sp]\n\tpushf\n\tpushq $%c[cs]\n\tcall *%[thunk_target]\n" : [ sp ] "=&r"(b), "+r" (current_stack_pointer) : [ thunk_target ] "rm"(a), [ ss ] "i"(3 * 8), [ cs ] "i"(2 * 8) ); } ================================= (in fact creduce even throws away current_stack_pointer, but we probably want to keep it to prove the point). Clang generates the following code for it: $ clang vmx.i -O2 -c -w -o vmx.o $ objdump -d vmx.o ... 0000000000000000 : 0: 8b 05 00 00 00 00 mov 0x0(%rip),%eax # 6 6: 89 44 24 fc mov %eax,-0x4(%rsp) a: 48 83 e4 f0 and $0xfffffffffffffff0,%rsp e: 6a 18 pushq $0x18 10: 50 push %rax 11: 9c pushfq 12: 6a 10 pushq $0x10 14: ff 54 24 fc callq *-0x4(%rsp) 18: 48 89 05 00 00 00 00 mov %rax,0x0(%rip) # 1f 1f: c3 retq The question is whether using current_stack_pointer as an output is actually a valid way to tell the compiler it should not clobber RSP. Intuitively it is, but explicitly adding RSP to the clobber list sounds a bit more bulletproof.