[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] x86: harden use of calc_ler_msr()


  • To: Jan Beulich <jbeulich@xxxxxxxx>
  • From: Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Date: Mon, 30 May 2022 17:58:04 +0200
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=vGEJv2/xS2r///eJf+EYnL8iSxPU6Q329LiR+covoNw=; b=PuGowA85XHIzXoDe6rQIcUVhcI2V7c+9vS+/yE5jp5wYv+PJ2WeLXRrFl2DXUsiiSy8PymXHKVDyrPqPeJFqNFLCrbuzPepmWPKVG0TMeV6FdHMSlIN2tXhJgkiLHdEGTCrIEpTPW8iGp7P8YHT0VKRV+wurS0nRP/P/r6uO0VUiWQBTE3kYF3bDz5sEjIZm243CRcF6Int91k9erFUVUTnjS2zfm7qOgwoXfvGaj2TzrJa73DEyOLW9kR0dsUn0wDYA4XDfeQFnDWRcmvlkY9+i7ygRybe0OyEqmGEW/mjYokaa7C2DVAqn0XSqhOzv5+ccJ7dNBjhLjN4kAB4IXQ==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WmQySVZyGPEdRDTt3YZgsNh9FK8kFisYeyDfHhdy4lVr18ogkZ8ktfN9j0I8r23xArExpePnlDtJrJ1sVr6lyo+/RTEStFBTcB+7U1wmLsheTYSkCZhB/7J9dqnJHfj8AoSnluzPFRc/g7WEdeMYkY7x5y8w1VO/hgZdayWpfVe6QGEViIc0yYLv85Ig1bN547hL4GFRnhwoToEKPXfGnbmQjaliEvokRNd8PlDYOvBB0Z8u2Dp2Jaj917OATc8bIYIz4BzJ34cm1J2ByDaD1rZiZ+Aa6dNFotb3jVzmJ3mK3nqZoulpWCZym8tf1yKqMAWqffRYn9n8wJDptbbhPA==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>
  • Delivery-date: Mon, 30 May 2022 15:58:21 +0000
  • Ironport-data: A9a23:YI4ghK2RQ7DKOzreBPbD5adwkn2cJEfYwER7XKvMYLTBsI5bpzRRx mQWDDyObKreMWr9Kd8iaIqypxlS657VzIVqQQNtpC1hF35El5HIVI+TRqvS04J+DSFhoGZPt Zh2hgzodZhsJpPkjk7xdOCn9xGQ7InQLlbGILes1htZGEk1EU/NtTo5w7Rj2tMz2YDja++wk YiaT/P3aQfNNwFcagr424rbwP+4lK2v0N+wlgVWicFj5DcypVFMZH4sDfjZw0/DaptVBoaHq 9Prl9lVyI97EyAFUbtJmp6jGqEDryW70QKm0hK6UID66vROS7BbPg/W+5PwZG8O4whlkeydx /1fj8eNGCIgLpSS2+lNfSRyOiNiNqBJreqvzXiX6aR/zmXgWl61mrBEKhFzOocVvOFqHWtJ6 PoUbigXaQyOjP63x7T9TfRwgsMkL4/gO4Z3VnNIlGmFS6p5B82TBfyVvLe03x9p7ixKNezZa McDLyJmcTzLYgFVO0dRA5U79AutrialL2AG+AnNzUYxy2LuwhF02ai3CcjuY/+VG/oFmliEt luTqgwVBTlfbrRz0wGt8Hihm+vOliPTQ58JGfuz8fsCqE2ewCkfBQMbUXO/oOKlkQiuVtRHM UsW9yEy668o+ySDUd3VTxC+5nmesXYht8F4FuQ77ESHzPrS6gPAX2wcFGceMZohqdM8QiEs2 hmRhdT1CDdzsbqTD3WA6rOTqjD0Mi8QRYMfWRI5ocI+y4GLiOkOYtjnF76PzIbdYgXJJAzN
  • Ironport-hdrordr: A9a23:AX1vFaimQuZnO1evhwOKBXmOg3BQX0h13DAbv31ZSRFFG/FwyP rCoB1L73XJYWgqM03I+eruBEBPewK4yXdQ2/hoAV7EZnichILIFvAa0WKG+VHd8kLFltK1uZ 0QEJSWTeeAd2SS7vyKnzVQcexQp+VvmZrA7Ym+854ud3ANV0gJ1XYENu/xKDwTeOApP+taKH LKjfA32gZINE5nJ/iTNz0gZazuttfLnJXpbVovAAMm0hCHiXeN5KThGxaV8x8CW3cXqI1Sul Ttokjc3OGOovu7whjT2yv66IlXosLozp9mCNaXgsYYBz3wgkKDZZhnWZeFoDcpydvfoGoCoZ 3pmVMNLs5z43TeciWcpgbs4RDp1HIU53rr2Taj8A/eiP28YAh/J9tKhIpffBecwVEnpstA3K VC2H/cn4ZLDDvb9R6NqOTgZlVPrA6ZsHAimekcgzh0So0FcoJcqoQZ4Qd8DIoAJiTn84oqed MeQP003MwmMG9yUkqp/lWGmLeXLzcO91a9MwU/U/WuonZrdCsT9Tpb+CQd9k1wga7VBaM0ot gsCZ4Y5Y2mfvVmE56VO91xMfdfKla9Ni4kY1jiV2gOKsk8SgHwgq+yxokJz8eXX7FN5KcOuf 36ISFlXCgJCgjTNfE=
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On Mon, May 30, 2022 at 05:48:51PM +0200, Jan Beulich wrote:
> Avoid calling the function more than once, thus making sure we won't,
> under any unusual circumstances, attempt to enable XEN_LER late (which
> can't work, for setup_force_cpu_cap() being __init. In turn this then
> allows making the function itself __init, too.
> 
> While fiddling with section attributes in this area, also move the two
> involved variables to .data.ro_after_init.
> 
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
> 
> --- a/xen/arch/x86/traps.c
> +++ b/xen/arch/x86/traps.c
> @@ -126,11 +126,11 @@ DEFINE_PER_CPU_PAGE_ALIGNED(struct tss_p
>  static int debug_stack_lines = 20;
>  integer_param("debug_stack_lines", debug_stack_lines);
>  
> -static bool opt_ler;
> +static bool __ro_after_init opt_ler;
>  boolean_param("ler", opt_ler);
>  
>  /* LastExceptionFromIP on this hardware.  Zero if LER is not in use. */
> -unsigned int __read_mostly ler_msr;
> +unsigned int __ro_after_init ler_msr;
>  
>  const unsigned int nmi_cpu;
>  
> @@ -2133,7 +2133,7 @@ static void __init set_intr_gate(unsigne
>      __set_intr_gate(n, 0, addr);
>  }
>  
> -static unsigned int calc_ler_msr(void)
> +static unsigned int noinline __init calc_ler_msr(void)
>  {
>      switch ( boot_cpu_data.x86_vendor )
>      {
> @@ -2171,8 +2171,17 @@ void percpu_traps_init(void)
>      if ( !opt_ler )
>          return;
>  
> -    if ( !ler_msr && (ler_msr = calc_ler_msr()) )
> +    if ( !ler_msr )
> +    {
> +        ler_msr = calc_ler_msr();
> +        if ( !ler_msr )
> +        {

While doing this rework it might make sense to print some message
here, like: "LER option requested but no LBR support available" or
similar IMO.

The rest LGTM:

Reviewed-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>

Thanks, Roger.



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.