From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751796AbdITPyi (ORCPT ); Wed, 20 Sep 2017 11:54:38 -0400 Received: from mga05.intel.com ([192.55.52.43]:42842 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751554AbdITPyf (ORCPT ); Wed, 20 Sep 2017 11:54:35 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.42,421,1500966000"; d="scan'208";a="1174184624" Subject: Re: [PATCH v2 2/3] x86/fpu: tighten validation of user-supplied xstate_header To: Eric Biggers , x86@kernel.org References: <20170920004434.35308-1-ebiggers3@gmail.com> <20170920004434.35308-3-ebiggers3@gmail.com> Cc: linux-kernel@vger.kernel.org, kernel-hardening@lists.openwall.com, Andy Lutomirski , Dmitry Vyukov , Fenghua Yu , Ingo Molnar , Kevin Hao , Oleg Nesterov , Wanpeng Li , Yu-cheng Yu , Michael Halcrow , Eric Biggers From: Dave Hansen Message-ID: Date: Wed, 20 Sep 2017 08:54:33 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: <20170920004434.35308-3-ebiggers3@gmail.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 09/19/2017 05:44 PM, Eric Biggers wrote: > +static inline int validate_xstate_header(const struct xstate_header *hdr) > +{ > + /* No unknown or supervisor features may be set */ > + if (hdr->xfeatures & (~xfeatures_mask | XFEATURE_MASK_SUPERVISOR)) > + return -EINVAL; > + > + /* Userspace must use the uncompacted format */ > + if (hdr->xcomp_bv) > + return -EINVAL; > + > + /* No reserved bits may be set */ > + if (memchr_inv(hdr->reserved, 0, sizeof(hdr->reserved))) > + return -EINVAL; > + > + return 0; > +} BTW, the whole series looks pretty sane to me. Tou're definitely leaving the code better than you found it. Feel free to add my acked-by on all 3 patches. One nit about this validate function, though. Let's say we go and change 'struct xstate_header' and shrink ->reserved because we add a new field. This validator will silently break. Could we add a BUILD_BUG_ON(sizeof(hdr->reserved) != 48); That way, the next hapless kernel developer can't miss updating this.