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 C3640C76196 for ; Tue, 28 Mar 2023 20:01:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229641AbjC1UBl (ORCPT ); Tue, 28 Mar 2023 16:01:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49086 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229827AbjC1UBh (ORCPT ); Tue, 28 Mar 2023 16:01:37 -0400 Received: from mail-oi1-x230.google.com (mail-oi1-x230.google.com [IPv6:2607:f8b0:4864:20::230]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2C3E240DA for ; Tue, 28 Mar 2023 13:01:16 -0700 (PDT) Received: by mail-oi1-x230.google.com with SMTP id w133so9915744oib.1 for ; Tue, 28 Mar 2023 13:01:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1680033674; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=agXKSobkSDGjlZUEp6M8h1MXvBEOqF/37zRbtGZDVEE=; b=FYQSZkszI05y7nBYWGMyIR8UOYbZ7xqtI1Z9hkIpl4KxTzcytzMyqERZ8aipyy21II l+MG2fPuIURTa9sUt+8wyF0gFbNus0Y62Ad1wVF9ieWAU3YVBCTuZyXumsB27SQNTS0E YtU6WzaiBcLviXAXnNurh/5JPvhXCRe/Ro2BrgaYaNZVQE8Lw8EuEaoFYOHFRI9f/l1Z c5OO5W7ttFRbNpUMUeSF0YpFEKCMMLwwtm7BT+gPO9KBLV63F7YpVcVjlJATigQPPHrB vuGMvowTy1f22qMa1H6R+43uhtRZKJcSXCgfG9cCyKjy9PcYSNSGcuCqutUKX8WcyBVd Jkqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680033674; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=agXKSobkSDGjlZUEp6M8h1MXvBEOqF/37zRbtGZDVEE=; b=4ojKaP2p2WzB8VNcu8YmUmfYtnOvlPEylRUwf1qT1P3qap5eFZBj1eUIbsuxA0YMLG cR2pHjuyDOLUUMZN02JWSn5yM4Vx3sFwy8xaD/GnAV/uE/Mn9ZjEWtaSgxXrDh1ampS/ mK+84tad1mS4dKUXHXMrDJscL/OJExa6Nh2p7I2uRUUrqQNB4A3v7TC0G2oPUeWT5cXu WQkxNKW9BKMRdx5MsRop3nAgwlJy1B84Fo3nIFeH1VJn93Ub96+c6+NqubVt8LEKMTLh YRomh8p1gul/G/t59j64jAfGRavyEQWvnm2lQjlYDP05yW/C7Ys2sJ2xNEunYywj20dj K/1A== X-Gm-Message-State: AO0yUKWW4wcQIMk2grrgk5ePw35mGA9qFmIT99YfLde49zQCqz2NT25l Y3sjMkvZoihjbubW0osHicSTLyv4Dmyh2yai+r9uYA== X-Google-Smtp-Source: AK7set+Ach8N93iKqfowcGRyzQxK5qnJq5A9ov0BEt27dCt6jhZtgxU9LohjBZ1Dd093YWTyQahxxmZRKdcF3DZt60I= X-Received: by 2002:a05:6808:1794:b0:36e:f6f5:66a2 with SMTP id bg20-20020a056808179400b0036ef6f566a2mr5275435oib.8.1680033674482; Tue, 28 Mar 2023 13:01:14 -0700 (PDT) MIME-Version: 1.0 References: <20230317050637.766317-1-jingzhangos@google.com> <20230317050637.766317-4-jingzhangos@google.com> In-Reply-To: From: Jing Zhang Date: Tue, 28 Mar 2023 13:01:02 -0700 Message-ID: Subject: Re: [PATCH v4 3/6] KVM: arm64: Use per guest ID register for ID_AA64PFR0_EL1.[CSV2|CSV3] To: Fuad Tabba Cc: KVM , KVMARM , ARMLinux , Marc Zyngier , Oliver Upton , Will Deacon , Paolo Bonzini , James Morse , Alexandru Elisei , Suzuki K Poulose , Reiji Watanabe , Ricardo Koller , Raghavendra Rao Ananta Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Hi Faud, On Tue, Mar 28, 2023 at 5:40=E2=80=AFAM Fuad Tabba wrote= : > > Hi, > > On Fri, Mar 17, 2023 at 5:06=E2=80=AFAM Jing Zhang wrote: > > > > With per guest ID registers, ID_AA64PFR0_EL1.[CSV2|CSV3] settings from > > userspace can be stored in its corresponding ID register. > > > > No functional change intended. > > > > Signed-off-by: Jing Zhang > > --- > > arch/arm64/include/asm/kvm_host.h | 2 -- > > arch/arm64/kvm/arm.c | 19 +------------------ > > arch/arm64/kvm/hyp/nvhe/sys_regs.c | 7 +++---- > > arch/arm64/kvm/id_regs.c | 30 ++++++++++++++++++++++-------- > > 4 files changed, 26 insertions(+), 32 deletions(-) > > > > diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm= /kvm_host.h > > index fb6b50b1f111..e926ea91a73c 100644 > > --- a/arch/arm64/include/asm/kvm_host.h > > +++ b/arch/arm64/include/asm/kvm_host.h > > @@ -230,8 +230,6 @@ struct kvm_arch { > > > > cpumask_var_t supported_cpus; > > > > - u8 pfr0_csv2; > > - u8 pfr0_csv3; > > struct { > > u8 imp:4; > > u8 unimp:4; > > diff --git a/arch/arm64/kvm/arm.c b/arch/arm64/kvm/arm.c > > index 4579c878ab30..c78d68d011cb 100644 > > --- a/arch/arm64/kvm/arm.c > > +++ b/arch/arm64/kvm/arm.c > > @@ -104,22 +104,6 @@ static int kvm_arm_default_max_vcpus(void) > > return vgic_present ? kvm_vgic_get_max_vcpus() : KVM_MAX_VCPUS; > > } > > > > -static void set_default_spectre(struct kvm *kvm) > > -{ > > - /* > > - * The default is to expose CSV2 =3D=3D 1 if the HW isn't affec= ted. > > - * Although this is a per-CPU feature, we make it global becaus= e > > - * asymmetric systems are just a nuisance. > > - * > > - * Userspace can override this as long as it doesn't promise > > - * the impossible. > > - */ > > - if (arm64_get_spectre_v2_state() =3D=3D SPECTRE_UNAFFECTED) > > - kvm->arch.pfr0_csv2 =3D 1; > > - if (arm64_get_meltdown_state() =3D=3D SPECTRE_UNAFFECTED) > > - kvm->arch.pfr0_csv3 =3D 1; > > -} > > - > > /** > > * kvm_arch_init_vm - initializes a VM data structure > > * @kvm: pointer to the KVM struct > > @@ -151,9 +135,8 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long= type) > > /* The maximum number of VCPUs is limited by the host's GIC mod= el */ > > kvm->max_vcpus =3D kvm_arm_default_max_vcpus(); > > > > - set_default_spectre(kvm); > > - kvm_arm_init_hypercalls(kvm); > > kvm_arm_set_default_id_regs(kvm); > > + kvm_arm_init_hypercalls(kvm); > > > > /* > > * Initialise the default PMUver before there is a chance to > > diff --git a/arch/arm64/kvm/hyp/nvhe/sys_regs.c b/arch/arm64/kvm/hyp/nv= he/sys_regs.c > > index 08d2b004f4b7..0e1988740a65 100644 > > --- a/arch/arm64/kvm/hyp/nvhe/sys_regs.c > > +++ b/arch/arm64/kvm/hyp/nvhe/sys_regs.c > > @@ -93,10 +93,9 @@ static u64 get_pvm_id_aa64pfr0(const struct kvm_vcpu= *vcpu) > > PVM_ID_AA64PFR0_RESTRICT_UNSIGNED); > > > > /* Spectre and Meltdown mitigation in KVM */ > > - set_mask |=3D FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV= 2), > > - (u64)kvm->arch.pfr0_csv2); > > - set_mask |=3D FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV= 3), > > - (u64)kvm->arch.pfr0_csv3); > > + set_mask |=3D vcpu->kvm->arch.id_regs[IDREG_IDX(SYS_ID_AA64PFR0= _EL1)] & > > + (ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV2) | > > + ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV3)); > > This triggers a compiler warning now since the variable `struct kvm > *kvm` isn't used anymore, this, however, isn't the main issue. > > The main issue is that `struct kvm` here (vcpu->kvm) is the > hypervisor's version for protected vms, and not the host's. Therefore, > reading that value is wrong. That said, this is an existing bug in > pKVM since kvm->arch.pfr0_csv2 and kvm->arch.pfr0_csv3 are not > initialized. > > The solution would be to track the spectre/meltown state at hyp and > use that. I'll submit a patch that does that. In the meantime, I think > that it would be better not to set the CSV bits for protected VMs, > which is the current behavior in practice. > > Non-protected VMs in protected mode go back to the host on id register > traps, and use the host's `struct kvm`, so they should behave as > expected. You mean just remove these two lines: /* Spectre and Meltdown mitigation in KVM */ set_mask |=3D FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV2), (u64)kvm->arch.pfr0_csv2); set_mask |=3D FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV3), (u64)kvm->arch.pfr0_csv3); Will it cause any problem for pKVM without your incoming patch? > > Thanks, > /fuad > > > > > > return (id_aa64pfr0_el1_sys_val & allow_mask) | set_mask; > > } > > diff --git a/arch/arm64/kvm/id_regs.c b/arch/arm64/kvm/id_regs.c > > index e393b5730557..b60ca1058301 100644 > > --- a/arch/arm64/kvm/id_regs.c > > +++ b/arch/arm64/kvm/id_regs.c > > @@ -61,12 +61,6 @@ u64 kvm_arm_read_id_reg(const struct kvm_vcpu *vcpu,= u32 id) > > if (!vcpu_has_sve(vcpu)) > > val &=3D ~ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_SV= E); > > val &=3D ~ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_AMU); > > - val &=3D ~ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV2); > > - val |=3D FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_= CSV2), > > - (u64)vcpu->kvm->arch.pfr0_csv2); > > - val &=3D ~ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV3); > > - val |=3D FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_= CSV3), > > - (u64)vcpu->kvm->arch.pfr0_csv3); > > if (kvm_vgic_global_state.type =3D=3D VGIC_V3) { > > val &=3D ~ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_GI= C); > > val |=3D FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64P= FR0_EL1_GIC), 1); > > @@ -201,6 +195,7 @@ static int set_id_aa64pfr0_el1(struct kvm_vcpu *vcp= u, > > u64 val) > > { > > u8 csv2, csv3; > > + u64 sval =3D val; > > > > /* > > * Allow AA64PFR0_EL1.CSV2 to be set from userspace as long as > > @@ -225,8 +220,7 @@ static int set_id_aa64pfr0_el1(struct kvm_vcpu *vcp= u, > > if (val) > > return -EINVAL; > > > > - vcpu->kvm->arch.pfr0_csv2 =3D csv2; > > - vcpu->kvm->arch.pfr0_csv3 =3D csv3; > > + vcpu->kvm->arch.id_regs[IDREG_IDX(reg_to_encoding(rd))] =3D sva= l; > > > > return 0; > > } > > @@ -529,4 +523,24 @@ void kvm_arm_set_default_id_regs(struct kvm *kvm) > > val =3D read_sanitised_ftr_reg(id); > > kvm->arch.id_regs[IDREG_IDX(id)] =3D val; > > } > > + /* > > + * The default is to expose CSV2 =3D=3D 1 if the HW isn't affec= ted. > > + * Although this is a per-CPU feature, we make it global becaus= e > > + * asymmetric systems are just a nuisance. > > + * > > + * Userspace can override this as long as it doesn't promise > > + * the impossible. > > + */ > > + val =3D kvm->arch.id_regs[IDREG_IDX(SYS_ID_AA64PFR0_EL1)]; > > + > > + if (arm64_get_spectre_v2_state() =3D=3D SPECTRE_UNAFFECTED) { > > + val &=3D ~ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV2); > > + val |=3D FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_= CSV2), 1); > > + } > > + if (arm64_get_meltdown_state() =3D=3D SPECTRE_UNAFFECTED) { > > + val &=3D ~ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_CSV3); > > + val |=3D FIELD_PREP(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_= CSV3), 1); > > + } > > + > > + kvm->arch.id_regs[IDREG_IDX(SYS_ID_AA64PFR0_EL1)] =3D val; > > } > > -- > > 2.40.0.rc1.284.g88254d51c5-goog > > Thanks, Jing 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 37B19C6FD18 for ; Tue, 28 Mar 2023 20:02:15 +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-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=AtnYlfYom5oQkFFBLyzOGM6rxltAvbYr3XRYB5hbfeE=; b=jIAr16pXYYeTLG DXCZBp17NO+dJc0Qwt1GBFnHxe3iuAabmpI5nIU5EETd568AAYgAroR1L/3sEGJRgNbHsc1XVFAz2 Ckb2a/tLilnwFLI3lOgok9Iv5/MO6QB+7lEK1iQeGYHlIYOISX7rD0XWXg8BSM+Wo5fqE5BlDgWuY XgHM0vK6Zje8V3U72mwbYozdT3eWI0gIx+UrIpHc5dSPSk79f+9FvIr8yqfDCJw7mPTTgFciRxxv1 bVjzIKPHWV8hs1q0yIJMC5/N9cQ+gryZA/HO6IzL2iuxwgXbudwQ5BcKJqHJ+doT1MaFJJHnmYOka YnOLkf4MD5kpzQJOH/tQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1phFVO-00FjKQ-2A; Tue, 28 Mar 2023 20:01:18 +0000 Received: from mail-oi1-x22c.google.com ([2607:f8b0:4864:20::22c]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1phFVL-00FjJ0-2m for linux-arm-kernel@lists.infradead.org; Tue, 28 Mar 2023 20:01:17 +0000 Received: by mail-oi1-x22c.google.com with SMTP id b19so9905332oib.7 for ; Tue, 28 Mar 2023 13:01:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1680033674; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=agXKSobkSDGjlZUEp6M8h1MXvBEOqF/37zRbtGZDVEE=; b=FYQSZkszI05y7nBYWGMyIR8UOYbZ7xqtI1Z9hkIpl4KxTzcytzMyqERZ8aipyy21II l+MG2fPuIURTa9sUt+8wyF0gFbNus0Y62Ad1wVF9ieWAU3YVBCTuZyXumsB27SQNTS0E YtU6WzaiBcLviXAXnNurh/5JPvhXCRe/Ro2BrgaYaNZVQE8Lw8EuEaoFYOHFRI9f/l1Z c5OO5W7ttFRbNpUMUeSF0YpFEKCMMLwwtm7BT+gPO9KBLV63F7YpVcVjlJATigQPPHrB vuGMvowTy1f22qMa1H6R+43uhtRZKJcSXCgfG9cCyKjy9PcYSNSGcuCqutUKX8WcyBVd Jkqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680033674; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=agXKSobkSDGjlZUEp6M8h1MXvBEOqF/37zRbtGZDVEE=; b=6Elk04/6xOIy7mqinFgRxxqcpBeVy3gQDOIgVMSiYXyy5oCShWuXm9rFGehQhka0c2 +akZ5Kwva2myLQdBzIEQeOWPYKt9BdBMePhwUlADTLo3uBZn7prTNcnZqmkGLEVCufXu pejLZz2EgIVfPlpj6CKe2Enx/9I3A/MnKnNFok/wJlYJFhgmeXySlpdIOVyBJ1do0yeY 6+1fn+LgnQqkDr0IdobpFfRgcno+TRxFbJbwP23yNYtq/mmM+dNSMVNMqDAoXBXj3LzP SsA2Yxp2iL42NBvYN9c8dZCBRqlnWQwB46MHaeDRg1YAj5CaXOp8gBOeg8tL2RnHxWwd ocaw== X-Gm-Message-State: AO0yUKWsDxzPr4vOKyHo57Ng2qTrDFj/tDQS0m0y9zQeEf7cxTm6f7qI 30zGEm79qPDDuhRBcjO1bwYwj97PdrsLGNGQO1JgLwRt2vI2f533tANRyQ== X-Google-Smtp-Source: AK7set+Ach8N93iKqfowcGRyzQxK5qnJq5A9ov0BEt27dCt6jhZtgxU9LohjBZ1Dd093YWTyQahxxmZRKdcF3DZt60I= X-Received: by 2002:a05:6808:1794:b0:36e:f6f5:66a2 with SMTP id bg20-20020a056808179400b0036ef6f566a2mr5275435oib.8.1680033674482; Tue, 28 Mar 2023 13:01:14 -0700 (PDT) MIME-Version: 1.0 References: <20230317050637.766317-1-jingzhangos@google.com> <20230317050637.766317-4-jingzhangos@google.com> In-Reply-To: From: Jing Zhang Date: Tue, 28 Mar 2023 13:01:02 -0700 Message-ID: Subject: Re: [PATCH v4 3/6] KVM: arm64: Use per guest ID register for ID_AA64PFR0_EL1.[CSV2|CSV3] To: Fuad Tabba Cc: KVM , KVMARM , ARMLinux , Marc Zyngier , Oliver Upton , Will Deacon , Paolo Bonzini , James Morse , Alexandru Elisei , Suzuki K Poulose , Reiji Watanabe , Ricardo Koller , Raghavendra Rao Ananta X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230328_130115_901391_11450D6D X-CRM114-Status: GOOD ( 36.85 ) 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgRmF1ZCwKCk9uIFR1ZSwgTWFyIDI4LCAyMDIzIGF0IDU6NDDigK9BTSBGdWFkIFRhYmJhIDx0 YWJiYUBnb29nbGUuY29tPiB3cm90ZToKPgo+IEhpLAo+Cj4gT24gRnJpLCBNYXIgMTcsIDIwMjMg YXQgNTowNuKAr0FNIEppbmcgWmhhbmcgPGppbmd6aGFuZ29zQGdvb2dsZS5jb20+IHdyb3RlOgo+ ID4KPiA+IFdpdGggcGVyIGd1ZXN0IElEIHJlZ2lzdGVycywgSURfQUE2NFBGUjBfRUwxLltDU1Yy fENTVjNdIHNldHRpbmdzIGZyb20KPiA+IHVzZXJzcGFjZSBjYW4gYmUgc3RvcmVkIGluIGl0cyBj b3JyZXNwb25kaW5nIElEIHJlZ2lzdGVyLgo+ID4KPiA+IE5vIGZ1bmN0aW9uYWwgY2hhbmdlIGlu dGVuZGVkLgo+ID4KPiA+IFNpZ25lZC1vZmYtYnk6IEppbmcgWmhhbmcgPGppbmd6aGFuZ29zQGdv b2dsZS5jb20+Cj4gPiAtLS0KPiA+ICBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0Lmgg IHwgIDIgLS0KPiA+ICBhcmNoL2FybTY0L2t2bS9hcm0uYyAgICAgICAgICAgICAgIHwgMTkgKy0t LS0tLS0tLS0tLS0tLS0tLQo+ID4gIGFyY2gvYXJtNjQva3ZtL2h5cC9udmhlL3N5c19yZWdzLmMg fCAgNyArKystLS0tCj4gPiAgYXJjaC9hcm02NC9rdm0vaWRfcmVncy5jICAgICAgICAgICB8IDMw ICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLQo+ID4gIDQgZmlsZXMgY2hhbmdlZCwgMjYg aW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCj4gPgo+ID4gZGlmZiAtLWdpdCBhL2FyY2gv YXJtNjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20va3Zt X2hvc3QuaAo+ID4gaW5kZXggZmI2YjUwYjFmMTExLi5lOTI2ZWE5MWE3M2MgMTAwNjQ0Cj4gPiAt LS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKPiA+ICsrKyBiL2FyY2gvYXJt NjQvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAo+ID4gQEAgLTIzMCw4ICsyMzAsNiBAQCBzdHJ1Y3Qg a3ZtX2FyY2ggewo+ID4KPiA+ICAgICAgICAgY3B1bWFza192YXJfdCBzdXBwb3J0ZWRfY3B1czsK PiA+Cj4gPiAtICAgICAgIHU4IHBmcjBfY3N2MjsKPiA+IC0gICAgICAgdTggcGZyMF9jc3YzOwo+ ID4gICAgICAgICBzdHJ1Y3Qgewo+ID4gICAgICAgICAgICAgICAgIHU4IGltcDo0Owo+ID4gICAg ICAgICAgICAgICAgIHU4IHVuaW1wOjQ7Cj4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rdm0v YXJtLmMgYi9hcmNoL2FybTY0L2t2bS9hcm0uYwo+ID4gaW5kZXggNDU3OWM4NzhhYjMwLi5jNzhk NjhkMDExY2IgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL2FybTY0L2t2bS9hcm0uYwo+ID4gKysrIGIv YXJjaC9hcm02NC9rdm0vYXJtLmMKPiA+IEBAIC0xMDQsMjIgKzEwNCw2IEBAIHN0YXRpYyBpbnQg a3ZtX2FybV9kZWZhdWx0X21heF92Y3B1cyh2b2lkKQo+ID4gICAgICAgICByZXR1cm4gdmdpY19w cmVzZW50ID8ga3ZtX3ZnaWNfZ2V0X21heF92Y3B1cygpIDogS1ZNX01BWF9WQ1BVUzsKPiA+ICB9 Cj4gPgo+ID4gLXN0YXRpYyB2b2lkIHNldF9kZWZhdWx0X3NwZWN0cmUoc3RydWN0IGt2bSAqa3Zt KQo+ID4gLXsKPiA+IC0gICAgICAgLyoKPiA+IC0gICAgICAgICogVGhlIGRlZmF1bHQgaXMgdG8g ZXhwb3NlIENTVjIgPT0gMSBpZiB0aGUgSFcgaXNuJ3QgYWZmZWN0ZWQuCj4gPiAtICAgICAgICAq IEFsdGhvdWdoIHRoaXMgaXMgYSBwZXItQ1BVIGZlYXR1cmUsIHdlIG1ha2UgaXQgZ2xvYmFsIGJl Y2F1c2UKPiA+IC0gICAgICAgICogYXN5bW1ldHJpYyBzeXN0ZW1zIGFyZSBqdXN0IGEgbnVpc2Fu Y2UuCj4gPiAtICAgICAgICAqCj4gPiAtICAgICAgICAqIFVzZXJzcGFjZSBjYW4gb3ZlcnJpZGUg dGhpcyBhcyBsb25nIGFzIGl0IGRvZXNuJ3QgcHJvbWlzZQo+ID4gLSAgICAgICAgKiB0aGUgaW1w b3NzaWJsZS4KPiA+IC0gICAgICAgICovCj4gPiAtICAgICAgIGlmIChhcm02NF9nZXRfc3BlY3Ry ZV92Ml9zdGF0ZSgpID09IFNQRUNUUkVfVU5BRkZFQ1RFRCkKPiA+IC0gICAgICAgICAgICAgICBr dm0tPmFyY2gucGZyMF9jc3YyID0gMTsKPiA+IC0gICAgICAgaWYgKGFybTY0X2dldF9tZWx0ZG93 bl9zdGF0ZSgpID09IFNQRUNUUkVfVU5BRkZFQ1RFRCkKPiA+IC0gICAgICAgICAgICAgICBrdm0t PmFyY2gucGZyMF9jc3YzID0gMTsKPiA+IC19Cj4gPiAtCj4gPiAgLyoqCj4gPiAgICoga3ZtX2Fy Y2hfaW5pdF92bSAtIGluaXRpYWxpemVzIGEgVk0gZGF0YSBzdHJ1Y3R1cmUKPiA+ICAgKiBAa3Zt OiAgICAgICBwb2ludGVyIHRvIHRoZSBLVk0gc3RydWN0Cj4gPiBAQCAtMTUxLDkgKzEzNSw4IEBA IGludCBrdm1fYXJjaF9pbml0X3ZtKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyB0eXBl KQo+ID4gICAgICAgICAvKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgVkNQVXMgaXMgbGltaXRlZCBi eSB0aGUgaG9zdCdzIEdJQyBtb2RlbCAqLwo+ID4gICAgICAgICBrdm0tPm1heF92Y3B1cyA9IGt2 bV9hcm1fZGVmYXVsdF9tYXhfdmNwdXMoKTsKPiA+Cj4gPiAtICAgICAgIHNldF9kZWZhdWx0X3Nw ZWN0cmUoa3ZtKTsKPiA+IC0gICAgICAga3ZtX2FybV9pbml0X2h5cGVyY2FsbHMoa3ZtKTsKPiA+ ICAgICAgICAga3ZtX2FybV9zZXRfZGVmYXVsdF9pZF9yZWdzKGt2bSk7Cj4gPiArICAgICAgIGt2 bV9hcm1faW5pdF9oeXBlcmNhbGxzKGt2bSk7Cj4gPgo+ID4gICAgICAgICAvKgo+ID4gICAgICAg ICAgKiBJbml0aWFsaXNlIHRoZSBkZWZhdWx0IFBNVXZlciBiZWZvcmUgdGhlcmUgaXMgYSBjaGFu Y2UgdG8KPiA+IGRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zeXNfcmVncy5j IGIvYXJjaC9hcm02NC9rdm0vaHlwL252aGUvc3lzX3JlZ3MuYwo+ID4gaW5kZXggMDhkMmIwMDRm NGI3Li4wZTE5ODg3NDBhNjUgMTAwNjQ0Cj4gPiAtLS0gYS9hcmNoL2FybTY0L2t2bS9oeXAvbnZo ZS9zeXNfcmVncy5jCj4gPiArKysgYi9hcmNoL2FybTY0L2t2bS9oeXAvbnZoZS9zeXNfcmVncy5j Cj4gPiBAQCAtOTMsMTAgKzkzLDkgQEAgc3RhdGljIHU2NCBnZXRfcHZtX2lkX2FhNjRwZnIwKGNv bnN0IHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKPiA+ICAgICAgICAgICAgICAgICBQVk1fSURfQUE2 NFBGUjBfUkVTVFJJQ1RfVU5TSUdORUQpOwo+ID4KPiA+ICAgICAgICAgLyogU3BlY3RyZSBhbmQg TWVsdGRvd24gbWl0aWdhdGlvbiBpbiBLVk0gKi8KPiA+IC0gICAgICAgc2V0X21hc2sgfD0gRklF TERfUFJFUChBUk02NF9GRUFUVVJFX01BU0soSURfQUE2NFBGUjBfRUwxX0NTVjIpLAo+ID4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1NjQpa3ZtLT5hcmNoLnBmcjBfY3N2Mik7Cj4g PiAtICAgICAgIHNldF9tYXNrIHw9IEZJRUxEX1BSRVAoQVJNNjRfRkVBVFVSRV9NQVNLKElEX0FB NjRQRlIwX0VMMV9DU1YzKSwKPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodTY0 KWt2bS0+YXJjaC5wZnIwX2NzdjMpOwo+ID4gKyAgICAgICBzZXRfbWFzayB8PSB2Y3B1LT5rdm0t PmFyY2guaWRfcmVnc1tJRFJFR19JRFgoU1lTX0lEX0FBNjRQRlIwX0VMMSldICYKPiA+ICsgICAg ICAgICAgICAgICAoQVJNNjRfRkVBVFVSRV9NQVNLKElEX0FBNjRQRlIwX0VMMV9DU1YyKSB8Cj4g PiArICAgICAgICAgICAgICAgICAgICAgICBBUk02NF9GRUFUVVJFX01BU0soSURfQUE2NFBGUjBf RUwxX0NTVjMpKTsKPgo+IFRoaXMgdHJpZ2dlcnMgYSBjb21waWxlciB3YXJuaW5nIG5vdyBzaW5j ZSB0aGUgdmFyaWFibGUgYHN0cnVjdCBrdm0KPiAqa3ZtYCBpc24ndCB1c2VkIGFueW1vcmUsIHRo aXMsIGhvd2V2ZXIsIGlzbid0IHRoZSBtYWluIGlzc3VlLgo+Cj4gVGhlIG1haW4gaXNzdWUgaXMg dGhhdCBgc3RydWN0IGt2bWAgaGVyZSAodmNwdS0+a3ZtKSBpcyB0aGUKPiBoeXBlcnZpc29yJ3Mg dmVyc2lvbiBmb3IgcHJvdGVjdGVkIHZtcywgYW5kIG5vdCB0aGUgaG9zdCdzLiBUaGVyZWZvcmUs Cj4gcmVhZGluZyB0aGF0IHZhbHVlIGlzIHdyb25nLiBUaGF0IHNhaWQsIHRoaXMgaXMgYW4gZXhp c3RpbmcgYnVnIGluCj4gcEtWTSBzaW5jZSBrdm0tPmFyY2gucGZyMF9jc3YyIGFuZCBrdm0tPmFy Y2gucGZyMF9jc3YzIGFyZSBub3QKPiBpbml0aWFsaXplZC4KPgo+IFRoZSBzb2x1dGlvbiB3b3Vs ZCBiZSB0byB0cmFjayB0aGUgc3BlY3RyZS9tZWx0b3duIHN0YXRlIGF0IGh5cCBhbmQKPiB1c2Ug dGhhdC4gSSdsbCBzdWJtaXQgYSBwYXRjaCB0aGF0IGRvZXMgdGhhdC4gSW4gdGhlIG1lYW50aW1l LCBJIHRoaW5rCj4gdGhhdCBpdCB3b3VsZCBiZSBiZXR0ZXIgbm90IHRvIHNldCB0aGUgQ1NWIGJp dHMgZm9yIHByb3RlY3RlZCBWTXMsCj4gd2hpY2ggaXMgdGhlIGN1cnJlbnQgYmVoYXZpb3IgaW4g cHJhY3RpY2UuCj4KPiBOb24tcHJvdGVjdGVkIFZNcyBpbiBwcm90ZWN0ZWQgbW9kZSBnbyBiYWNr IHRvIHRoZSBob3N0IG9uIGlkIHJlZ2lzdGVyCj4gdHJhcHMsIGFuZCB1c2UgdGhlIGhvc3QncyBg c3RydWN0IGt2bWAsIHNvIHRoZXkgc2hvdWxkIGJlaGF2ZSBhcwo+IGV4cGVjdGVkLgpZb3UgbWVh biBqdXN0IHJlbW92ZSB0aGVzZSB0d28gbGluZXM6CiAvKiBTcGVjdHJlIGFuZCBNZWx0ZG93biBt aXRpZ2F0aW9uIGluIEtWTSAqLwogc2V0X21hc2sgfD0gRklFTERfUFJFUChBUk02NF9GRUFUVVJF X01BU0soSURfQUE2NFBGUjBfRUwxX0NTVjIpLAoodTY0KWt2bS0+YXJjaC5wZnIwX2NzdjIpOwpz ZXRfbWFzayB8PSBGSUVMRF9QUkVQKEFSTTY0X0ZFQVRVUkVfTUFTSyhJRF9BQTY0UEZSMF9FTDFf Q1NWMyksCih1NjQpa3ZtLT5hcmNoLnBmcjBfY3N2Myk7CgpXaWxsIGl0IGNhdXNlIGFueSBwcm9i bGVtIGZvciBwS1ZNIHdpdGhvdXQgeW91ciBpbmNvbWluZyBwYXRjaD8KPgo+IFRoYW5rcywKPiAv ZnVhZAo+Cj4KPiA+Cj4gPiAgICAgICAgIHJldHVybiAoaWRfYWE2NHBmcjBfZWwxX3N5c192YWwg JiBhbGxvd19tYXNrKSB8IHNldF9tYXNrOwo+ID4gIH0KPiA+IGRpZmYgLS1naXQgYS9hcmNoL2Fy bTY0L2t2bS9pZF9yZWdzLmMgYi9hcmNoL2FybTY0L2t2bS9pZF9yZWdzLmMKPiA+IGluZGV4IGUz OTNiNTczMDU1Ny4uYjYwY2ExMDU4MzAxIDEwMDY0NAo+ID4gLS0tIGEvYXJjaC9hcm02NC9rdm0v aWRfcmVncy5jCj4gPiArKysgYi9hcmNoL2FybTY0L2t2bS9pZF9yZWdzLmMKPiA+IEBAIC02MSwx MiArNjEsNiBAQCB1NjQga3ZtX2FybV9yZWFkX2lkX3JlZyhjb25zdCBzdHJ1Y3Qga3ZtX3ZjcHUg KnZjcHUsIHUzMiBpZCkKPiA+ICAgICAgICAgICAgICAgICBpZiAoIXZjcHVfaGFzX3N2ZSh2Y3B1 KSkKPiA+ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCAmPSB+QVJNNjRfRkVBVFVSRV9NQVNL KElEX0FBNjRQRlIwX0VMMV9TVkUpOwo+ID4gICAgICAgICAgICAgICAgIHZhbCAmPSB+QVJNNjRf RkVBVFVSRV9NQVNLKElEX0FBNjRQRlIwX0VMMV9BTVUpOwo+ID4gLSAgICAgICAgICAgICAgIHZh bCAmPSB+QVJNNjRfRkVBVFVSRV9NQVNLKElEX0FBNjRQRlIwX0VMMV9DU1YyKTsKPiA+IC0gICAg ICAgICAgICAgICB2YWwgfD0gRklFTERfUFJFUChBUk02NF9GRUFUVVJFX01BU0soSURfQUE2NFBG UjBfRUwxX0NTVjIpLAo+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1NjQp dmNwdS0+a3ZtLT5hcmNoLnBmcjBfY3N2Mik7Cj4gPiAtICAgICAgICAgICAgICAgdmFsICY9IH5B Uk02NF9GRUFUVVJFX01BU0soSURfQUE2NFBGUjBfRUwxX0NTVjMpOwo+ID4gLSAgICAgICAgICAg ICAgIHZhbCB8PSBGSUVMRF9QUkVQKEFSTTY0X0ZFQVRVUkVfTUFTSyhJRF9BQTY0UEZSMF9FTDFf Q1NWMyksCj4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHU2NCl2Y3B1LT5r dm0tPmFyY2gucGZyMF9jc3YzKTsKPiA+ICAgICAgICAgICAgICAgICBpZiAoa3ZtX3ZnaWNfZ2xv YmFsX3N0YXRlLnR5cGUgPT0gVkdJQ19WMykgewo+ID4gICAgICAgICAgICAgICAgICAgICAgICAg dmFsICY9IH5BUk02NF9GRUFUVVJFX01BU0soSURfQUE2NFBGUjBfRUwxX0dJQyk7Cj4gPiAgICAg ICAgICAgICAgICAgICAgICAgICB2YWwgfD0gRklFTERfUFJFUChBUk02NF9GRUFUVVJFX01BU0so SURfQUE2NFBGUjBfRUwxX0dJQyksIDEpOwo+ID4gQEAgLTIwMSw2ICsxOTUsNyBAQCBzdGF0aWMg aW50IHNldF9pZF9hYTY0cGZyMF9lbDEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAo+ID4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCB2YWwpCj4gPiAgewo+ID4gICAgICAgICB1OCBj c3YyLCBjc3YzOwo+ID4gKyAgICAgICB1NjQgc3ZhbCA9IHZhbDsKPiA+Cj4gPiAgICAgICAgIC8q Cj4gPiAgICAgICAgICAqIEFsbG93IEFBNjRQRlIwX0VMMS5DU1YyIHRvIGJlIHNldCBmcm9tIHVz ZXJzcGFjZSBhcyBsb25nIGFzCj4gPiBAQCAtMjI1LDggKzIyMCw3IEBAIHN0YXRpYyBpbnQgc2V0 X2lkX2FhNjRwZnIwX2VsMShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCj4gPiAgICAgICAgIGlmICh2 YWwpCj4gPiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cj4gPgo+ID4gLSAgICAgICB2 Y3B1LT5rdm0tPmFyY2gucGZyMF9jc3YyID0gY3N2MjsKPiA+IC0gICAgICAgdmNwdS0+a3ZtLT5h cmNoLnBmcjBfY3N2MyA9IGNzdjM7Cj4gPiArICAgICAgIHZjcHUtPmt2bS0+YXJjaC5pZF9yZWdz W0lEUkVHX0lEWChyZWdfdG9fZW5jb2RpbmcocmQpKV0gPSBzdmFsOwo+ID4KPiA+ICAgICAgICAg cmV0dXJuIDA7Cj4gPiAgfQo+ID4gQEAgLTUyOSw0ICs1MjMsMjQgQEAgdm9pZCBrdm1fYXJtX3Nl dF9kZWZhdWx0X2lkX3JlZ3Moc3RydWN0IGt2bSAqa3ZtKQo+ID4gICAgICAgICAgICAgICAgIHZh bCA9IHJlYWRfc2FuaXRpc2VkX2Z0cl9yZWcoaWQpOwo+ID4gICAgICAgICAgICAgICAgIGt2bS0+ YXJjaC5pZF9yZWdzW0lEUkVHX0lEWChpZCldID0gdmFsOwo+ID4gICAgICAgICB9Cj4gPiArICAg ICAgIC8qCj4gPiArICAgICAgICAqIFRoZSBkZWZhdWx0IGlzIHRvIGV4cG9zZSBDU1YyID09IDEg aWYgdGhlIEhXIGlzbid0IGFmZmVjdGVkLgo+ID4gKyAgICAgICAgKiBBbHRob3VnaCB0aGlzIGlz IGEgcGVyLUNQVSBmZWF0dXJlLCB3ZSBtYWtlIGl0IGdsb2JhbCBiZWNhdXNlCj4gPiArICAgICAg ICAqIGFzeW1tZXRyaWMgc3lzdGVtcyBhcmUganVzdCBhIG51aXNhbmNlLgo+ID4gKyAgICAgICAg Kgo+ID4gKyAgICAgICAgKiBVc2Vyc3BhY2UgY2FuIG92ZXJyaWRlIHRoaXMgYXMgbG9uZyBhcyBp dCBkb2Vzbid0IHByb21pc2UKPiA+ICsgICAgICAgICogdGhlIGltcG9zc2libGUuCj4gPiArICAg ICAgICAqLwo+ID4gKyAgICAgICB2YWwgPSBrdm0tPmFyY2guaWRfcmVnc1tJRFJFR19JRFgoU1lT X0lEX0FBNjRQRlIwX0VMMSldOwo+ID4gKwo+ID4gKyAgICAgICBpZiAoYXJtNjRfZ2V0X3NwZWN0 cmVfdjJfc3RhdGUoKSA9PSBTUEVDVFJFX1VOQUZGRUNURUQpIHsKPiA+ICsgICAgICAgICAgICAg ICB2YWwgJj0gfkFSTTY0X0ZFQVRVUkVfTUFTSyhJRF9BQTY0UEZSMF9FTDFfQ1NWMik7Cj4gPiAr ICAgICAgICAgICAgICAgdmFsIHw9IEZJRUxEX1BSRVAoQVJNNjRfRkVBVFVSRV9NQVNLKElEX0FB NjRQRlIwX0VMMV9DU1YyKSwgMSk7Cj4gPiArICAgICAgIH0KPiA+ICsgICAgICAgaWYgKGFybTY0 X2dldF9tZWx0ZG93bl9zdGF0ZSgpID09IFNQRUNUUkVfVU5BRkZFQ1RFRCkgewo+ID4gKyAgICAg ICAgICAgICAgIHZhbCAmPSB+QVJNNjRfRkVBVFVSRV9NQVNLKElEX0FBNjRQRlIwX0VMMV9DU1Yz KTsKPiA+ICsgICAgICAgICAgICAgICB2YWwgfD0gRklFTERfUFJFUChBUk02NF9GRUFUVVJFX01B U0soSURfQUE2NFBGUjBfRUwxX0NTVjMpLCAxKTsKPiA+ICsgICAgICAgfQo+ID4gKwo+ID4gKyAg ICAgICBrdm0tPmFyY2guaWRfcmVnc1tJRFJFR19JRFgoU1lTX0lEX0FBNjRQRlIwX0VMMSldID0g dmFsOwo+ID4gIH0KPiA+IC0tCj4gPiAyLjQwLjAucmMxLjI4NC5nODgyNTRkNTFjNS1nb29nCj4g PgpUaGFua3MsCkppbmcKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlz dHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2xpbnV4LWFybS1rZXJuZWwK