Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp2063644ybg; Fri, 5 Jun 2020 04:49:21 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzhrfhZ1CxcnlC+UfhSNIaTZg2iJ6sZqJ/btgcR7juEgCoWgl/dtC0n1+ZXpaVOK0reJ+rt X-Received: by 2002:a05:6402:b21:: with SMTP id bo1mr8487988edb.169.1591357761253; Fri, 05 Jun 2020 04:49:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591357761; cv=none; d=google.com; s=arc-20160816; b=dbAYD1S+twxSGiyc7CKo/PFWGBs8XKfEf0OpTiE6zo+tCD+ZA5Om4dU6Qp2JJzz74y 0yoFxL08pWi0DBb/C6SGAQX0rbTGGfkOiWPsPG9/b2VnUip0jsHWm3zhqj0kwiQ78s5b cWjcX1rzGamfeRzrx8mHeH9UiuMzdqCWjmvB3HV3XsWwE3gIkFEsBctGmGZyjE1VQAzq 2iYlPzwP9lGRHn8Tp8v0BTYXUUigbJApBTxMMzg51/g4ZfC1VWjreL8pUz1rpYId8+lW LA+HwuRutFc9UeF9BDqZ12L/zuLp05GhA8zwDbGC9W1q806AxUO5RCJaNIqtmR1XlPqe bc8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=JFv6v8Td+T3HmglLfbCJPchJWggyzjDyAdEDpA6f+Dk=; b=SlyKLkB5/SYvUFDXMfA3CNcTcP5hrqeU/C5RbvcqW3IeZl55rMsRF/HPIkH3GqbK6l 8xlaUPOW3Gj+Z0AIqiNRdswUyYIlh3p8+G73rTasma2dPFKxxWyXJL6PVy064vveT1Gp +gXpQhcJVF7i/iCvSEoXFJiks1gH8u3mQkC1dLRUhRjtvR9kkGsuBsC+bpTQ436DymKJ EcveG2f8wSXUNmUfWAXx9MHXHW2WtaqtA6pfPigvQzlgJvUVRcnd1sqLJPL/GGuj4KyH hmaW/+6UsGFqI8mzOfLuFA5yjVJpQPQ4RDg8hX3RZ/KyvDnRfLD0YdwcBVrDZWWcxMgx bJfQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=YbxUUygc; 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=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i27si3484697edb.334.2020.06.05.04.48.57; Fri, 05 Jun 2020 04:49:21 -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=@redhat.com header.s=mimecast20190719 header.b=YbxUUygc; 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=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726454AbgFELpL (ORCPT + 99 others); Fri, 5 Jun 2020 07:45:11 -0400 Received: from us-smtp-delivery-1.mimecast.com ([207.211.31.120]:59758 "EHLO us-smtp-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726324AbgFELpL (ORCPT ); Fri, 5 Jun 2020 07:45:11 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1591357509; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=JFv6v8Td+T3HmglLfbCJPchJWggyzjDyAdEDpA6f+Dk=; b=YbxUUygcxISSuG4ulQGtuUnmI+Pq2M0KoIG9PBRhduwN1qvzeOQBEzjDF6jPdPamA8Mbzb /pxcbJ+4Y1vDLIxLZkofGb3JX6WlqVFL5BAEajJ5Gfu3zZFSHwODkNOj//5azqUCFOZV/K Dlcl6jYpxk8pryTsiibO6fu3UHhip2I= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-69-l7ZAIX_qNjuuNhigNCb2LQ-1; Fri, 05 Jun 2020 07:45:05 -0400 X-MC-Unique: l7ZAIX_qNjuuNhigNCb2LQ-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9E948800685; Fri, 5 Jun 2020 11:45:03 +0000 (UTC) Received: from prarit.bos.redhat.com (prarit-guest.7a2m.lab.eng.bos.redhat.com [10.16.222.26]) by smtp.corp.redhat.com (Postfix) with ESMTP id 6F59F10013C0; Fri, 5 Jun 2020 11:45:02 +0000 (UTC) From: Prarit Bhargava To: linux-kernel@vger.kernel.org Cc: Prarit Bhargava , Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org, "H. Peter Anvin" , Tony Luck , "Peter Zijlstra (Intel)" , Sean Christopherson , Rahul Tanwar , Xiaoyao Li , Ricardo Neri , Dave Hansen Subject: [PATCH] x86/split_lock: Sanitize userspace and guest error output Date: Fri, 5 Jun 2020 07:44:59 -0400 Message-Id: <20200605114459.22200-1-prarit@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There are two problems with kernel messages in fatal mode that were found during testing of guests and userspace programs. The first is that no kernel message is output when the split lock detector is triggered with a userspace program. As a result the userspace process dies from receiving SIGBUS with no indication to the user of what caused the process to die. The second problem is that only the first triggering guest causes a kernel message to be output because the message is output with pr_warn_once(). This also results in a loss of information to the user. While fixing these I noticed that the same message was being output three times so I'm cleaning that up too. Fix fatal mode output, and use consistent messages for fatal and warn modes for both userspace and guests. Signed-off-by: Prarit Bhargava Cc: Thomas Gleixner Cc: Ingo Molnar Cc: Borislav Petkov Cc: x86@kernel.org Cc: "H. Peter Anvin" Cc: Tony Luck Cc: "Peter Zijlstra (Intel)" Cc: Sean Christopherson Cc: Rahul Tanwar Cc: Xiaoyao Li Cc: Ricardo Neri Cc: Dave Hansen --- arch/x86/kernel/cpu/intel.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/arch/x86/kernel/cpu/intel.c b/arch/x86/kernel/cpu/intel.c index 166d7c355896..463022aa9b7a 100644 --- a/arch/x86/kernel/cpu/intel.c +++ b/arch/x86/kernel/cpu/intel.c @@ -1074,10 +1074,14 @@ static void split_lock_init(void) split_lock_verify_msr(sld_state != sld_off); } -static void split_lock_warn(unsigned long ip) +static bool split_lock_warn(unsigned long ip, int fatal) { - pr_warn_ratelimited("#AC: %s/%d took a split_lock trap at address: 0x%lx\n", - current->comm, current->pid, ip); + pr_warn_ratelimited("#AC: %s/%d %ssplit_lock trap at address: 0x%lx\n", + current->comm, current->pid, + sld_state == sld_fatal ? "fatal " : "", ip); + + if (sld_state == sld_fatal || fatal) + return false; /* * Disable the split lock detection for this task so it can make @@ -1086,18 +1090,13 @@ static void split_lock_warn(unsigned long ip) */ sld_update_msr(false); set_tsk_thread_flag(current, TIF_SLD); + return true; } bool handle_guest_split_lock(unsigned long ip) { - if (sld_state == sld_warn) { - split_lock_warn(ip); + if (split_lock_warn(ip, 0)) return true; - } - - pr_warn_once("#AC: %s/%d %s split_lock trap at address: 0x%lx\n", - current->comm, current->pid, - sld_state == sld_fatal ? "fatal" : "bogus", ip); current->thread.error_code = 0; current->thread.trap_nr = X86_TRAP_AC; @@ -1108,10 +1107,7 @@ EXPORT_SYMBOL_GPL(handle_guest_split_lock); bool handle_user_split_lock(struct pt_regs *regs, long error_code) { - if ((regs->flags & X86_EFLAGS_AC) || sld_state == sld_fatal) - return false; - split_lock_warn(regs->ip); - return true; + return split_lock_warn(regs->ip, regs->flags & X86_EFLAGS_AC); } /* -- 2.21.3