From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 99043C433EF for ; Mon, 25 Apr 2022 20:38:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S245603AbiDYUlt (ORCPT ); Mon, 25 Apr 2022 16:41:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56178 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235198AbiDYUlq (ORCPT ); Mon, 25 Apr 2022 16:41:46 -0400 Received: from mail-lj1-x22d.google.com (mail-lj1-x22d.google.com [IPv6:2a00:1450:4864:20::22d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9E5A03B003 for ; Mon, 25 Apr 2022 13:38:40 -0700 (PDT) Received: by mail-lj1-x22d.google.com with SMTP id bn33so19334802ljb.6 for ; Mon, 25 Apr 2022 13:38:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=ILv9teSoP4aYBf6xbxudr1p2VEvSoGOnfNFBeXl3R7I=; b=fZeZl2Kwvt4eb47jsj7b9dqLTKA5hsNa/sySJVGqjq6U3w2+LmTwQJExnt/XNPaCZK 4xysJPg2ngKepEL7PL914QEcvlGSWtShIldwOovqXozQjHzx8fouMu2ylG6ORxnHj9wH Pp5U/iHR6OWJpWrZtjkTJ671qf26P4CpLLXOCmzWkfHBLgFlwtahcBV087RzVueuebp/ XaDp+7AKM37d+QmgErhZ5iqAbuc1mJvGczx8MmTUDGRw3YgmijNmH3nHKzm6X3xKk4Do eClxdCIBZCG/CFC4tQdaRY5lY7lsSqNNIYvC3LGUx71pypdfugyTgWOUKqQIh/NxrmYg efBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=ILv9teSoP4aYBf6xbxudr1p2VEvSoGOnfNFBeXl3R7I=; b=iPPe3RFm9Stso8epJ2VZjGuQH8v99MzzCbnopCTbXTsogA8ir502526hlzBuF9EEJq +PyrdX6vf1C0B0yCpB2VYyQkgRSAhbogt1T0DZ3zv2C6SiLWnqcx/Ef8kfYnlC0Nw1Su oTYdgMvhoGEt+JPZLmr9sZdZIbsBhODXbEJCoPCPJEbBNEbDO0t4tNXNJ2tvuSwTm7jw U6U706lifUvKA/rNPcYR/bZoN1Jouv+K17wYYXAHxU2PzJEMK2wny4NUpTgCuevCPHRy /Iv1/QlULNHaKiH2mcNMrHfh2XfdEIxhBzg8uS1RlESyEFqD439GUjre6ojxvg/OLEgq i4lw== X-Gm-Message-State: AOAM532bWg7+mO+ASPSVlmEe6yNOUo4PezqKuwn+jWnNCBxb78YqZjfa paceFvAa4aPE2YECo4jXz1A= X-Google-Smtp-Source: ABdhPJxqOK8Wi+cHV2hwafjT2TF0m9x1sQnllf3glnSRUlek2UP+fsukD/q4rxgK8QtsK9A4ogCzNg== X-Received: by 2002:a2e:a793:0:b0:24e:e3bd:b3a8 with SMTP id c19-20020a2ea793000000b0024ee3bdb3a8mr12004192ljf.457.1650919118643; Mon, 25 Apr 2022 13:38:38 -0700 (PDT) Received: from [192.168.1.7] ([212.22.223.21]) by smtp.gmail.com with ESMTPSA id k10-20020a192d0a000000b0047210d2a984sm151624lfj.194.2022.04.25.13.38.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 25 Apr 2022 13:38:38 -0700 (PDT) Subject: Re: [PATCH V1 3/6] xen/virtio: Add option to restrict memory access under Xen To: Juergen Gross , Christoph Hellwig , Boris Ostrovsky , Stefano Stabellini Cc: xen-devel@lists.xenproject.org, x86@kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , Julien Grall , Oleksandr Tyshchenko , "Michael S. Tsirkin" , Tom Lendacky References: <1650646263-22047-1-git-send-email-olekstysh@gmail.com> <1650646263-22047-4-git-send-email-olekstysh@gmail.com> <6c5042fe-dafc-eb4f-c1fa-03b0faf252de@gmail.com> <147f68f6-7d67-1884-bd14-5040639b3396@suse.com> From: Oleksandr Message-ID: <67c7460a-3001-35a6-8e5b-f367270b257a@gmail.com> Date: Mon, 25 Apr 2022 23:38:36 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <147f68f6-7d67-1884-bd14-5040639b3396@suse.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello all. On 25.04.22 12:14, Juergen Gross wrote: > On 25.04.22 09:58, Christoph Hellwig wrote: >> On Mon, Apr 25, 2022 at 09:47:49AM +0200, Juergen Gross wrote: >>>> Would the Xen specific bits fit into Confidential Computing Platform >>>> checks? I will let Juergen/Boris comment on this. >>> >>> I don't think cc_platform_has would be correct here. Xen certainly >>> provides more isolation between guests and dom0, but "Confidential >>> Computing" is basically orthogonal to that feature. >> >> The point of cc_platform_has is to remove all these open code checks. >> If a Xen hypervisor / dom0 can't access arbitrary guest memory for >> virtual I/O and we need special APIs for that it certainly false >> into the scope of cc_platform_has, even if the confientiality is >> rather limited. > > In case the x86 maintainers are fine with that I won't oppose. > > > Juergen [I have discussed with Juergen on IRC about it.] Well, if cc_platform_has() is a way to go (at least on x86), below some thoughts about possible integration (if, of course, I got the idea and code correctly). 1. We will need to introduce new attribute CC_ATTR_GUEST_MEM_ACCESS_RESTRICTED as we can't reuse CC_ATTR_GUEST_MEM_ENCRYPT (in case of Xen the Guest memory is not encrypted). New attribute is automatically set if Guest memory encryption is active (CC_ATTR_GUEST_MEM_ENCRYPT is set). Also new attribute is set if restricted memory access using Xen grant mappings is active. This will allow us to have a single check in arch_has_restricted_virtio_memory_access() which covers both cases: Xen and SEV int arch_has_restricted_virtio_memory_access(void) {     return cc_platform_has(CC_ATTR_GUEST_MEM_ACCESS_RESTRICTED); } 2. We will need to introduce new vendor CC_VENDOR_XXX for our case (I have chosen XEN, although I am not sure it is a good fit) which deals with new attribute only. 3. Xen code then will call cc_set_vendor(CC_VENDOR_XEN) for different modes (PV, HVM, etc) during initialization if restricted memory access using Xen grant mappings is enabled. Below the diff (not tested and without x86's PVH) how it could look like: diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c index ec5b082..0284aa7 100644 --- a/arch/arm/xen/enlighten.c +++ b/arch/arm/xen/enlighten.c @@ -409,6 +409,14 @@ int __init arch_xen_unpopulated_init(struct resource **res)  }  #endif +#ifdef CONFIG_ARCH_HAS_RESTRICTED_VIRTIO_MEMORY_ACCESS +int arch_has_restricted_virtio_memory_access(void) +{ +       return IS_ENABLED(CONFIG_XEN_VIRTIO) && xen_domain(); +} +EXPORT_SYMBOL_GPL(arch_has_restricted_virtio_memory_access); +#endif +  static void __init xen_dt_guest_init(void)  {         struct device_node *xen_node; diff --git a/arch/x86/coco/core.c b/arch/x86/coco/core.c index fc1365d..9020a60 100644 --- a/arch/x86/coco/core.c +++ b/arch/x86/coco/core.c @@ -44,6 +44,7 @@ static bool amd_cc_platform_has(enum cc_attr attr)                 return sme_me_mask && !(sev_status & MSR_AMD64_SEV_ENABLED);         case CC_ATTR_GUEST_MEM_ENCRYPT: +       case CC_ATTR_GUEST_MEM_ACCESS_RESTRICTED:                 return sev_status & MSR_AMD64_SEV_ENABLED;         case CC_ATTR_GUEST_STATE_ENCRYPT: @@ -67,7 +68,19 @@ static bool amd_cc_platform_has(enum cc_attr attr)  static bool hyperv_cc_platform_has(enum cc_attr attr)  { -       return attr == CC_ATTR_GUEST_MEM_ENCRYPT; +       switch (attr) { +       case CC_ATTR_GUEST_MEM_ENCRYPT: +       case CC_ATTR_GUEST_MEM_ACCESS_RESTRICTED: +               return true; + +       default: +               return false; +       } +} + +static bool xen_cc_platform_has(enum cc_attr attr) +{ +       return attr == CC_ATTR_GUEST_MEM_ACCESS_RESTRICTED;  }  bool cc_platform_has(enum cc_attr attr) @@ -79,6 +92,8 @@ bool cc_platform_has(enum cc_attr attr)                 return intel_cc_platform_has(attr);         case CC_VENDOR_HYPERV:                 return hyperv_cc_platform_has(attr); +       case CC_VENDOR_XEN: +               return xen_cc_platform_has(attr);         default:                 return false;         } @@ -115,3 +130,11 @@ __init void cc_set_mask(u64 mask)  {         cc_mask = mask;  } + +#ifdef CONFIG_ARCH_HAS_RESTRICTED_VIRTIO_MEMORY_ACCESS +int arch_has_restricted_virtio_memory_access(void) +{ +       return cc_platform_has(CC_ATTR_GUEST_MEM_ACCESS_RESTRICTED); +} +EXPORT_SYMBOL_GPL(arch_has_restricted_virtio_memory_access); +#endif diff --git a/arch/x86/include/asm/coco.h b/arch/x86/include/asm/coco.h index 3d98c3a..6395ec1 100644 --- a/arch/x86/include/asm/coco.h +++ b/arch/x86/include/asm/coco.h @@ -9,6 +9,7 @@ enum cc_vendor {         CC_VENDOR_AMD,         CC_VENDOR_HYPERV,         CC_VENDOR_INTEL, +       CC_VENDOR_XEN,  };  void cc_set_vendor(enum cc_vendor v); diff --git a/arch/x86/mm/mem_encrypt.c b/arch/x86/mm/mem_encrypt.c index 50d2099..dda020f 100644 --- a/arch/x86/mm/mem_encrypt.c +++ b/arch/x86/mm/mem_encrypt.c @@ -77,8 +77,3 @@ void __init mem_encrypt_init(void)         print_mem_encrypt_feature_info();  } -int arch_has_restricted_virtio_memory_access(void) -{ -       return cc_platform_has(CC_ATTR_GUEST_MEM_ENCRYPT); -} -EXPORT_SYMBOL_GPL(arch_has_restricted_virtio_memory_access); diff --git a/arch/x86/xen/Kconfig b/arch/x86/xen/Kconfig index 85246dd..79cb30f 100644 --- a/arch/x86/xen/Kconfig +++ b/arch/x86/xen/Kconfig @@ -8,6 +8,7 @@ config XEN         depends on PARAVIRT         select PARAVIRT_CLOCK         select X86_HV_CALLBACK_VECTOR +       select ARCH_HAS_CC_PLATFORM         depends on X86_64 || (X86_32 && X86_PAE)         depends on X86_LOCAL_APIC && X86_TSC         help diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c index 517a9d8..11c3f4e 100644 --- a/arch/x86/xen/enlighten_hvm.c +++ b/arch/x86/xen/enlighten_hvm.c @@ -195,6 +195,9 @@ static void __init xen_hvm_guest_init(void)         if (xen_pv_domain())                 return; +       if (IS_ENABLED(CONFIG_XEN_VIRTIO)) +               cc_set_vendor(CC_VENDOR_XEN); +         init_hvm_pv_info();         reserve_shared_info(); diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c index 5038edb..2fe5aaa 100644 --- a/arch/x86/xen/enlighten_pv.c +++ b/arch/x86/xen/enlighten_pv.c @@ -109,6 +109,9 @@ static DEFINE_PER_CPU(struct tls_descs, shadow_tls_desc);  static void __init xen_pv_init_platform(void)  { +       if (IS_ENABLED(CONFIG_XEN_VIRTIO)) +               cc_set_vendor(CC_VENDOR_XEN); +         populate_extra_pte(fix_to_virt(FIX_PARAVIRT_BOOTMAP));         set_fixmap(FIX_PARAVIRT_BOOTMAP, xen_start_info->shared_info); diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig index 313a9127..d3179f8 100644 --- a/drivers/xen/Kconfig +++ b/drivers/xen/Kconfig @@ -339,4 +339,16 @@ config XEN_GRANT_DMA_OPS         bool         select DMA_OPS +config XEN_VIRTIO +       bool "Xen virtio support" +       depends on VIRTIO +       select ARCH_HAS_RESTRICTED_VIRTIO_MEMORY_ACCESS +       select XEN_GRANT_DMA_OPS +       help +         Enable virtio support for running as Xen guest. Depending on the +         guest type this will require special support on the backend side +         (qemu or kernel, depending on the virtio device types used). + +         If in doubt, say n. +  endmenu diff --git a/include/linux/cc_platform.h b/include/linux/cc_platform.h index efd8205..d06bc7a 100644 --- a/include/linux/cc_platform.h +++ b/include/linux/cc_platform.h @@ -72,6 +72,19 @@ enum cc_attr {          * Examples include TDX guest & SEV.          */         CC_ATTR_GUEST_UNROLL_STRING_IO, + +       /** +        * @CC_ATTR_GUEST_MEM_ACCESS_RESTRICTED: Restricted memory access to +        *                                       Guest memory is active +        * +        * The platform/OS is running as a guest/virtual machine and uses +        * the restricted access to its memory. This attribute is set if either +        * Guest memory encryption or restricted memory access using Xen grant +        * mappings is active. +        * +        * Examples include Xen guest and SEV. +        */ +       CC_ATTR_GUEST_MEM_ACCESS_RESTRICTED,  };  #ifdef CONFIG_ARCH_HAS_CC_PLATFORM (END) On Arm I left simple variant simply because of no users of cc_platform. int arch_has_restricted_virtio_memory_access(void) {        return IS_ENABLED(CONFIG_XEN_VIRTIO) && xen_domain(); } But, we could have something simple here: bool cc_platform_has(enum cc_attr attr) {     switch (attr) {     case CC_ATTR_GUEST_MEM_ACCESS_RESTRICTED:         return IS_ENABLED(CONFIG_XEN_VIRTIO) && xen_domain();     default:         return false;     } } int arch_has_restricted_virtio_memory_access(void) {     return cc_platform_has(CC_ATTR_GUEST_MEM_ACCESS_RESTRICTED); } Any thoughts? -- Regards, Oleksandr Tyshchenko From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id B051FC433F5 for ; Mon, 25 Apr 2022 20:53:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:Cc:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=ehOJDpUWU9v3h72vLZkiWzGm9L5e7J32R4clcQsnnAM=; b=TgPL9rRVHeNb9/UqGNmy7NH1V0 clU6hVV/PNG69rM8IcnCASdQ0vr4m01mcB0IJ7Uk77iAXVBTOxtt9FmKDwswHs6M4HszMsWu2LNle XViCS67xG54LR3YujQl2XEdXFWmT1BGm7bhY0Tze2QAaQDLekjVvElgHS/me5wqlG96imlPc/8Ozq mJqTFMqQlHL7K8zRKQIcbSNFKn4ct50a7UTj12XCqRw56gbkDGug6ZzEXJJFwrsGgdHPqgWAKiBHH uBjzH0c/JFHNeetKBFNJI+iGGxM0m6driKeGpRCSF9RiqA/15d5OFAyBGrlGlPv6kiF1L5rJ5uLfs KGLe0V6A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nj5gt-00BOZD-Kg; Mon, 25 Apr 2022 20:52:16 +0000 Received: from mail-lj1-x233.google.com ([2a00:1450:4864:20::233]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nj5To-00BImp-9C for linux-arm-kernel@lists.infradead.org; Mon, 25 Apr 2022 20:38:46 +0000 Received: by mail-lj1-x233.google.com with SMTP id 4so5804209ljw.11 for ; Mon, 25 Apr 2022 13:38:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-transfer-encoding:content-language; bh=ILv9teSoP4aYBf6xbxudr1p2VEvSoGOnfNFBeXl3R7I=; b=fZeZl2Kwvt4eb47jsj7b9dqLTKA5hsNa/sySJVGqjq6U3w2+LmTwQJExnt/XNPaCZK 4xysJPg2ngKepEL7PL914QEcvlGSWtShIldwOovqXozQjHzx8fouMu2ylG6ORxnHj9wH Pp5U/iHR6OWJpWrZtjkTJ671qf26P4CpLLXOCmzWkfHBLgFlwtahcBV087RzVueuebp/ XaDp+7AKM37d+QmgErhZ5iqAbuc1mJvGczx8MmTUDGRw3YgmijNmH3nHKzm6X3xKk4Do eClxdCIBZCG/CFC4tQdaRY5lY7lsSqNNIYvC3LGUx71pypdfugyTgWOUKqQIh/NxrmYg efBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=ILv9teSoP4aYBf6xbxudr1p2VEvSoGOnfNFBeXl3R7I=; b=Ogj5jQQgMDfdLvTT2UmcjILdk/7JPFqrSXDVp/ePHe5yEkOk9N4CjS2R1A3mTsq2IO vgfOJ+8WqxSHRJMEpEhyo4cDm5pWLI3boqKgaCRPEF/wKGB4+rHfyrcSvBOmTkTpn5k4 y6gOr5DP6kQAz7WFKCd+odDmq5jApMwY6kH4kkbeX48nJtAJFO/x7LDzr3b1LQoiq1Gd yIefX9u+DKJHXvjJW39EC0HOb50kd/avfOkaF3HLm49jtZro4Ughg3Kq+ge0fVhnVEd2 LebnEv754JXPxw6qKgW7oIgC1payzhOs9kefkV9LujsBOrtYlsDAfriwLXz02uHiTquM pMIw== X-Gm-Message-State: AOAM5306x/jTsx0U/S+kIDlfGJFmExse7MwSsgY1Za/OB1JZiNyebyfg EIItyY1OuPSWTyVyVuAw+A4= X-Google-Smtp-Source: ABdhPJxqOK8Wi+cHV2hwafjT2TF0m9x1sQnllf3glnSRUlek2UP+fsukD/q4rxgK8QtsK9A4ogCzNg== X-Received: by 2002:a2e:a793:0:b0:24e:e3bd:b3a8 with SMTP id c19-20020a2ea793000000b0024ee3bdb3a8mr12004192ljf.457.1650919118643; Mon, 25 Apr 2022 13:38:38 -0700 (PDT) Received: from [192.168.1.7] ([212.22.223.21]) by smtp.gmail.com with ESMTPSA id k10-20020a192d0a000000b0047210d2a984sm151624lfj.194.2022.04.25.13.38.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 25 Apr 2022 13:38:38 -0700 (PDT) Subject: Re: [PATCH V1 3/6] xen/virtio: Add option to restrict memory access under Xen To: Juergen Gross , Christoph Hellwig , Boris Ostrovsky , Stefano Stabellini Cc: xen-devel@lists.xenproject.org, x86@kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Dave Hansen , Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , Julien Grall , Oleksandr Tyshchenko , "Michael S. Tsirkin" , Tom Lendacky References: <1650646263-22047-1-git-send-email-olekstysh@gmail.com> <1650646263-22047-4-git-send-email-olekstysh@gmail.com> <6c5042fe-dafc-eb4f-c1fa-03b0faf252de@gmail.com> <147f68f6-7d67-1884-bd14-5040639b3396@suse.com> From: Oleksandr Message-ID: <67c7460a-3001-35a6-8e5b-f367270b257a@gmail.com> Date: Mon, 25 Apr 2022 23:38:36 +0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <147f68f6-7d67-1884-bd14-5040639b3396@suse.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220425_133844_366896_7C27C1DF X-CRM114-Status: GOOD ( 31.15 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CkhlbGxvIGFsbC4KCgpPbiAyNS4wNC4yMiAxMjoxNCwgSnVlcmdlbiBHcm9zcyB3cm90ZToKPiBP biAyNS4wNC4yMiAwOTo1OCwgQ2hyaXN0b3BoIEhlbGx3aWcgd3JvdGU6Cj4+IE9uIE1vbiwgQXBy IDI1LCAyMDIyIGF0IDA5OjQ3OjQ5QU0gKzAyMDAsIEp1ZXJnZW4gR3Jvc3Mgd3JvdGU6Cj4+Pj4g V291bGQgdGhlIFhlbiBzcGVjaWZpYyBiaXRzIGZpdCBpbnRvIENvbmZpZGVudGlhbCBDb21wdXRp bmcgUGxhdGZvcm0KPj4+PiBjaGVja3M/IEkgd2lsbCBsZXQgSnVlcmdlbi9Cb3JpcyBjb21tZW50 IG9uIHRoaXMuCj4+Pgo+Pj4gSSBkb24ndCB0aGluayBjY19wbGF0Zm9ybV9oYXMgd291bGQgYmUg Y29ycmVjdCBoZXJlLiBYZW4gY2VydGFpbmx5Cj4+PiBwcm92aWRlcyBtb3JlIGlzb2xhdGlvbiBi ZXR3ZWVuIGd1ZXN0cyBhbmQgZG9tMCwgYnV0ICJDb25maWRlbnRpYWwKPj4+IENvbXB1dGluZyIg aXMgYmFzaWNhbGx5IG9ydGhvZ29uYWwgdG8gdGhhdCBmZWF0dXJlLgo+Pgo+PiBUaGUgcG9pbnQg b2YgY2NfcGxhdGZvcm1faGFzIGlzIHRvIHJlbW92ZSBhbGwgdGhlc2Ugb3BlbiBjb2RlIGNoZWNr cy4KPj4gSWYgYSBYZW4gaHlwZXJ2aXNvciAvIGRvbTAgY2FuJ3QgYWNjZXNzIGFyYml0cmFyeSBn dWVzdCBtZW1vcnkgZm9yCj4+IHZpcnR1YWwgSS9PIGFuZCB3ZSBuZWVkIHNwZWNpYWwgQVBJcyBm b3IgdGhhdCBpdCBjZXJ0YWlubHkgZmFsc2UKPj4gaW50byB0aGUgc2NvcGUgb2YgY2NfcGxhdGZv cm1faGFzLCBldmVuIGlmIHRoZSBjb25maWVudGlhbGl0eSBpcwo+PiByYXRoZXIgbGltaXRlZC4K Pgo+IEluIGNhc2UgdGhlIHg4NiBtYWludGFpbmVycyBhcmUgZmluZSB3aXRoIHRoYXQgSSB3b24n dCBvcHBvc2UuCj4KPgo+IEp1ZXJnZW4KCgpbSSBoYXZlIGRpc2N1c3NlZCB3aXRoIEp1ZXJnZW4g b24gSVJDIGFib3V0IGl0Ll0KCgpXZWxsLCBpZiBjY19wbGF0Zm9ybV9oYXMoKSBpcyBhIHdheSB0 byBnbyAoYXQgbGVhc3Qgb24geDg2KSwgYmVsb3cgc29tZSAKdGhvdWdodHMgYWJvdXQgcG9zc2li bGUgaW50ZWdyYXRpb24gKGlmLCBvZiBjb3Vyc2UsIEkgZ290IHRoZSBpZGVhIGFuZCAKY29kZSBj b3JyZWN0bHkpLgoKMS4gV2Ugd2lsbCBuZWVkIHRvIGludHJvZHVjZSBuZXcgYXR0cmlidXRlIApD Q19BVFRSX0dVRVNUX01FTV9BQ0NFU1NfUkVTVFJJQ1RFRAphcyB3ZSBjYW4ndCByZXVzZSBDQ19B VFRSX0dVRVNUX01FTV9FTkNSWVBUIChpbiBjYXNlIG9mIFhlbiB0aGUgR3Vlc3QgCm1lbW9yeSBp cyBub3QgZW5jcnlwdGVkKS4gTmV3IGF0dHJpYnV0ZSBpcyBhdXRvbWF0aWNhbGx5IHNldCBpZiBH dWVzdCAKbWVtb3J5IGVuY3J5cHRpb24gaXMgYWN0aXZlIChDQ19BVFRSX0dVRVNUX01FTV9FTkNS WVBUIGlzIHNldCkuIEFsc28gbmV3IAphdHRyaWJ1dGUgaXMgc2V0IGlmIHJlc3RyaWN0ZWQgbWVt b3J5IGFjY2VzcyB1c2luZyBYZW4gZ3JhbnQgbWFwcGluZ3MgaXMgCmFjdGl2ZS4gVGhpcyB3aWxs IGFsbG93IHVzIHRvIGhhdmUgYSBzaW5nbGUgY2hlY2sgaW4KYXJjaF9oYXNfcmVzdHJpY3RlZF92 aXJ0aW9fbWVtb3J5X2FjY2VzcygpIHdoaWNoIGNvdmVycyBib3RoIGNhc2VzOiBYZW4gCmFuZCBT RVYKCmludCBhcmNoX2hhc19yZXN0cmljdGVkX3ZpcnRpb19tZW1vcnlfYWNjZXNzKHZvaWQpCnsK IMKgwqDCoCByZXR1cm4gY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfTUVNX0FDQ0VTU19S RVNUUklDVEVEKTsKfQoKMi4gV2Ugd2lsbCBuZWVkIHRvIGludHJvZHVjZSBuZXcgdmVuZG9yIEND X1ZFTkRPUl9YWFggZm9yIG91ciBjYXNlIChJIApoYXZlIGNob3NlbiBYRU4sIGFsdGhvdWdoIEkg YW0gbm90IHN1cmUgaXQgaXMgYSBnb29kIGZpdCkgd2hpY2ggZGVhbHMgCndpdGggbmV3IGF0dHJp YnV0ZSBvbmx5LgozLiBYZW4gY29kZSB0aGVuIHdpbGwgY2FsbCBjY19zZXRfdmVuZG9yKENDX1ZF TkRPUl9YRU4pIGZvciBkaWZmZXJlbnQgCm1vZGVzIChQViwgSFZNLCBldGMpIGR1cmluZyBpbml0 aWFsaXphdGlvbiBpZiByZXN0cmljdGVkIG1lbW9yeSBhY2Nlc3MgCnVzaW5nIFhlbiBncmFudCBt YXBwaW5ncyBpcyBlbmFibGVkLgoKQmVsb3cgdGhlIGRpZmYgKG5vdCB0ZXN0ZWQgYW5kIHdpdGhv dXQgeDg2J3MgUFZIKSBob3cgaXQgY291bGQgbG9vayBsaWtlOgoKCmRpZmYgLS1naXQgYS9hcmNo L2FybS94ZW4vZW5saWdodGVuLmMgYi9hcmNoL2FybS94ZW4vZW5saWdodGVuLmMKaW5kZXggZWM1 YjA4Mi4uMDI4NGFhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0veGVuL2VubGlnaHRlbi5jCisrKyBi L2FyY2gvYXJtL3hlbi9lbmxpZ2h0ZW4uYwpAQCAtNDA5LDYgKzQwOSwxNCBAQCBpbnQgX19pbml0 IGFyY2hfeGVuX3VucG9wdWxhdGVkX2luaXQoc3RydWN0IApyZXNvdXJjZSAqKnJlcykKIMKgfQog wqAjZW5kaWYKCisjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX1JFU1RSSUNURURfVklSVElPX01FTU9S WV9BQ0NFU1MKK2ludCBhcmNoX2hhc19yZXN0cmljdGVkX3ZpcnRpb19tZW1vcnlfYWNjZXNzKHZv aWQpCit7CivCoMKgwqDCoMKgwqAgcmV0dXJuIElTX0VOQUJMRUQoQ09ORklHX1hFTl9WSVJUSU8p ICYmIHhlbl9kb21haW4oKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFyY2hfaGFzX3Jlc3RyaWN0 ZWRfdmlydGlvX21lbW9yeV9hY2Nlc3MpOworI2VuZGlmCisKIMKgc3RhdGljIHZvaWQgX19pbml0 IHhlbl9kdF9ndWVzdF9pbml0KHZvaWQpCiDCoHsKIMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZp Y2Vfbm9kZSAqeGVuX25vZGU7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jb2NvL2NvcmUuYyBiL2Fy Y2gveDg2L2NvY28vY29yZS5jCmluZGV4IGZjMTM2NWQuLjkwMjBhNjAgMTAwNjQ0Ci0tLSBhL2Fy Y2gveDg2L2NvY28vY29yZS5jCisrKyBiL2FyY2gveDg2L2NvY28vY29yZS5jCkBAIC00NCw2ICs0 NCw3IEBAIHN0YXRpYyBib29sIGFtZF9jY19wbGF0Zm9ybV9oYXMoZW51bSBjY19hdHRyIGF0dHIp CiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHNtZV9tZV9tYXNrICYmICEo c2V2X3N0YXR1cyAmIApNU1JfQU1ENjRfU0VWX0VOQUJMRUQpOwoKIMKgwqDCoMKgwqDCoMKgIGNh c2UgQ0NfQVRUUl9HVUVTVF9NRU1fRU5DUllQVDoKK8KgwqDCoMKgwqDCoCBjYXNlIENDX0FUVFJf R1VFU1RfTUVNX0FDQ0VTU19SRVNUUklDVEVEOgogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiBzZXZfc3RhdHVzICYgTVNSX0FNRDY0X1NFVl9FTkFCTEVEOwoKIMKgwqDCoMKg wqDCoMKgIGNhc2UgQ0NfQVRUUl9HVUVTVF9TVEFURV9FTkNSWVBUOgpAQCAtNjcsNyArNjgsMTkg QEAgc3RhdGljIGJvb2wgYW1kX2NjX3BsYXRmb3JtX2hhcyhlbnVtIGNjX2F0dHIgYXR0cikKCiDC oHN0YXRpYyBib29sIGh5cGVydl9jY19wbGF0Zm9ybV9oYXMoZW51bSBjY19hdHRyIGF0dHIpCiDC oHsKLcKgwqDCoMKgwqDCoCByZXR1cm4gYXR0ciA9PSBDQ19BVFRSX0dVRVNUX01FTV9FTkNSWVBU OworwqDCoMKgwqDCoMKgIHN3aXRjaCAoYXR0cikgeworwqDCoMKgwqDCoMKgIGNhc2UgQ0NfQVRU Ul9HVUVTVF9NRU1fRU5DUllQVDoKK8KgwqDCoMKgwqDCoCBjYXNlIENDX0FUVFJfR1VFU1RfTUVN X0FDQ0VTU19SRVNUUklDVEVEOgorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g dHJ1ZTsKKworwqDCoMKgwqDCoMKgIGRlZmF1bHQ6CivCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHJldHVybiBmYWxzZTsKK8KgwqDCoMKgwqDCoCB9Cit9CisKK3N0YXRpYyBib29sIHhlbl9j Y19wbGF0Zm9ybV9oYXMoZW51bSBjY19hdHRyIGF0dHIpCit7CivCoMKgwqDCoMKgwqAgcmV0dXJu IGF0dHIgPT0gQ0NfQVRUUl9HVUVTVF9NRU1fQUNDRVNTX1JFU1RSSUNURUQ7CiDCoH0KCiDCoGJv b2wgY2NfcGxhdGZvcm1faGFzKGVudW0gY2NfYXR0ciBhdHRyKQpAQCAtNzksNiArOTIsOCBAQCBi b29sIGNjX3BsYXRmb3JtX2hhcyhlbnVtIGNjX2F0dHIgYXR0cikKIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gaW50ZWxfY2NfcGxhdGZvcm1faGFzKGF0dHIpOwogwqDCoMKg wqDCoMKgwqAgY2FzZSBDQ19WRU5ET1JfSFlQRVJWOgogwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiBoeXBlcnZfY2NfcGxhdGZvcm1faGFzKGF0dHIpOworwqDCoMKgwqDCoMKg IGNhc2UgQ0NfVkVORE9SX1hFTjoKK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHhlbl9jY19wbGF0Zm9ybV9oYXMoYXR0cik7CiDCoMKgwqDCoMKgwqDCoCBkZWZhdWx0OgogwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsKIMKgwqDCoMKgwqDCoMKg IH0KQEAgLTExNSwzICsxMzAsMTEgQEAgX19pbml0IHZvaWQgY2Nfc2V0X21hc2sodTY0IG1hc2sp CiDCoHsKIMKgwqDCoMKgwqDCoMKgIGNjX21hc2sgPSBtYXNrOwogwqB9CisKKyNpZmRlZiBDT05G SUdfQVJDSF9IQVNfUkVTVFJJQ1RFRF9WSVJUSU9fTUVNT1JZX0FDQ0VTUworaW50IGFyY2hfaGFz X3Jlc3RyaWN0ZWRfdmlydGlvX21lbW9yeV9hY2Nlc3Modm9pZCkKK3sKK8KgwqDCoMKgwqDCoCBy ZXR1cm4gY2NfcGxhdGZvcm1faGFzKENDX0FUVFJfR1VFU1RfTUVNX0FDQ0VTU19SRVNUUklDVEVE KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFyY2hfaGFzX3Jlc3RyaWN0ZWRfdmlydGlvX21lbW9y eV9hY2Nlc3MpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jb2Nv LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jb2NvLmgKaW5kZXggM2Q5OGMzYS4uNjM5NWVjMSAx MDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY29jby5oCisrKyBiL2FyY2gveDg2L2lu Y2x1ZGUvYXNtL2NvY28uaApAQCAtOSw2ICs5LDcgQEAgZW51bSBjY192ZW5kb3IgewogwqDCoMKg wqDCoMKgwqAgQ0NfVkVORE9SX0FNRCwKIMKgwqDCoMKgwqDCoMKgIENDX1ZFTkRPUl9IWVBFUlYs CiDCoMKgwqDCoMKgwqDCoCBDQ19WRU5ET1JfSU5URUwsCivCoMKgwqDCoMKgwqAgQ0NfVkVORE9S X1hFTiwKIMKgfTsKCiDCoHZvaWQgY2Nfc2V0X3ZlbmRvcihlbnVtIGNjX3ZlbmRvciB2KTsKZGlm ZiAtLWdpdCBhL2FyY2gveDg2L21tL21lbV9lbmNyeXB0LmMgYi9hcmNoL3g4Ni9tbS9tZW1fZW5j cnlwdC5jCmluZGV4IDUwZDIwOTkuLmRkYTAyMGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL21l bV9lbmNyeXB0LmMKKysrIGIvYXJjaC94ODYvbW0vbWVtX2VuY3J5cHQuYwpAQCAtNzcsOCArNzcs MyBAQCB2b2lkIF9faW5pdCBtZW1fZW5jcnlwdF9pbml0KHZvaWQpCiDCoMKgwqDCoMKgwqDCoCBw cmludF9tZW1fZW5jcnlwdF9mZWF0dXJlX2luZm8oKTsKIMKgfQoKLWludCBhcmNoX2hhc19yZXN0 cmljdGVkX3ZpcnRpb19tZW1vcnlfYWNjZXNzKHZvaWQpCi17Ci3CoMKgwqDCoMKgwqAgcmV0dXJu IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX01FTV9FTkNSWVBUKTsKLX0KLUVYUE9SVF9T WU1CT0xfR1BMKGFyY2hfaGFzX3Jlc3RyaWN0ZWRfdmlydGlvX21lbW9yeV9hY2Nlc3MpOwpkaWZm IC0tZ2l0IGEvYXJjaC94ODYveGVuL0tjb25maWcgYi9hcmNoL3g4Ni94ZW4vS2NvbmZpZwppbmRl eCA4NTI0NmRkLi43OWNiMzBmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vS2NvbmZpZworKysg Yi9hcmNoL3g4Ni94ZW4vS2NvbmZpZwpAQCAtOCw2ICs4LDcgQEAgY29uZmlnIFhFTgogwqDCoMKg wqDCoMKgwqAgZGVwZW5kcyBvbiBQQVJBVklSVAogwqDCoMKgwqDCoMKgwqAgc2VsZWN0IFBBUkFW SVJUX0NMT0NLCiDCoMKgwqDCoMKgwqDCoCBzZWxlY3QgWDg2X0hWX0NBTExCQUNLX1ZFQ1RPUgor wqDCoMKgwqDCoMKgIHNlbGVjdCBBUkNIX0hBU19DQ19QTEFURk9STQogwqDCoMKgwqDCoMKgwqAg ZGVwZW5kcyBvbiBYODZfNjQgfHwgKFg4Nl8zMiAmJiBYODZfUEFFKQogwqDCoMKgwqDCoMKgwqAg ZGVwZW5kcyBvbiBYODZfTE9DQUxfQVBJQyAmJiBYODZfVFNDCiDCoMKgwqDCoMKgwqDCoCBoZWxw CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuX2h2bS5jIGIvYXJjaC94ODYveGVu L2VubGlnaHRlbl9odm0uYwppbmRleCA1MTdhOWQ4Li4xMWMzZjRlIDEwMDY0NAotLS0gYS9hcmNo L3g4Ni94ZW4vZW5saWdodGVuX2h2bS5jCisrKyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW5faHZt LmMKQEAgLTE5NSw2ICsxOTUsOSBAQCBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX2h2bV9ndWVzdF9p bml0KHZvaWQpCiDCoMKgwqDCoMKgwqDCoCBpZiAoeGVuX3B2X2RvbWFpbigpKQogwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybjsKCivCoMKgwqDCoMKgwqAgaWYgKElTX0VOQUJM RUQoQ09ORklHX1hFTl9WSVJUSU8pKQorwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjY19z ZXRfdmVuZG9yKENDX1ZFTkRPUl9YRU4pOworCiDCoMKgwqDCoMKgwqDCoCBpbml0X2h2bV9wdl9p bmZvKCk7CgogwqDCoMKgwqDCoMKgwqAgcmVzZXJ2ZV9zaGFyZWRfaW5mbygpOwpkaWZmIC0tZ2l0 IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbl9wdi5jIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbl9w di5jCmluZGV4IDUwMzhlZGIuLjJmZTVhYWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9lbmxp Z2h0ZW5fcHYuYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuX3B2LmMKQEAgLTEwOSw2ICsx MDksOSBAQCBzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRsc19kZXNjcywgCnNoYWRvd190 bHNfZGVzYyk7CgogwqBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX3B2X2luaXRfcGxhdGZvcm0odm9p ZCkKIMKgeworwqDCoMKgwqDCoMKgIGlmIChJU19FTkFCTEVEKENPTkZJR19YRU5fVklSVElPKSkK K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY2Nfc2V0X3ZlbmRvcihDQ19WRU5ET1JfWEVO KTsKKwogwqDCoMKgwqDCoMKgwqAgcG9wdWxhdGVfZXh0cmFfcHRlKGZpeF90b192aXJ0KEZJWF9Q QVJBVklSVF9CT09UTUFQKSk7CgogwqDCoMKgwqDCoMKgwqAgc2V0X2ZpeG1hcChGSVhfUEFSQVZJ UlRfQk9PVE1BUCwgeGVuX3N0YXJ0X2luZm8tPnNoYXJlZF9pbmZvKTsKZGlmZiAtLWdpdCBhL2Ry aXZlcnMveGVuL0tjb25maWcgYi9kcml2ZXJzL3hlbi9LY29uZmlnCmluZGV4IDMxM2E5MTI3Li5k MzE3OWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9LY29uZmlnCisrKyBiL2RyaXZlcnMveGVu L0tjb25maWcKQEAgLTMzOSw0ICszMzksMTYgQEAgY29uZmlnIFhFTl9HUkFOVF9ETUFfT1BTCiDC oMKgwqDCoMKgwqDCoCBib29sCiDCoMKgwqDCoMKgwqDCoCBzZWxlY3QgRE1BX09QUwoKK2NvbmZp ZyBYRU5fVklSVElPCivCoMKgwqDCoMKgwqAgYm9vbCAiWGVuIHZpcnRpbyBzdXBwb3J0IgorwqDC oMKgwqDCoMKgIGRlcGVuZHMgb24gVklSVElPCivCoMKgwqDCoMKgwqAgc2VsZWN0IEFSQ0hfSEFT X1JFU1RSSUNURURfVklSVElPX01FTU9SWV9BQ0NFU1MKK8KgwqDCoMKgwqDCoCBzZWxlY3QgWEVO X0dSQU5UX0RNQV9PUFMKK8KgwqDCoMKgwqDCoCBoZWxwCivCoMKgwqDCoMKgwqDCoMKgIEVuYWJs ZSB2aXJ0aW8gc3VwcG9ydCBmb3IgcnVubmluZyBhcyBYZW4gZ3Vlc3QuIERlcGVuZGluZyBvbiB0 aGUKK8KgwqDCoMKgwqDCoMKgwqAgZ3Vlc3QgdHlwZSB0aGlzIHdpbGwgcmVxdWlyZSBzcGVjaWFs IHN1cHBvcnQgb24gdGhlIGJhY2tlbmQgc2lkZQorwqDCoMKgwqDCoMKgwqDCoCAocWVtdSBvciBr ZXJuZWwsIGRlcGVuZGluZyBvbiB0aGUgdmlydGlvIGRldmljZSB0eXBlcyB1c2VkKS4KKworwqDC oMKgwqDCoMKgwqDCoCBJZiBpbiBkb3VidCwgc2F5IG4uCisKIMKgZW5kbWVudQpkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9saW51eC9jY19wbGF0Zm9ybS5oIGIvaW5jbHVkZS9saW51eC9jY19wbGF0Zm9y bS5oCmluZGV4IGVmZDgyMDUuLmQwNmJjN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY2Nf cGxhdGZvcm0uaAorKysgYi9pbmNsdWRlL2xpbnV4L2NjX3BsYXRmb3JtLmgKQEAgLTcyLDYgKzcy LDE5IEBAIGVudW0gY2NfYXR0ciB7CiDCoMKgwqDCoMKgwqDCoMKgICogRXhhbXBsZXMgaW5jbHVk ZSBURFggZ3Vlc3QgJiBTRVYuCiDCoMKgwqDCoMKgwqDCoMKgICovCiDCoMKgwqDCoMKgwqDCoCBD Q19BVFRSX0dVRVNUX1VOUk9MTF9TVFJJTkdfSU8sCisKK8KgwqDCoMKgwqDCoCAvKioKK8KgwqDC oMKgwqDCoMKgICogQENDX0FUVFJfR1VFU1RfTUVNX0FDQ0VTU19SRVNUUklDVEVEOiBSZXN0cmlj dGVkIG1lbW9yeSBhY2Nlc3MgdG8KK8KgwqDCoMKgwqDCoMKgICrCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IEd1ZXN0IG1lbW9yeSBpcyBhY3RpdmUKK8KgwqDCoMKgwqDCoMKgICoKK8KgwqDCoMKgwqDCoMKg ICogVGhlIHBsYXRmb3JtL09TIGlzIHJ1bm5pbmcgYXMgYSBndWVzdC92aXJ0dWFsIG1hY2hpbmUg YW5kIHVzZXMKK8KgwqDCoMKgwqDCoMKgICogdGhlIHJlc3RyaWN0ZWQgYWNjZXNzIHRvIGl0cyBt ZW1vcnkuIFRoaXMgYXR0cmlidXRlIGlzIHNldCBpZiAKZWl0aGVyCivCoMKgwqDCoMKgwqDCoCAq IEd1ZXN0IG1lbW9yeSBlbmNyeXB0aW9uIG9yIHJlc3RyaWN0ZWQgbWVtb3J5IGFjY2VzcyB1c2lu ZyBYZW4gCmdyYW50CivCoMKgwqDCoMKgwqDCoCAqIG1hcHBpbmdzIGlzIGFjdGl2ZS4KK8KgwqDC oMKgwqDCoMKgICoKK8KgwqDCoMKgwqDCoMKgICogRXhhbXBsZXMgaW5jbHVkZSBYZW4gZ3Vlc3Qg YW5kIFNFVi4KK8KgwqDCoMKgwqDCoMKgICovCivCoMKgwqDCoMKgwqAgQ0NfQVRUUl9HVUVTVF9N RU1fQUNDRVNTX1JFU1RSSUNURUQsCiDCoH07CgogwqAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0ND X1BMQVRGT1JNCihFTkQpCgoKT24gQXJtIEkgbGVmdCBzaW1wbGUgdmFyaWFudCBzaW1wbHkgYmVj YXVzZSBvZiBubyB1c2VycyBvZiBjY19wbGF0Zm9ybS4KCmludCBhcmNoX2hhc19yZXN0cmljdGVk X3ZpcnRpb19tZW1vcnlfYWNjZXNzKHZvaWQpCnsKIMKgwqDCoMKgwqDCoCByZXR1cm4gSVNfRU5B QkxFRChDT05GSUdfWEVOX1ZJUlRJTykgJiYgeGVuX2RvbWFpbigpOwp9CgpCdXQsIHdlIGNvdWxk IGhhdmUgc29tZXRoaW5nIHNpbXBsZSBoZXJlOgoKYm9vbCBjY19wbGF0Zm9ybV9oYXMoZW51bSBj Y19hdHRyIGF0dHIpCnsKIMKgwqDCoCBzd2l0Y2ggKGF0dHIpIHsKIMKgwqDCoCBjYXNlIENDX0FU VFJfR1VFU1RfTUVNX0FDQ0VTU19SRVNUUklDVEVEOgogwqDCoMKgIMKgwqDCoCByZXR1cm4gSVNf RU5BQkxFRChDT05GSUdfWEVOX1ZJUlRJTykgJiYgeGVuX2RvbWFpbigpOwoKIMKgwqDCoCBkZWZh dWx0OgogwqDCoMKgIMKgwqDCoCByZXR1cm4gZmFsc2U7CiDCoMKgwqAgfQp9CgppbnQgYXJjaF9o YXNfcmVzdHJpY3RlZF92aXJ0aW9fbWVtb3J5X2FjY2Vzcyh2b2lkKQp7CiDCoMKgwqAgcmV0dXJu IGNjX3BsYXRmb3JtX2hhcyhDQ19BVFRSX0dVRVNUX01FTV9BQ0NFU1NfUkVTVFJJQ1RFRCk7Cn0K CgpBbnkgdGhvdWdodHM/CgotLSAKUmVnYXJkcywKCk9sZWtzYW5kciBUeXNoY2hlbmtvCgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgtYXJtLWtl cm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJtLWtlcm5l bAo=