Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp1363627pxb; Fri, 1 Oct 2021 09:05:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwkzNDGJy/2AGWugxAgb0NH2/w1tCh6bRXmVCQZ27wCvz3DQB+qANJ+Ij2fkfGeu6mktcSP X-Received: by 2002:a17:906:1d41:: with SMTP id o1mr7107583ejh.232.1633104357165; Fri, 01 Oct 2021 09:05:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633104357; cv=none; d=google.com; s=arc-20160816; b=iJntGLAjH+AkHAkr8m49ThndKNVGk/QkTcsVEO4iwl1h7/5YEs2aZkhQJAEvesiUx8 WhstwiXnq7v2KQcRQxZJ8JqZInbrYCBepLqjYV8wSJjeQFZyOhZdlCIu8eU58Kkub9v1 hLTy2jJF5CC+VAZgnb+bf9eFd+q6+7tCJAL/FHNOzpFqLZfZpdFhi6uSWXm9OOGqF/QO BzV+xLNWFE/V+uKDhkZJdh8bnxx+eRZepdGWB4cvJVI/dmt3zztrXfHrz3hN+lk+8Dh2 DYhNuUC0wpFmV4a6L95IK+lXrmvKS4kvm8uEUqPzHb5qZkYnd6bAjdscgW425Ca5hyXs z0DQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:date:references :in-reply-to:subject:cc:to:dkim-signature:dkim-signature:from; bh=b+a23XRD7uU4p22X7KfXj5YQzPH/GT531H4urCIWAV8=; b=H6tYDo0flbeXGZ28pJwrtG4uSe0XWEEVQ7xhEHRsO8lgqdCWjvxLY229dcSwRgTqu1 424NGFkNkrTqtZQ/i6LvSyIKgrl1FFs4fzPGZEMJtPhM3V/LQhA6HJ7A7zUC3Ae53Xsq iLQ7+ZcCrMWSAFR5DRS5XHjHyaynlQo+qCw+ryTM5nIei3TqNCnIa2CDDFJeTiqxc32m dZNe37dL3lkxuAHRWkM2hKuj5j/eAyZ3pZumL+4lSjJqnjQ8npkXefHIQVk1Apbh7NjV JxagcD7GVV55GQyPqTEyXDDW3JJ3CGSTkEbhZ6UfObTdkrwU5I/ULnk1HTgy8niaFbro BpyQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=AePmzBoA; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e header.b="u3LSiu/r"; 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=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 8si6860216eje.191.2021.10.01.09.05.31; Fri, 01 Oct 2021 09:05:57 -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=@linutronix.de header.s=2020 header.b=AePmzBoA; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e header.b="u3LSiu/r"; 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=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1354923AbhJAPMK (ORCPT + 99 others); Fri, 1 Oct 2021 11:12:10 -0400 Received: from Galois.linutronix.de ([193.142.43.55]:58142 "EHLO galois.linutronix.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1354784AbhJAPMJ (ORCPT ); Fri, 1 Oct 2021 11:12:09 -0400 From: Thomas Gleixner DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1633101024; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=b+a23XRD7uU4p22X7KfXj5YQzPH/GT531H4urCIWAV8=; b=AePmzBoAYC3d2ni2OpWApffymvGLK2oEVm1mT1xaVzLo1Gcf4QvnxA8rA+MhxIqOpQ/ik3 UY/DTJAby70M3qp6LThmN0fViE+IrdlI/lTUoZAhV+kH1pXKRPsy9oEIJAPwRwOcYHM9IL A3ORstNS/e11koReXZG8TLh67GkQvBv/ojLS9HWcUITM5biVKIZf553YBm0i7KxkL8vbDO 3Rywh0uoqABmNKukjhALtgraJEnHE53ixnZE1fc4f8DgOu5f8YL6H6zgUnTzxm3ib+BnM5 EYoGXaLSzTyOj7RH+70+Qo5W7QteTRW1nweA9DDi3kJgVFv3ImgNiOz5/p+BBQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1633101024; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=b+a23XRD7uU4p22X7KfXj5YQzPH/GT531H4urCIWAV8=; b=u3LSiu/rBuzrlGVbL7NXpPWKcOdN8Z3fWlOsvGePvR4t0+/xRPSMu6FXhlO6DR9FJLmtpy wJ3iyBFlv2YD4lBw== To: "Chang S. Bae" , bp@suse.de, luto@kernel.org, mingo@kernel.org, x86@kernel.org Cc: len.brown@intel.com, lenb@kernel.org, dave.hansen@intel.com, thiago.macieira@intel.com, jing2.liu@intel.com, ravi.v.shankar@intel.com, linux-kernel@vger.kernel.org, chang.seok.bae@intel.com Subject: Re: [PATCH v10 13/28] x86/fpu/xstate: Use feature disable (XFD) to protect dynamic user state In-Reply-To: <871r546b52.ffs@tglx> References: <20210825155413.19673-1-chang.seok.bae@intel.com> <20210825155413.19673-14-chang.seok.bae@intel.com> <871r546b52.ffs@tglx> Date: Fri, 01 Oct 2021 17:10:23 +0200 Message-ID: <87wnmw4w80.ffs@tglx> MIME-Version: 1.0 Content-Type: text/plain Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Oct 01 2021 at 17:02, Thomas Gleixner wrote: > On Wed, Aug 25 2021 at 08:53, Chang S. Bae wrote: >> DEFINE_IDTENTRY(exc_device_not_available) >> { >> unsigned long cr0 = read_cr0(); > >> + if (handle_xfd_event(¤t->thread.fpu, regs)) >> + return; > > As I said before, this is wrong because at that point interrupts are disabled. So you want something like this: static bool handle_xfd_event(struct pt_regs *regs) { u64 xfd_err, xfd_event, xfd, mask; struct fpu *fpu; if (!cpu_feature_enabled(X86_FEATURE_XFD)) return false; rdmsrl_safe(MSR_IA32_XFD_ERR, &xfd_err); if (!xfd_err) return false; wrmsrl_safe(MSR_IA32_XFD_ERR, 0); xfd_event = xfd_err & xfeatures_mask_user_dynamic; /* Die if a non-handled feature raised the exception */ if (WARN_ON(!xfd_event)) return true; /* Die if that happens in kernel space */ if (WARN_ON(!user_mode(regs))) return false; local_irq_enable(); /* Make sure that dynamic buffer expansion is permitted. */ if (dynamic_state_permitted(current, xfd_event) && !realloc_xstate_buffer(current, xfd_event)) { mask = xfeatures_mask_user_dynamic; fpu = ¤t->thread.fpu; xfd_write((fpu->state_mask & mask) ^ mask); } else { force_sig_fault(SIGILL, ILL_ILLOPC, error_get_trap_addr(regs)); } local_irq_disable(); return true; } Along with a correct implementation of realloc_xstate_buffer(). Thanks, tglx