From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: virtio-dev-return-2541-cohuck=redhat.com@lists.oasis-open.org Sender: List-Post: List-Help: List-Unsubscribe: List-Subscribe: Received: from lists.oasis-open.org (oasis-open.org [66.179.20.138]) by lists.oasis-open.org (Postfix) with ESMTP id DBEB458182A3 for ; Wed, 13 Sep 2017 17:59:37 -0700 (PDT) Message-ID: <59B9D439.10807@huawei.com> Date: Thu, 14 Sep 2017 08:58:33 +0800 From: "Longpeng (Mike)" MIME-Version: 1.0 References: <1505092240-10864-1-git-send-email-longpeng2@huawei.com> <2d8ae3d3-438b-da84-4959-cf63f4f4ce99@linux.vnet.ibm.com> In-Reply-To: <2d8ae3d3-438b-da84-4959-cf63f4f4ce99@linux.vnet.ibm.com> Content-Type: multipart/mixed; boundary="------------000905010807050209040800" Subject: Re: [virtio-dev] Re: [Qemu-devel] [RFC 0/8] virtio-crypto: add multiplexing mode support To: Halil Pasic Cc: qemu-devel@nongnu.org, virtio-dev@lists.oasis-open.org, weidong.huang@huawei.com, mst@redhat.com, jasowang@redhat.com, john.griffin@intel.com, Varun.Sethi@freescale.com, denglingli@chinamobile.com, arei.gonglei@hotmail.com, agraf@suse.de, arei.gonglei@huawei.com, vincent.jardin@6wind.com, Ola.Liljedahl@arm.com, luonengjun@huawei.com, xin.zeng@intel.com, liang.j.ma@intel.com, stefanha@redhat.com, Jani.Kokkonen@huawei.com, brian.a.keating@intel.com, wangxinxin.wang@huawei.com, cohuck@redhat.com, mike.caraman@nxp.com List-ID: --------------000905010807050209040800 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On 2017/9/14 2:14, Halil Pasic wrote: > > > On 09/11/2017 03:10 AM, Longpeng(Mike) wrote: >> *NOTE* >> The code realization is based on the latest virtio crypto spec: >> [PATCH v19 0/2] virtio-crypto: virtio crypto device specification >> https://lists.nongnu.org/archive/html/qemu-devel/2017-08/msg05217.html >> >> In session mode, the process of create/close a session >> makes we have a least one full round-trip cost from guest to host to guest >> to be able to send any data for symmetric algorithms. It gets ourself into >> synchronization troubles in some scenarios like a web server handling lots >> of small requests whose algorithms and keys are different. >> >> We can support one-blob request (no sessions) as well for symmetric >> algorithms, including HASH, MAC services. The benefit is obvious for >> HASH service because it's usually a one-blob operation. >> > > Hi! > > I've just started looking at this. Patch #1 modifies linux/virtio_crypto.h > which if I compare with the (almost) latest linux master is different. Thus > I would expect a corresponding kernel patch set too, but I haven't received > one, nor did I find a reference in the cover letter. > > I think if I want to test the new features I need the kernel counter-part > too, or? > > Could you point me to the kernel counterpart? > Hi Halil, We haven't implemented the kernel frontend part yet, but there's a testcase based on qtest, you can use it. Please see the attachment. -- Regards, Longpeng(Mike) > Regards, > Halil > > >> Gonglei (3): >> virtio-crypto: add stateless crypto request handler >> cryptodev: extract one util function >> virtio-crypto: add host feature bits support >> >> Longpeng(Mike) (5): >> virtio-crypto: add new definations for multiplexing mode >> virtio-crypto: add session creation logic for mux mode >> virtio-crypto: add dataq operation logic for mux mode >> cryptodev: add stateless mode cipher support >> cryptodev-builtin: add stateless cipher support >> >> backends/cryptodev-builtin.c | 189 ++++++++--- >> backends/cryptodev.c | 21 ++ >> hw/virtio/virtio-crypto.c | 433 +++++++++++++++++++++++-- >> include/hw/virtio/virtio-crypto.h | 2 + >> include/standard-headers/linux/virtio_crypto.h | 182 ++++++++++- >> include/sysemu/cryptodev.h | 21 ++ >> 6 files changed, 774 insertions(+), 74 deletions(-) >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: virtio-dev-unsubscribe@lists.oasis-open.org > For additional commands, e-mail: virtio-dev-help@lists.oasis-open.org > > > . > -- Regards, Longpeng(Mike) --------------000905010807050209040800 Content-Type: text/plain; charset="gb18030"; name="testcase.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="testcase.patch" RnJvbSAyNTkzNTk3MDBiMTg0N2NkNjZmOWMzZTA0YTg2YTE0NTQ2ZjZmMGUwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHb25nbGVpIDxhcmVpLmdvbmdsZWlAaHVhd2VpLmNv bT4KRGF0ZTogTW9uLCA4IE1heSAyMDE3IDEzOjQyOjUzICswODAwClN1YmplY3Q6IFtQQVRD SF0gcXRlc3Q6IGVtdWxhdGUgdmlydGlvIGNyeXB0byBhcyBhIGxlZ2FjeSBkZXZpY2UgZm9y CiBleHBlcmltZW50CgpCZWNhdXNlIHRoZSBjdXJyZW50IHF0ZXN0IGZyYW1ld29yayBkbyBu b3Qgc3VwcG9ydCB2aXJ0aW8tMQpvciBsYXR0ZXIgZGV2aWNlcy4gRm9yIGV4cGVyaW1lbnRh bCBwdXJwb3NlLApsZXQncyBlbXVsYXRlIHRoZSB2aXJ0aW8gY3J5cHRvIGRldmljZSBhcyBh IGxlZ2FjeSB2aXJ0aW8KZGV2aWNlIGJ5IGRlZmF1bHQuIFVzaW5nIDB4MTAxNCBhcyB2aXJ0 aW8gY3J5cHRvIHBjaSBkZXZpY2UgSUQKYmVjYXVzZSB2aXJ0aW8gY3J5cHRvIElEIGlzIDIw ICgweDE0KS4KClNpZ25lZC1vZmYtYnk6IEdvbmdsZWkgPGFyZWkuZ29uZ2xlaUBodWF3ZWku Y29tPgoKdmlydGlvLWNyeXB0by10ZXN0OiBhZGQgcXRlc3QgY2FzZSBmb3IgdmlydGlvLWNy eXB0bwoKV2UgY2FuIHNpbXBseSB0ZXN0IHRoZSBmdW5jdGlvbnMgb2YgdmlydGlvIGNyeXB0 bwpkZXZpY2UsIGluY2x1ZGluZyBzZXNzaW9uIGNyZWF0aW9uLCBzZXNzaW9uIGNsb3Npbmcs CmNpcGhlciBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uLgoKUXVpY2sgdXNhZ2U6CiAjIG1h a2UgdGVzdHMvdmlydGlvLWNyeXB0by10ZXN0ICYmIC4vdGVzdHMvdmlydGlvLWNyeXB0by10 ZXN0CiAgQ0MgICAgdGVzdHMvdmlydGlvLWNyeXB0by10ZXN0Lm8KICBMSU5LICB0ZXN0cy92 aXJ0aW8tY3J5cHRvLXRlc3QKL3ZpcnRpby9jcnlwdG8vY2JjKGFlcy0xMjgtc2Vzc2lvbi1t b2RlKTogT0sKL3ZpcnRpby9jcnlwdG8vY2JjKGFlcy0xMjgtc3RhdGVsZXNzLW1vZGUpOiBP SwoKU2lnbmVkLW9mZi1ieTogR29uZ2xlaSA8YXJlaS5nb25nbGVpQGh1YXdlaS5jb20+Clty ZWJhc2Ugb24gdGhlIHYxOSBzcGVjXQpTaWduZWQtb2ZmLWJ5OiBMb25ncGVuZyhNaWtlKSA8 bG9uZ3BlbmcyQGh1YXdlaS5jb20+Ci0tLQogZG9jcy9zcGVjcy9wY2ktaWRzLnR4dCAgICAg ICAgfCAgIDIgKwogaHcvdmlydGlvL3ZpcnRpby1jcnlwdG8tcGNpLmMgfCAgIDQgKy0KIGlu Y2x1ZGUvaHcvcGNpL3BjaS5oICAgICAgICAgIHwgICAyICsKIHRlc3RzL01ha2VmaWxlLmlu Y2x1ZGUgICAgICAgIHwgICAzICsKIHRlc3RzL3ZpcnRpby1jcnlwdG8tdGVzdC5jICAgIHwg NjAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNSBmaWxl cyBjaGFuZ2VkLCA2MTAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHRlc3RzL3ZpcnRpby1jcnlwdG8tdGVzdC5jCgpkaWZmIC0tZ2l0IGEvZG9j cy9zcGVjcy9wY2ktaWRzLnR4dCBiL2RvY3Mvc3BlY3MvcGNpLWlkcy50eHQKaW5kZXggYmI5 OWEwMi4uNjE4NzdiNyAxMDA3NTUKLS0tIGEvZG9jcy9zcGVjcy9wY2ktaWRzLnR4dAorKysg Yi9kb2NzL3NwZWNzL3BjaS1pZHMudHh0CkBAIC0yMiw2ICsyMiw3IEBAIG1haW50YWluZWQg YXMgcGFydCBvZiB0aGUgdmlydGlvIHNwZWNpZmljYXRpb24uCiAxYWY0OjEwMDQgIFNDU0kg aG9zdCBidXMgYWRhcHRlciBkZXZpY2UgKGxlZ2FjeSkKIDFhZjQ6MTAwNSAgZW50cm9weSBn ZW5lcmF0b3IgZGV2aWNlIChsZWdhY3kpCiAxYWY0OjEwMDkgIDlwIGZpbGVzeXN0ZW0gZGV2 aWNlIChsZWdhY3kpCisxYWY0OjEwMTQgIGNyeXB0byBkZXZpY2UgKGxlZ2FjeSkKIAogMWFm NDoxMDQxICBuZXR3b3JrIGRldmljZSAobW9kZXJuKQogMWFmNDoxMDQyICBibG9jayBkZXZp Y2UgKG1vZGVybikKQEAgLTMyLDYgKzMzLDcgQEAgbWFpbnRhaW5lZCBhcyBwYXJ0IG9mIHRo ZSB2aXJ0aW8gc3BlY2lmaWNhdGlvbi4KIDFhZjQ6MTA0OSAgOXAgZmlsZXN5c3RlbSBkZXZp Y2UgKG1vZGVybikKIDFhZjQ6MTA1MCAgdmlydGlvIGdwdSBkZXZpY2UgKG1vZGVybikKIDFh ZjQ6MTA1MiAgdmlydGlvIGlucHV0IGRldmljZSAobW9kZXJuKQorMWFmNDoxMDU0ICBjcnlw dG8gZGV2aWNlIChtb2Rlcm4pCiAKIDFhZjQ6MTBmMCAgQXZhaWxhYmxlIGZvciBleHBlcmlt ZW50YWwgdXNhZ2Ugd2l0aG91dCByZWdpc3RyYXRpb24uICBNdXN0IGdldAogICAgdG8gICAg ICBvZmZpY2lhbCBJRCB3aGVuIHRoZSBjb2RlIGxlYXZlcyB0aGUgdGVzdCBsYWIgKGkuZS4g d2hlbiBzZWVraW5nCmRpZmYgLS1naXQgYS9ody92aXJ0aW8vdmlydGlvLWNyeXB0by1wY2ku YyBiL2h3L3ZpcnRpby92aXJ0aW8tY3J5cHRvLXBjaS5jCmluZGV4IGJmNjQ5OTYuLjY2YTI5 NjYgMTAwNzU1Ci0tLSBhL2h3L3ZpcnRpby92aXJ0aW8tY3J5cHRvLXBjaS5jCisrKyBiL2h3 L3ZpcnRpby92aXJ0aW8tY3J5cHRvLXBjaS5jCkBAIC0zNyw3ICszNyw2IEBAIHN0YXRpYyB2 b2lkIHZpcnRpb19jcnlwdG9fcGNpX3JlYWxpemUoVmlydElPUENJUHJveHkgKnZwY2lfZGV2 LCBFcnJvciAqKmVycnApCiAgICAgfQogCiAgICAgcWRldl9zZXRfcGFyZW50X2J1cyh2ZGV2 LCBCVVMoJnZwY2lfZGV2LT5idXMpKTsKLSAgICB2aXJ0aW9fcGNpX2ZvcmNlX3ZpcnRpb18x KHZwY2lfZGV2KTsKICAgICBvYmplY3RfcHJvcGVydHlfc2V0X2Jvb2woT0JKRUNUKHZkZXYp LCB0cnVlLCAicmVhbGl6ZWQiLCBlcnJwKTsKICAgICBvYmplY3RfcHJvcGVydHlfc2V0X2xp bmsoT0JKRUNUKHZjcnlwdG8pLAogICAgICAgICAgICAgICAgICBPQkpFQ1QodmNyeXB0by0+ dmRldi5jb25mLmNyeXB0b2RldiksICJjcnlwdG9kZXYiLApAQCAtNTMsNiArNTIsOSBAQCBz dGF0aWMgdm9pZCB2aXJ0aW9fY3J5cHRvX3BjaV9jbGFzc19pbml0KE9iamVjdENsYXNzICpr bGFzcywgdm9pZCAqZGF0YSkKICAgICBrLT5yZWFsaXplID0gdmlydGlvX2NyeXB0b19wY2lf cmVhbGl6ZTsKICAgICBzZXRfYml0KERFVklDRV9DQVRFR09SWV9NSVNDLCBkYy0+Y2F0ZWdv cmllcyk7CiAgICAgZGMtPnByb3BzID0gdmlydGlvX2NyeXB0b19wY2lfcHJvcGVydGllczsK KyAgICBwY2lkZXZfay0+dmVuZG9yX2lkID0gUENJX1ZFTkRPUl9JRF9SRURIQVRfUVVNUkFO RVQ7CisgICAgcGNpZGV2X2stPmRldmljZV9pZCA9IFBDSV9ERVZJQ0VfSURfVklSVElPX0NS WVBUTzsKKyAgICBwY2lkZXZfay0+cmV2aXNpb24gPSAwOwogICAgIHBjaWRldl9rLT5jbGFz c19pZCA9IFBDSV9DTEFTU19PVEhFUlM7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaHcv cGNpL3BjaS5oIGIvaW5jbHVkZS9ody9wY2kvcGNpLmgKaW5kZXggZTU5OGIwOS4uYWU5MzI3 YyAxMDA3NTUKLS0tIGEvaW5jbHVkZS9ody9wY2kvcGNpLmgKKysrIGIvaW5jbHVkZS9ody9w Y2kvcGNpLmgKQEAgLTgzLDYgKzgzLDggQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSVJU SU9fUk5HICAgICAgICAgMHgxMDA1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklSVElPXzlQ ICAgICAgICAgIDB4MTAwOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJUlRJT19WU09DSyAg ICAgICAweDEwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSVJUSU9fQ1JZUFRPICAgICAg MHgxMDE0CisKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1JFREhBVCAgICAgICAgICAgICAw eDFiMzYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9SRURIQVRfQlJJREdFICAgICAgMHgwMDAx CmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5pbmNsdWRlIGIvdGVzdHMvTWFrZWZpbGUu aW5jbHVkZQppbmRleCAzN2MxYmVkLi45YjZjMTMxIDEwMDc1NQotLS0gYS90ZXN0cy9NYWtl ZmlsZS5pbmNsdWRlCisrKyBiL3Rlc3RzL01ha2VmaWxlLmluY2x1ZGUKQEAgLTE5Miw2ICsx OTIsOCBAQCBjaGVjay1xdGVzdC12aXJ0aW8teSArPSB0ZXN0cy92aXJ0aW8tc2VyaWFsLXRl c3QkKEVYRVNVRikKIGdjb3YtZmlsZXMtdmlydGlvLXkgKz0gaTM4Ni1zb2Z0bW11L2h3L2No YXIvdmlydGlvLXNlcmlhbC1idXMuYwogY2hlY2stcXRlc3QtdmlydGlvLXkgKz0gJChjaGVj ay1xdGVzdC12aXJ0aW9zZXJpYWwteSkKIGdjb3YtZmlsZXMtdmlydGlvLXkgKz0gJChnY292 LWZpbGVzLXZpcnRpb3NlcmlhbC15KQorY2hlY2stcXRlc3QtdmlydGlvLXkgKz0gdGVzdHMv dmlydGlvLWNyeXB0by10ZXN0JChFWEVTVUYpCitnY292LWZpbGVzLXZpcnRpby15ICs9IGkz ODYtc29mdG1tdS9ody92aXJ0aW8vdmlydGlvLWNyeXB0by5jCiAKIGNoZWNrLXF0ZXN0LXBj aS15ICs9IHRlc3RzL2UxMDAwLXRlc3QkKEVYRVNVRikKIGdjb3YtZmlsZXMtcGNpLXkgKz0g aHcvbmV0L2UxMDAwLmMKQEAgLTc1Myw2ICs3NTUsNyBAQCB0ZXN0cy92aXJ0aW8tc2NzaS10 ZXN0JChFWEVTVUYpOiB0ZXN0cy92aXJ0aW8tc2NzaS10ZXN0Lm8gJChsaWJxb3MtdmlydGlv LW9iai15KQogdGVzdHMvdmlydGlvLTlwLXRlc3QkKEVYRVNVRik6IHRlc3RzL3ZpcnRpby05 cC10ZXN0Lm8gJChsaWJxb3MtdmlydGlvLW9iai15KQogdGVzdHMvdmlydGlvLXNlcmlhbC10 ZXN0JChFWEVTVUYpOiB0ZXN0cy92aXJ0aW8tc2VyaWFsLXRlc3QubwogdGVzdHMvdmlydGlv LWNvbnNvbGUtdGVzdCQoRVhFU1VGKTogdGVzdHMvdmlydGlvLWNvbnNvbGUtdGVzdC5vCit0 ZXN0cy92aXJ0aW8tY3J5cHRvLXRlc3QkKEVYRVNVRik6IHRlc3RzL3ZpcnRpby1jcnlwdG8t dGVzdC5vICQobGlicW9zLXZpcnRpby1vYmoteSkKIHRlc3RzL3RwY2kyMDAtdGVzdCQoRVhF U1VGKTogdGVzdHMvdHBjaTIwMC10ZXN0Lm8KIHRlc3RzL2Rpc3BsYXktdmdhLXRlc3QkKEVY RVNVRik6IHRlc3RzL2Rpc3BsYXktdmdhLXRlc3QubwogdGVzdHMvaXBvY3RhbDIzMi10ZXN0 JChFWEVTVUYpOiB0ZXN0cy9pcG9jdGFsMjMyLXRlc3QubwpkaWZmIC0tZ2l0IGEvdGVzdHMv dmlydGlvLWNyeXB0by10ZXN0LmMgYi90ZXN0cy92aXJ0aW8tY3J5cHRvLXRlc3QuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODI1ZjFmCi0tLSAvZGV2L251bGwK KysrIGIvdGVzdHMvdmlydGlvLWNyeXB0by10ZXN0LmMKQEAgLTAsMCArMSw2MDAgQEAKKy8q CisgKiBRVGVzdCB0ZXN0Y2FzZSBmb3IgVmlydElPIENyeXB0byBEZXZpY2UKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMTYgSFVBV0VJIFRFQ0hOT0xPR0lFUyBDTy4sIExURC4KKyAqCisg KiBBdXRob3JzOgorICogICAgR29uZ2xlaSA8YXJlaS5nb25nbGVpQGh1YXdlaS5jb20+Cisg KgorICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdQTCwgdmVyc2lvbiAyIG9yIGxhdGVyLgorICogU2VlIHRoZSBDT1BZSU5HIGZpbGUgaW4g dGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgor CisjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgImxpYnF0ZXN0LmgiCisjaW5j bHVkZSAibGlicW9zL3ZpcnRpby5oIgorI2luY2x1ZGUgImxpYnFvcy92aXJ0aW8tcGNpLmgi CisjaW5jbHVkZSAibGlicW9zL3ZpcnRpby1tbWlvLmgiCisjaW5jbHVkZSAibGlicW9zL3Bj aS1wYy5oIgorI2luY2x1ZGUgImxpYnFvcy9tYWxsb2MuaCIKKyNpbmNsdWRlICJsaWJxb3Mv bWFsbG9jLXBjLmgiCisjaW5jbHVkZSAibGlicW9zL21hbGxvYy1nZW5lcmljLmgiCisjaW5j bHVkZSAicWVtdS9ic3dhcC5oIgorI2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGludXgv dmlydGlvX2lkcy5oIgorI2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlv X2NvbmZpZy5oIgorI2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX3Jp bmcuaCIKKyNpbmNsdWRlICJzdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19jcnlwdG8u aCIKKyNpbmNsdWRlICJzdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19wY2kuaCIKKwor I2RlZmluZSBRVklSVElPX0NSWVBUT19USU1FT1VUX1VTICAoMzAgKiAxMDAwICogMTAwMCkK KworI2RlZmluZSBQQ0lfU0xPVF9IUCAgICAgICAgICAgICAweDA2CisjZGVmaW5lIFBDSV9T TE9UICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgUENJX0ZOICAgICAgICAgICAgICAg ICAgMHgwMAorCisvKgorICogVmlydElPQ3J5cHRvQ2lwaGVyVGVzdERhdGE6ICBzdHJ1Y3R1 cmUgdG8gZGVzY3JpYmUgYSBjaXBoZXIgdGVzdAorICogQGtleTogICAgQSBwb2ludGVyIHRv IGEga2V5IHVzZWQgYnkgdGhlIHRlc3QKKyAqIEBrZXlfbGVuOiAgICBUaGUgbGVuZ3RoIG9m IEBrZXkKKyAqIEBpdjogICAgIEEgcG9pbnRlciB0byB0aGUgSVYvQ291bnRlciB1c2VkIGJ5 IHRoZSB0ZXN0CisgKiBAaXZfbGVuOiBUaGUgbGVuZ3RoIG9mIEBpdgorICogQGlucHV0OiAg QSBwb2ludGVyIHRvIGRhdGEgdXNlZCBhcyBpbnB1dAorICogQGlsZW4gICAgVGhlIGxlbmd0 aCBvZiBkYXRhIGluIEBpbnB1dAorICogQG91dHB1dDogQSBwb2ludGVyIHRvIHdoYXQgdGhl IHRlc3QgbmVlZCB0byBwcm9kdWNlCisgKiBAb2xlbjogICBUaGUgbGVuZ3RoIG9mIGRhdGEg aW4gQG91dHB1dAorICogQGFsZ286ICAgVGhlIHR5cGUgb2YgYWxnb3JpdGhtLCByZWZlciB0 byBWSVJUSU9fQ1JZUFRPX0NJUEhFUl9BRVNfKgorICovCit0eXBlZGVmIHN0cnVjdCBWaXJ0 SU9DcnlwdG9DaXBoZXJUZXN0RGF0YSB7CisgICAgY29uc3QgY2hhciAqcGF0aDsKKyAgICB1 bnNpZ25lZCBzaG9ydCBhbGdvOworICAgIGNvbnN0IGNoYXIgKmtleTsKKyAgICBjb25zdCBj aGFyICppdjsKKyAgICBjb25zdCBjaGFyICppbnB1dDsKKyAgICBjb25zdCBjaGFyICpvdXRw dXQ7CisgICAgdW5zaWduZWQgY2hhciBrZXlfbGVuOworICAgIHVuc2lnbmVkIGNoYXIgaXZf bGVuOworICAgIHVuc2lnbmVkIHNob3J0IGlsZW47CisgICAgdW5zaWduZWQgc2hvcnQgb2xl bjsKKyAgICBib29sIGlzX3N0YXRlbHNzX21vZGU7Cit9IFZpcnRJT0NyeXB0b0NpcGhlclRl c3REYXRhOworCisKK3N0YXRpYyBWaXJ0SU9DcnlwdG9DaXBoZXJUZXN0RGF0YSBjaXBoZXJf dGVzdF9kYXRhW10gPSB7CisgICAgeyAvKiBGcm9tIFJGQyAzNjAyICovCisgICAgICAgIC5w YXRoID0gIi92aXJ0aW8vY3J5cHRvL2NiYyhhZXMtMTI4LXNlc3Npb24tbW9kZSkiLAorICAg ICAgICAuYWxnbyA9IFZJUlRJT19DUllQVE9fQ0lQSEVSX0FFU19DQkMsCisgICAgICAgIC5r ZXkgID0gIlx4MDZceGE5XHgyMVx4NDBceDM2XHhiOFx4YTFceDViIgorICAgICAgICAgICAg ICAgICJceDUxXHgyZVx4MDNceGQ1XHgzNFx4MTJceDAwXHgwNiIsCisgICAgICAgIC5rZXlf bGVuICAgPSAxNiwKKyAgICAgICAgLml2ID0gIlx4M2RceGFmXHhiYVx4NDJceDlkXHg5ZVx4 YjRceDMwIgorICAgICAgICAgICAgICAiXHhiNFx4MjJceGRhXHg4MFx4MmNceDlmXHhhY1x4 NDEiLAorICAgICAgICAuaXZfbGVuID0gMTYsCisgICAgICAgIC5pbnB1dCAgPSAiU2luZ2xl IGJsb2NrIG1zZyIsCisgICAgICAgIC5pbGVuICAgPSAxNiwKKyAgICAgICAgLm91dHB1dCA9 ICJceGUzXHg1M1x4NzdceDljXHgxMFx4NzlceGFlXHhiOCIKKyAgICAgICAgICAgICAgICAg ICJceDI3XHgwOFx4OTRceDJkXHhiZVx4NzdceDE4XHgxYSIsCisgICAgICAgIC5vbGVuICAg PSAxNiwKKyAgICAgICAgLmlzX3N0YXRlbHNzX21vZGUgPSBmYWxzZSwKKyAgICB9LAorICAg IHsgLyogRnJvbSBSRkMgMzYwMiAqLworICAgICAgICAucGF0aCA9ICIvdmlydGlvL2NyeXB0 by9jYmMoYWVzLTEyOC1zdGF0ZWxlc3MtbW9kZSkiLAorICAgICAgICAuYWxnbyA9IFZJUlRJ T19DUllQVE9fQ0lQSEVSX0FFU19DQkMsCisgICAgICAgIC5rZXkgID0gIlx4MDZceGE5XHgy MVx4NDBceDM2XHhiOFx4YTFceDViIgorICAgICAgICAgICAgICAgICJceDUxXHgyZVx4MDNc eGQ1XHgzNFx4MTJceDAwXHgwNiIsCisgICAgICAgIC5rZXlfbGVuICAgPSAxNiwKKyAgICAg ICAgLml2ID0gIlx4M2RceGFmXHhiYVx4NDJceDlkXHg5ZVx4YjRceDMwIgorICAgICAgICAg ICAgICAiXHhiNFx4MjJceGRhXHg4MFx4MmNceDlmXHhhY1x4NDEiLAorICAgICAgICAuaXZf bGVuID0gMTYsCisgICAgICAgIC5pbnB1dCAgPSAiU2luZ2xlIGJsb2NrIG1zZyIsCisgICAg ICAgIC5pbGVuICAgPSAxNiwKKyAgICAgICAgLm91dHB1dCA9ICJceGUzXHg1M1x4NzdceDlj XHgxMFx4NzlceGFlXHhiOCIKKyAgICAgICAgICAgICAgICAgICJceDI3XHgwOFx4OTRceDJk XHhiZVx4NzdceDE4XHgxYSIsCisgICAgICAgIC5vbGVuICAgPSAxNiwKKyAgICAgICAgLmlz X3N0YXRlbHNzX21vZGUgPSB0cnVlLAorICAgIH0sCit9OworCitzdGF0aWMgUVBDSUJ1cyAq dmlydGlvX2NyeXB0b190ZXN0X3N0YXJ0KHZvaWQpCit7CisgICAgY2hhciAqY21kbGluZTsK KworICAgIGNtZGxpbmUgPSBnX3N0cmR1cF9wcmludGYoCisgICAgICAgICAgICAgICAiLW9i amVjdCBjcnlwdG9kZXYtYmFja2VuZC1idWlsdGluLGlkPWNyeXB0b2RldjAgIgorICAgICAg ICAgICAgICAgIi1kZXZpY2UgdmlydGlvLWNyeXB0by1wY2ksaWQ9Y3J5cHRvMCwiCisgICAg ICAgICAgICAgICAiY3J5cHRvZGV2PWNyeXB0b2RldjAiKTsKKworICAgIHF0ZXN0X3N0YXJ0 KGNtZGxpbmUpOworICAgIGdfZnJlZShjbWRsaW5lKTsKKworICAgIHJldHVybiBxcGNpX2lu aXRfcGMoTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZW5kKHZvaWQpCit7CisgICAg cXRlc3RfZW5kKCk7Cit9CisKK3N0YXRpYyBRVmlydGlvUENJRGV2aWNlICp2aXJ0aW9fY3J5 cHRvX3BjaV9pbml0KFFQQ0lCdXMgKmJ1cywgaW50IHNsb3QpCit7CisgICAgUVZpcnRpb1BD SURldmljZSAqZGV2OworCisgICAgZGV2ID0gcXZpcnRpb19wY2lfZGV2aWNlX2ZpbmQoYnVz LCBWSVJUSU9fSURfQ1JZUFRPKTsKKyAgICBnX2Fzc2VydChkZXYgIT0gTlVMTCk7CisgICAg Z19hc3NlcnRfY21waGV4KGRldi0+dmRldi5kZXZpY2VfdHlwZSwgPT0sIFZJUlRJT19JRF9D UllQVE8pOworCisgICAgcXZpcnRpb19wY2lfZGV2aWNlX2VuYWJsZShkZXYpOworICAgIHF2 aXJ0aW9fcmVzZXQoJmRldi0+dmRldik7CisgICAgcXZpcnRpb19zZXRfYWNrbm93bGVkZ2Uo JmRldi0+dmRldik7CisgICAgcXZpcnRpb19zZXRfZHJpdmVyKCZkZXYtPnZkZXYpOworCisg ICAgcmV0dXJuIGRldjsKK30KKworc3RhdGljIHVpbnQ2NF90Cit2aXJ0aW9fY3J5cHRvX2N0 cmxfcmVxdWVzdChRR3Vlc3RBbGxvY2F0b3IgKmFsbG9jLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHZpcnRpb19jcnlwdG9fb3BfY3RybF9yZXEgKnJlcSkKK3sKKyAg ICB1aW50NjRfdCBhZGRyOworCisgICAgYWRkciA9IGd1ZXN0X2FsbG9jKGFsbG9jLCBzaXpl b2YoKnJlcSkpOworCisgICAgbWVtd3JpdGUoYWRkciwgcmVxLCBzaXplb2YoKnJlcSkpOwor CisgICAgcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyB1aW50NjRfdAordmlydGlvX2NyeXB0 b19kYXRhX3JlcXVlc3QoUUd1ZXN0QWxsb2NhdG9yICphbGxvYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB2aXJ0aW9fY3J5cHRvX29wX2RhdGFfcmVxICpyZXEpCit7 CisgICAgdWludDY0X3QgYWRkcjsKKworICAgIGFkZHIgPSBndWVzdF9hbGxvYyhhbGxvYywg c2l6ZW9mKCpyZXEpKTsKKworICAgIG1lbXdyaXRlKGFkZHIsIHJlcSwgc2l6ZW9mKCpyZXEp KTsKKworICAgIHJldHVybiBhZGRyOworfQorCitzdGF0aWMgdm9pZAordmlydGlvX2NyeXB0 b19kcml2ZXJfaW5pdChRVmlydGlvRGV2aWNlICpkZXYpCit7CisgICAgLyogUmVhZCBjb25m aWd1cmUgc3BhY2UgdG8gZ2V0ICBzdXBwb3J0ZWQgY3J5cHRvIHNlcnZpY2VzICovCisKKyAg ICBxdmlydGlvX3NldF9kcml2ZXJfb2soZGV2KTsKK30KKworc3RhdGljIHVpbnQ2NF90Cit2 aXJ0aW9fY3J5cHRvX2NyZWF0ZV9zZXNzaW9uKFFWaXJ0aW9EZXZpY2UgKmRldiwKKyAgICAg ICAgICAgIFFHdWVzdEFsbG9jYXRvciAqYWxsb2MsIFFWaXJ0UXVldWUgKnZxLAorICAgICAg ICAgICAgVmlydElPQ3J5cHRvQ2lwaGVyVGVzdERhdGEgKmRhdGEsCisgICAgICAgICAgICBp bnQgZW5jcnlwdCkKK3sKKyAgICB1aW50MzJfdCBmcmVlX2hlYWQ7CisgICAgc3RydWN0IHZp cnRpb19jcnlwdG9fb3BfY3RybF9yZXEgY3RybDsKKyAgICBzdHJ1Y3QgdmlydGlvX2NyeXB0 b19zZXNzaW9uX2lucHV0IGlucHV0OworICAgIHVpbnQzMl90IGtleV9sZW4gPSBkYXRhLT5r ZXlfbGVuOworICAgIHVpbnQ2NF90IHJlcV9hZGRyOworICAgIHVpbnQ2NF90IGtleV9hZGRy LCBpbnB1dF9hZGRyOyAvKiBjaXBoZXIga2V5IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgKi8K KyAgICB1aW50NjRfdCBzZXNzaW9uX2lkOworICAgIFFWUmluZ0luZGlyZWN0RGVzYyAqaW5k aXJlY3Q7CisKKyAgICAvKiBDcmVhdGUgYW4gZW5jcnlwdGlvbiBzZXNzaW9uICovCisgICAg Y3RybC5oZWFkZXIub3Bjb2RlID0gVklSVElPX0NSWVBUT19DSVBIRVJfQ1JFQVRFX1NFU1NJ T047CisgICAgY3RybC5oZWFkZXIuYWxnbyA9IGRhdGEtPmFsZ287CisgICAgLyogU2V0IHRo ZSBkZWZhdWx0IGRhdGFxdWV1ZSBpZCB0byAwICovCisgICAgY3RybC5oZWFkZXIucXVldWVf aWQgPSAwOworCisgICAgLyogUGFkIGNpcGhlcidzIHBhcmFtZXRlcnMgKi8KKyAgICBjdHJs LnUuc3ltX2NyZWF0ZV9zZXNzaW9uLm9wX3R5cGUgPSBWSVJUSU9fQ1JZUFRPX1NZTV9PUF9D SVBIRVI7CisgICAgY3RybC51LnN5bV9jcmVhdGVfc2Vzc2lvbi51LmNpcGhlci5wYXJhLmFs Z28gPSBjdHJsLmhlYWRlci5hbGdvOworICAgIGN0cmwudS5zeW1fY3JlYXRlX3Nlc3Npb24u dS5jaXBoZXIucGFyYS5rZXlsZW4gPSBrZXlfbGVuOworICAgIGlmIChlbmNyeXB0KSB7Cisg ICAgICAgIGN0cmwudS5zeW1fY3JlYXRlX3Nlc3Npb24udS5jaXBoZXIucGFyYS5vcCA9IFZJ UlRJT19DUllQVE9fT1BfRU5DUllQVDsKKyAgICB9IGVsc2UgeworICAgICAgICBjdHJsLnUu c3ltX2NyZWF0ZV9zZXNzaW9uLnUuY2lwaGVyLnBhcmEub3AgPSBWSVJUSU9fQ1JZUFRPX09Q X0RFQ1JZUFQ7CisgICAgfQorCisgICAgcmVxX2FkZHIgPSB2aXJ0aW9fY3J5cHRvX2N0cmxf cmVxdWVzdChhbGxvYywgJmN0cmwpOworCisgICAgLyogUGFkIGNpcGhlcidzIG91dHB1dCBk YXRhICovCisgICAga2V5X2FkZHIgPSBndWVzdF9hbGxvYyhhbGxvYywga2V5X2xlbik7Cisg ICAgbWVtd3JpdGUoa2V5X2FkZHIsIGRhdGEtPmtleSwga2V5X2xlbik7CisKKyAgICBpbnB1 dC5zdGF0dXMgPSBWSVJUSU9fQ1JZUFRPX0VSUjsKKyAgICBpbnB1dF9hZGRyID0gZ3Vlc3Rf YWxsb2MoYWxsb2MsIHNpemVvZihpbnB1dCkpOworICAgIG1lbXdyaXRlKGlucHV0X2FkZHIs ICZpbnB1dCwgc2l6ZW9mKGlucHV0KSk7CisKKyAgICBpbmRpcmVjdCA9IHF2cmluZ19pbmRp cmVjdF9kZXNjX3NldHVwKGRldiwgYWxsb2MsIDMpOworICAgIHF2cmluZ19pbmRpcmVjdF9k ZXNjX2FkZChpbmRpcmVjdCwgcmVxX2FkZHIsIHNpemVvZihjdHJsKSwgZmFsc2UpOworICAg IHF2cmluZ19pbmRpcmVjdF9kZXNjX2FkZChpbmRpcmVjdCwga2V5X2FkZHIsIGtleV9sZW4s IGZhbHNlKTsKKyAgICBxdnJpbmdfaW5kaXJlY3RfZGVzY19hZGQoaW5kaXJlY3QsIGlucHV0 X2FkZHIsIHNpemVvZihpbnB1dCksIHRydWUpOworICAgIGZyZWVfaGVhZCA9IHF2aXJ0cXVl dWVfYWRkX2luZGlyZWN0KHZxLCBpbmRpcmVjdCk7CisKKyAgICBxdmlydHF1ZXVlX2tpY2so ZGV2LCB2cSwgZnJlZV9oZWFkKTsKKworICAgIHF2aXJ0aW9fd2FpdF9xdWV1ZV9pc3IoZGV2 LCB2cSwgUVZJUlRJT19DUllQVE9fVElNRU9VVF9VUyk7CisKKyAgICAvKiBjYWxjdWxhdGUg dGhlIG9mZnNldCBvZiBpbnB1dCBkYXRhICovCisKKyAgICBtZW1yZWFkKGlucHV0X2FkZHIs ICZpbnB1dCwgc2l6ZW9mKGlucHV0KSk7CisKKyAgICAvKiBWZXJpZnkgdGhlIHJlc3VsdCAq LworICAgIGdfYXNzZXJ0X2NtcGludChpbnB1dC5zdGF0dXMsID09LCBWSVJUSU9fQ1JZUFRP X09LKTsKKworICAgIHNlc3Npb25faWQgPSBpbnB1dC5zZXNzaW9uX2lkOworCisgICAgZ19m cmVlKGluZGlyZWN0KTsKKyAgICBndWVzdF9mcmVlKGFsbG9jLCBpbnB1dF9hZGRyKTsKKyAg ICBndWVzdF9mcmVlKGFsbG9jLCBrZXlfYWRkcik7CisgICAgZ3Vlc3RfZnJlZShhbGxvYywg cmVxX2FkZHIpOworCisgICAgcmV0dXJuIHNlc3Npb25faWQ7Cit9CisKK3N0YXRpYyB2b2lk Cit2aXJ0aW9fY3J5cHRvX2Nsb3NlX3Nlc3Npb24oUVZpcnRpb0RldmljZSAqZGV2LAorICAg ICAgICAgICAgUUd1ZXN0QWxsb2NhdG9yICphbGxvYywgUVZpcnRRdWV1ZSAqdnEsCisgICAg ICAgICAgICB1aW50NjRfdCBzZXNzaW9uX2lkKQoreworICAgIHVpbnQzMl90IGZyZWVfaGVh ZDsKKyAgICBzdHJ1Y3QgdmlydGlvX2NyeXB0b19vcF9jdHJsX3JlcSBjdHJsOworICAgIHVp bnQ2NF90IHJlcV9hZGRyLCBzdGF0dXNfYWRkcjsKKyAgICB1aW50OF90IHN0YXR1czsKKyAg ICBRVlJpbmdJbmRpcmVjdERlc2MgKmluZGlyZWN0OworCisgICAgLyogQ3JlYXRlIGFuIGVu Y3J5cHRpb24gc2Vzc2lvbiAqLworICAgIGN0cmwuaGVhZGVyLm9wY29kZSA9IFZJUlRJT19D UllQVE9fQ0lQSEVSX0RFU1RST1lfU0VTU0lPTjsKKyAgICAvKiBTZXQgdGhlIGRlZmF1bHQg ZGF0YXF1ZXVlIGlkIHRvIDAgKi8KKyAgICBjdHJsLmhlYWRlci5xdWV1ZV9pZCA9IDA7CisK KyAgICBjdHJsLnUuZGVzdHJveV9zZXNzaW9uLnNlc3Npb25faWQgPSBzZXNzaW9uX2lkOwor CisgICAgcmVxX2FkZHIgPSB2aXJ0aW9fY3J5cHRvX2N0cmxfcmVxdWVzdChhbGxvYywgJmN0 cmwpOworCisgICAgc3RhdHVzX2FkZHIgPSBndWVzdF9hbGxvYyhhbGxvYywgc2l6ZW9mKHN0 YXR1cykpOworICAgIHdyaXRlbChzdGF0dXNfYWRkciwgVklSVElPX0NSWVBUT19FUlIpOwor CisgICAgaW5kaXJlY3QgPSBxdnJpbmdfaW5kaXJlY3RfZGVzY19zZXR1cChkZXYsIGFsbG9j LCAyKTsKKyAgICBxdnJpbmdfaW5kaXJlY3RfZGVzY19hZGQoaW5kaXJlY3QsIHJlcV9hZGRy LCBzaXplb2YoY3RybCksIGZhbHNlKTsKKyAgICBxdnJpbmdfaW5kaXJlY3RfZGVzY19hZGQo aW5kaXJlY3QsIHN0YXR1c19hZGRyLCBzaXplb2Yoc3RhdHVzKSwgdHJ1ZSk7CisgICAgZnJl ZV9oZWFkID0gcXZpcnRxdWV1ZV9hZGRfaW5kaXJlY3QodnEsIGluZGlyZWN0KTsKKworICAg IHF2aXJ0cXVldWVfa2ljayhkZXYsIHZxLCBmcmVlX2hlYWQpOworCisgICAgcXZpcnRpb193 YWl0X3F1ZXVlX2lzcihkZXYsIHZxLCBRVklSVElPX0NSWVBUT19USU1FT1VUX1VTKTsKKwor ICAgIC8qIFZlcmlmeSB0aGUgcmVzdWx0ICovCisgICAgc3RhdHVzID0gcmVhZGwoc3RhdHVz X2FkZHIpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGF0dXMsID09LCBWSVJUSU9fQ1JZUFRP X09LKTsKKworICAgIGdfZnJlZShpbmRpcmVjdCk7CisgICAgZ3Vlc3RfZnJlZShhbGxvYywg cmVxX2FkZHIpOworICAgIGd1ZXN0X2ZyZWUoYWxsb2MsIHN0YXR1c19hZGRyKTsKK30KKwor CitzdGF0aWMgdm9pZAordmlydGlvX2NyeXB0b190ZXN0X2NpcGhlcl9zZXNzaW9uX21vZGUo UVZpcnRpb0RldmljZSAqZGV2LAorICAgICAgICAgICAgUUd1ZXN0QWxsb2NhdG9yICphbGxv YywgUVZpcnRRdWV1ZSAqY3RybHEsCisgICAgICAgICAgICBRVmlydFF1ZXVlICp2cSwgVmly dElPQ3J5cHRvQ2lwaGVyVGVzdERhdGEgKmRhdGEsCisgICAgICAgICAgICBpbnQgZW5jcnlw dCkKK3sKKyAgICB1aW50MzJfdCBmcmVlX2hlYWQ7CisgICAgc3RydWN0IHZpcnRpb19jcnlw dG9fb3BfZGF0YV9yZXEgcmVxOworICAgIHVpbnQ2NF90IHJlcV9hZGRyLCBzdGF0dXNfYWRk cjsKKyAgICB1aW50NjRfdCBpdl9hZGRyID0gMCwgc3JjX2FkZHIsIGRzdF9hZGRyOworICAg IHVpbnQ2NF90IHNlc3Npb25faWQ7CisgICAgY2hhciAqb3V0cHV0OworICAgIHVpbnQzMl90 IHNyY19sZW4sIGRzdF9sZW47CisgICAgdWludDhfdCBzdGF0dXM7CisgICAgUVZSaW5nSW5k aXJlY3REZXNjICppbmRpcmVjdDsKKyAgICB1aW50OF90IGVudHJ5X251bTsKKworICAgIC8q IENyZWF0ZSBhIHNlc3Npb24gKi8KKyAgICBzZXNzaW9uX2lkID0gdmlydGlvX2NyeXB0b19j cmVhdGVfc2Vzc2lvbihkZXYsIGFsbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY3RybHEsIGRhdGEsIGVuY3J5cHQpOworCisgICAgLyogSGVh ZCBvZiBvcGVyYXRpb24gKi8KKyAgICByZXEuaGVhZGVyLnNlc3Npb25faWQgPSBzZXNzaW9u X2lkOworICAgIGlmIChlbmNyeXB0KSB7CisgICAgICAgIHJlcS5oZWFkZXIub3Bjb2RlID0g VklSVElPX0NSWVBUT19DSVBIRVJfRU5DUllQVDsKKyAgICB9IGVsc2UgeworICAgICAgICBy ZXEuaGVhZGVyLm9wY29kZSA9IFZJUlRJT19DUllQVE9fQ0lQSEVSX0RFQ1JZUFQ7CisgICAg fQorCisgICAgcmVxLnUuc3ltX3JlcS5vcF90eXBlID0gVklSVElPX0NSWVBUT19TWU1fT1Bf Q0lQSEVSOworICAgIHJlcS51LnN5bV9yZXEudS5jaXBoZXIucGFyYS5pdl9sZW4gPSBkYXRh LT5pdl9sZW47CisgICAgcmVxLnUuc3ltX3JlcS51LmNpcGhlci5wYXJhLnNyY19kYXRhX2xl biA9IGRhdGEtPmlsZW47CisgICAgcmVxLnUuc3ltX3JlcS51LmNpcGhlci5wYXJhLmRzdF9k YXRhX2xlbiA9IGRhdGEtPm9sZW47CisKKyAgICByZXFfYWRkciA9IHZpcnRpb19jcnlwdG9f ZGF0YV9yZXF1ZXN0KGFsbG9jLCAmcmVxKTsKKworICAgIC8qIElWICovCisgICAgaWYgKGRh dGEtPml2X2xlbiA+IDApIHsKKyAgICAgICAgaXZfYWRkciA9IGd1ZXN0X2FsbG9jKGFsbG9j LCBkYXRhLT5pdl9sZW4pOworICAgICAgICBtZW13cml0ZShpdl9hZGRyLCBkYXRhLT5pdiwg ZGF0YS0+aXZfbGVuKTsKKworICAgICAgICAvKiBoZWFkZXIgKyBpdiArIHNyYyArIGRzdCAr IHN0YXR1cyAqLworICAgICAgICBlbnRyeV9udW0gPSA1OworICAgIH0gZWxzZSB7CisgICAg ICAgIC8qIGhlYWRlciArIHNyYyArIGRzdCArIHN0YXR1cyAqLworICAgICAgICBlbnRyeV9u dW0gPSA0OworICAgIH0KKworICAgIGlmIChlbmNyeXB0KSB7CisgICAgICAgIHNyY19sZW4g PSBkYXRhLT5pbGVuOworICAgICAgICBkc3RfbGVuID0gZGF0YS0+b2xlbjsKKyAgICAgICAg LyogU291cmNlIGRhdGEgaXMgdGhlIGlucHV0IGRhdGEgd2hpY2ggaXMgYSBzaW5nbGUgYnVm ZmVyICovCisgICAgICAgIHNyY19hZGRyID0gZ3Vlc3RfYWxsb2MoYWxsb2MsIHNyY19sZW4p OworICAgICAgICBtZW13cml0ZShzcmNfYWRkciwgZGF0YS0+aW5wdXQsIHNyY19sZW4pOwor ICAgIH0gZWxzZSB7CisgICAgICAgIHNyY19sZW4gPSBkYXRhLT5vbGVuOworICAgICAgICBk c3RfbGVuID0gZGF0YS0+aWxlbjsKKyAgICAgICAgLyogU291cmNlIGRhdGEgaXMgdGhlIG91 dHB1dCBkYXRhIHdoaWNoIGlzIGEgc2luZ2xlIGJ1ZmZlciAqLworICAgICAgICBzcmNfYWRk ciA9IGd1ZXN0X2FsbG9jKGFsbG9jLCBzcmNfbGVuKTsKKyAgICAgICAgbWVtd3JpdGUoc3Jj X2FkZHIsIGRhdGEtPm91dHB1dCwgc3JjX2xlbik7CisgICAgfQorCisgICAgZHN0X2FkZHIg PSBndWVzdF9hbGxvYyhhbGxvYywgZHN0X2xlbik7CisKKyAgICBzdGF0dXNfYWRkciA9IGd1 ZXN0X2FsbG9jKGFsbG9jLCBzaXplb2Yoc3RhdHVzKSk7CisgICAgd3JpdGVsKHN0YXR1c19h ZGRyLCBWSVJUSU9fQ1JZUFRPX0VSUik7CisKKyAgICAvKiBBbGxvY2F0ZSBkZXNjcmlwdG8g dGFibGUgZW50cmllcyAqLworICAgIGluZGlyZWN0ID0gcXZyaW5nX2luZGlyZWN0X2Rlc2Nf c2V0dXAoZGV2LCBhbGxvYywgZW50cnlfbnVtKTsKKyAgICBxdnJpbmdfaW5kaXJlY3RfZGVz Y19hZGQoaW5kaXJlY3QsIHJlcV9hZGRyLCBzaXplb2YocmVxKSwgZmFsc2UpOworICAgIGlm IChkYXRhLT5pdl9sZW4gPiAwKSB7CisgICAgICAgIHF2cmluZ19pbmRpcmVjdF9kZXNjX2Fk ZChpbmRpcmVjdCwgaXZfYWRkciwgZGF0YS0+aXZfbGVuLCBmYWxzZSk7CisgICAgfQorICAg IHF2cmluZ19pbmRpcmVjdF9kZXNjX2FkZChpbmRpcmVjdCwgc3JjX2FkZHIsIHNyY19sZW4s IGZhbHNlKTsKKyAgICBxdnJpbmdfaW5kaXJlY3RfZGVzY19hZGQoaW5kaXJlY3QsIGRzdF9h ZGRyLCBkc3RfbGVuLCB0cnVlKTsKKyAgICBxdnJpbmdfaW5kaXJlY3RfZGVzY19hZGQoaW5k aXJlY3QsIHN0YXR1c19hZGRyLCBzaXplb2Yoc3RhdHVzKSwgdHJ1ZSk7CisgICAgZnJlZV9o ZWFkID0gcXZpcnRxdWV1ZV9hZGRfaW5kaXJlY3QodnEsIGluZGlyZWN0KTsKKworICAgIHF2 aXJ0cXVldWVfa2ljayhkZXYsIHZxLCBmcmVlX2hlYWQpOworCisgICAgcXZpcnRpb193YWl0 X3F1ZXVlX2lzcihkZXYsIHZxLCBRVklSVElPX0NSWVBUT19USU1FT1VUX1VTKTsKKworICAg IC8qIFZlcmlmeSB0aGUgcmVzdWx0ICovCisgICAgc3RhdHVzID0gcmVhZGwoc3RhdHVzX2Fk ZHIpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGF0dXMsID09LCBWSVJUSU9fQ1JZUFRPX09L KTsKKworICAgIG91dHB1dCA9IGdfbWFsbG9jMChkc3RfbGVuKTsKKyAgICBtZW1yZWFkKGRz dF9hZGRyLCBvdXRwdXQsIGRzdF9sZW4pOworICAgIGlmIChlbmNyeXB0KSB7CisgICAgICAg IGdfYXNzZXJ0X2NtcHN0cihvdXRwdXQsID09LCBkYXRhLT5vdXRwdXQpOworICAgIH0gZWxz ZSB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihvdXRwdXQsID09LCBkYXRhLT5pbnB1dCk7 CisgICAgfQorICAgIGdfZnJlZShvdXRwdXQpOworCisgICAgZ19mcmVlKGluZGlyZWN0KTsK KworICAgIGlmIChkYXRhLT5pdl9sZW4gPiAwKSB7CisgICAgICAgIGd1ZXN0X2ZyZWUoYWxs b2MsIGl2X2FkZHIpOworICAgIH0KKyAgICBndWVzdF9mcmVlKGFsbG9jLCBzcmNfYWRkcik7 CisgICAgZ3Vlc3RfZnJlZShhbGxvYywgZHN0X2FkZHIpOworICAgIGd1ZXN0X2ZyZWUoYWxs b2MsIHJlcV9hZGRyKTsKKyAgICBndWVzdF9mcmVlKGFsbG9jLCBzdGF0dXNfYWRkcik7CisK KyAgICAvKiBDbG9zZSB0aGUgc2Vzc2lvbiAqLworICAgIHZpcnRpb19jcnlwdG9fY2xvc2Vf c2Vzc2lvbihkZXYsIGFsbG9jLCBjdHJscSwgc2Vzc2lvbl9pZCk7Cit9CisKK3N0YXRpYyB2 b2lkCit2aXJ0aW9fY3J5cHRvX3Rlc3RfY2lwaGVyX3N0YXRlbGVzc19tb2RlKFFWaXJ0aW9E ZXZpY2UgKmRldiwKKyAgICAgICAgICAgIFFHdWVzdEFsbG9jYXRvciAqYWxsb2MsCisgICAg ICAgICAgICBRVmlydFF1ZXVlICp2cSwgVmlydElPQ3J5cHRvQ2lwaGVyVGVzdERhdGEgKmRh dGEsCisgICAgICAgICAgICBpbnQgZW5jcnlwdCkKK3sKKyAgICB1aW50MzJfdCBmcmVlX2hl YWQ7CisgICAgc3RydWN0IHZpcnRpb19jcnlwdG9fb3BfZGF0YV9yZXFfbXV4IHJlcTsKKyAg ICBzdHJ1Y3QgdmlydGlvX2NyeXB0b19zeW1fZGF0YV9yZXFfc3RhdGVsZXNzIHBhcmE7Cisg ICAgdWludDY0X3QgcmVxX2FkZHIsIHBhcmFfYWRkciwgc3RhdHVzX2FkZHI7CisgICAgdWlu dDY0X3QgaXZfYWRkciA9IDAsIHNyY19hZGRyLCBkc3RfYWRkciwga2V5X2FkZHI7CisgICAg Y2hhciAqb3V0cHV0OworICAgIHVpbnQzMl90IHNyY19sZW4sIGRzdF9sZW47CisgICAgdWlu dDhfdCBzdGF0dXM7CisgICAgUVZSaW5nSW5kaXJlY3REZXNjICppbmRpcmVjdDsKKyAgICB1 aW50OF90IGVudHJ5X251bTsKKworICAgIC8qIEhlYWQgb2Ygb3BlcmF0aW9uICovCisgICAg cmVxLmhlYWRlci5mbGFnID0gMDsKKyAgICBpZiAoZW5jcnlwdCkgeworICAgICAgICByZXEu aGVhZGVyLm9wY29kZSA9IFZJUlRJT19DUllQVE9fQ0lQSEVSX0VOQ1JZUFQ7CisgICAgICAg IHBhcmEudS5jaXBoZXIucGFyYS5zZXNzX3BhcmEub3AgPSBWSVJUSU9fQ1JZUFRPX09QX0VO Q1JZUFQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVxLmhlYWRlci5vcGNvZGUgPSBWSVJU SU9fQ1JZUFRPX0NJUEhFUl9ERUNSWVBUOworICAgICAgICBwYXJhLnUuY2lwaGVyLnBhcmEu c2Vzc19wYXJhLm9wID0gVklSVElPX0NSWVBUT19PUF9ERUNSWVBUOworICAgIH0KKworICAg IHBhcmEub3BfdHlwZSA9IFZJUlRJT19DUllQVE9fU1lNX09QX0NJUEhFUjsKKyAgICBwYXJh LnUuY2lwaGVyLnBhcmEuc2Vzc19wYXJhLmFsZ28gPSBkYXRhLT5hbGdvOworICAgIHBhcmEu dS5jaXBoZXIucGFyYS5zZXNzX3BhcmEua2V5bGVuID0gZGF0YS0+a2V5X2xlbjsKKyAgICBw YXJhLnUuY2lwaGVyLnBhcmEuaXZfbGVuID0gZGF0YS0+aXZfbGVuOworICAgIHBhcmEudS5j aXBoZXIucGFyYS5zcmNfZGF0YV9sZW4gPSBkYXRhLT5pbGVuOworICAgIHBhcmEudS5jaXBo ZXIucGFyYS5kc3RfZGF0YV9sZW4gPSBkYXRhLT5vbGVuOworCisgICAgcmVxX2FkZHIgPSBn dWVzdF9hbGxvYyhhbGxvYywgc2l6ZW9mKHJlcSkpOworICAgIG1lbXdyaXRlKHJlcV9hZGRy LCAmcmVxLCBzaXplb2YocmVxKSk7CisKKyAgICBwYXJhX2FkZHIgPSBndWVzdF9hbGxvYyhh bGxvYywgc2l6ZW9mKHBhcmEpKTsKKyAgICBtZW13cml0ZShwYXJhX2FkZHIsICZwYXJhLCBz aXplb2YocGFyYSkpOworCisgICAgZ19hc3NlcnQoZGF0YS0+a2V5X2xlbiA+IDApOworICAg IGtleV9hZGRyID0gZ3Vlc3RfYWxsb2MoYWxsb2MsIGRhdGEtPmtleV9sZW4pOworICAgIG1l bXdyaXRlKGtleV9hZGRyLCBkYXRhLT5rZXksIGRhdGEtPmtleV9sZW4pOworCisgICAgLyog SVYgKi8KKyAgICBpZiAoZGF0YS0+aXZfbGVuID4gMCkgeworICAgICAgICBpdl9hZGRyID0g Z3Vlc3RfYWxsb2MoYWxsb2MsIGRhdGEtPml2X2xlbik7CisgICAgICAgIG1lbXdyaXRlKGl2 X2FkZHIsIGRhdGEtPml2LCBkYXRhLT5pdl9sZW4pOworCisgICAgICAgIC8qIGhlYWRlciAr IGtleSArIGl2ICsgc3JjICsgZHN0ICsgc3RhdHVzICovCisgICAgICAgIGVudHJ5X251bSA9 IDc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogaGVhZGVyICsga2V5ICsgc3JjICsgZHN0 ICsgc3RhdHVzICovCisgICAgICAgIGVudHJ5X251bSA9IDY7CisgICAgfQorCisgICAgaWYg KGVuY3J5cHQpIHsKKyAgICAgICAgc3JjX2xlbiA9IGRhdGEtPmlsZW47CisgICAgICAgIGRz dF9sZW4gPSBkYXRhLT5vbGVuOworICAgICAgICAvKiBTb3VyY2UgZGF0YSBpcyB0aGUgaW5w dXQgZGF0YSB3aGljaCBpcyBhIHNpbmdsZSBidWZmZXIgKi8KKyAgICAgICAgc3JjX2FkZHIg PSBndWVzdF9hbGxvYyhhbGxvYywgc3JjX2xlbik7CisgICAgICAgIG1lbXdyaXRlKHNyY19h ZGRyLCBkYXRhLT5pbnB1dCwgc3JjX2xlbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3Jj X2xlbiA9IGRhdGEtPm9sZW47CisgICAgICAgIGRzdF9sZW4gPSBkYXRhLT5pbGVuOworICAg ICAgICAvKiBTb3VyY2UgZGF0YSBpcyB0aGUgb3V0cHV0IGRhdGEgd2hpY2ggaXMgYSBzaW5n bGUgYnVmZmVyICovCisgICAgICAgIHNyY19hZGRyID0gZ3Vlc3RfYWxsb2MoYWxsb2MsIHNy Y19sZW4pOworICAgICAgICBtZW13cml0ZShzcmNfYWRkciwgZGF0YS0+b3V0cHV0LCBzcmNf bGVuKTsKKyAgICB9CisKKyAgICBkc3RfYWRkciA9IGd1ZXN0X2FsbG9jKGFsbG9jLCBkc3Rf bGVuKTsKKworICAgIHN0YXR1c19hZGRyID0gZ3Vlc3RfYWxsb2MoYWxsb2MsIHNpemVvZihz dGF0dXMpKTsKKyAgICB3cml0ZWwoc3RhdHVzX2FkZHIsIFZJUlRJT19DUllQVE9fRVJSKTsK KworICAgIC8qIEFsbG9jYXRlIGRlc2MgdGFibGUgZW50cmllcyAqLworICAgIGluZGlyZWN0 ID0gcXZyaW5nX2luZGlyZWN0X2Rlc2Nfc2V0dXAoZGV2LCBhbGxvYywgZW50cnlfbnVtKTsK KyAgICBxdnJpbmdfaW5kaXJlY3RfZGVzY19hZGQoaW5kaXJlY3QsIHJlcV9hZGRyLCBzaXpl b2YocmVxKSwgZmFsc2UpOworICAgIHF2cmluZ19pbmRpcmVjdF9kZXNjX2FkZChpbmRpcmVj dCwgcGFyYV9hZGRyLCBzaXplb2YocGFyYSksIGZhbHNlKTsKKyAgICBxdnJpbmdfaW5kaXJl Y3RfZGVzY19hZGQoaW5kaXJlY3QsIGtleV9hZGRyLCBkYXRhLT5rZXlfbGVuLCBmYWxzZSk7 CisgICAgaWYgKGRhdGEtPml2X2xlbiA+IDApIHsKKyAgICAgICAgcXZyaW5nX2luZGlyZWN0 X2Rlc2NfYWRkKGluZGlyZWN0LCBpdl9hZGRyLCBkYXRhLT5pdl9sZW4sIGZhbHNlKTsKKyAg ICB9CisgICAgcXZyaW5nX2luZGlyZWN0X2Rlc2NfYWRkKGluZGlyZWN0LCBzcmNfYWRkciwg c3JjX2xlbiwgZmFsc2UpOworICAgIHF2cmluZ19pbmRpcmVjdF9kZXNjX2FkZChpbmRpcmVj dCwgZHN0X2FkZHIsIGRzdF9sZW4sIHRydWUpOworICAgIHF2cmluZ19pbmRpcmVjdF9kZXNj X2FkZChpbmRpcmVjdCwgc3RhdHVzX2FkZHIsIHNpemVvZihzdGF0dXMpLCB0cnVlKTsKKyAg ICBmcmVlX2hlYWQgPSBxdmlydHF1ZXVlX2FkZF9pbmRpcmVjdCh2cSwgaW5kaXJlY3QpOwor CisgICAgcXZpcnRxdWV1ZV9raWNrKGRldiwgdnEsIGZyZWVfaGVhZCk7CisKKyAgICBxdmly dGlvX3dhaXRfcXVldWVfaXNyKGRldiwgdnEsIFFWSVJUSU9fQ1JZUFRPX1RJTUVPVVRfVVMp OworCisgICAgLyogVmVyaWZ5IHRoZSByZXN1bHQgKi8KKyAgICBzdGF0dXMgPSByZWFkbChz dGF0dXNfYWRkcik7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXR1cywgPT0sIFZJUlRJT19D UllQVE9fT0spOworCisgICAgb3V0cHV0ID0gZ19tYWxsb2MwKGRzdF9sZW4pOworICAgIG1l bXJlYWQoZHN0X2FkZHIsIG91dHB1dCwgZHN0X2xlbik7CisgICAgaWYgKGVuY3J5cHQpIHsK KyAgICAgICAgZ19hc3NlcnRfY21wc3RyKG91dHB1dCwgPT0sIGRhdGEtPm91dHB1dCk7Cisg ICAgfSBlbHNlIHsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKG91dHB1dCwgPT0sIGRhdGEt PmlucHV0KTsKKyAgICB9CisgICAgZ19mcmVlKG91dHB1dCk7CisKKyAgICBnX2ZyZWUoaW5k aXJlY3QpOworICAgIGd1ZXN0X2ZyZWUoYWxsb2MsIGtleV9hZGRyKTsKKyAgICBpZiAoZGF0 YS0+aXZfbGVuID4gMCkgeworICAgICAgICBndWVzdF9mcmVlKGFsbG9jLCBpdl9hZGRyKTsK KyAgICB9CisgICAgZ3Vlc3RfZnJlZShhbGxvYywgc3JjX2FkZHIpOworICAgIGd1ZXN0X2Zy ZWUoYWxsb2MsIGRzdF9hZGRyKTsKKyAgICBndWVzdF9mcmVlKGFsbG9jLCBwYXJhX2FkZHIp OworICAgIGd1ZXN0X2ZyZWUoYWxsb2MsIHJlcV9hZGRyKTsKKyAgICBndWVzdF9mcmVlKGFs bG9jLCBzdGF0dXNfYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkCit2aXJ0aW9fY3J5cHRvX3Rl c3RfY2lwaGVyKFFWaXJ0aW9EZXZpY2UgKmRldiwKKyAgICAgICAgICAgIFFHdWVzdEFsbG9j YXRvciAqYWxsb2MsIFFWaXJ0UXVldWUgKmN0cmxxLAorICAgICAgICAgICAgUVZpcnRRdWV1 ZSAqZGF0YXEsIFZpcnRJT0NyeXB0b0NpcGhlclRlc3REYXRhICpkYXRhLAorICAgICAgICAg ICAgaW50IGVuY3J5cHQpCit7CisgICAgaWYgKCFkYXRhLT5pc19zdGF0ZWxzc19tb2RlKSB7 CisgICAgICAgIHZpcnRpb19jcnlwdG9fdGVzdF9jaXBoZXJfc2Vzc2lvbl9tb2RlKGRldiwg YWxsb2MsCisgICAgICAgICAgICBjdHJscSwgZGF0YXEsIGRhdGEsIGVuY3J5cHQpOworICAg IH0gZWxzZSB7CisgICAgICAgIHZpcnRpb19jcnlwdG9fdGVzdF9jaXBoZXJfc3RhdGVsZXNz X21vZGUoZGV2LCBhbGxvYywKKyAgICAgICAgICAgIGRhdGFxLCBkYXRhLCBlbmNyeXB0KTsK KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRpb19jcnlwdG9fcGNpX2Jhc2ljKHZvaWQg Km9wYXF1ZSkKK3sKKyAgICBWaXJ0SU9DcnlwdG9DaXBoZXJUZXN0RGF0YSAqdGVzdF9kYXRh ID0gb3BhcXVlOworICAgIFFWaXJ0aW9QQ0lEZXZpY2UgKmRldjsKKyAgICBRUENJQnVzICpi dXM7CisgICAgUUd1ZXN0QWxsb2NhdG9yICphbGxvYzsKKyAgICBRVmlydFF1ZXVlUENJICpk YXRhcSwgKmNvbnRyb2xxOworICAgIHVpbnQzMl90IGZlYXR1cmVzOworCisgICAgYnVzID0g dmlydGlvX2NyeXB0b190ZXN0X3N0YXJ0KCk7CisgICAgZGV2ID0gdmlydGlvX2NyeXB0b19w Y2lfaW5pdChidXMsIFBDSV9TTE9UKTsKKworICAgIGFsbG9jID0gcGNfYWxsb2NfaW5pdCgp OworCisgICAgZmVhdHVyZXMgPSBxdmlydGlvX2dldF9mZWF0dXJlcygmZGV2LT52ZGV2KTsK KyAgICBnX2Fzc2VydF9jbXBoZXgoZmVhdHVyZXMgJiAoMXUgPDwgVklSVElPX1JJTkdfRl9J TkRJUkVDVF9ERVNDKSwgIT0sIDApOworCisgICAgaWYgKCF0ZXN0X2RhdGEtPmlzX3N0YXRl bHNzX21vZGUpIHsKKyAgICAgICAgZmVhdHVyZXMgPSBmZWF0dXJlcyAmIH4oUVZJUlRJT19G X0JBRF9GRUFUVVJFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDF1IDw8 IFZJUlRJT19SSU5HX0ZfRVZFTlRfSURYIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMXUgPDwgVklSVElPX0NSWVBUT19GX01VWF9NT0RFIHwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMXUgPDwgVklSVElPX0NSWVBUT19GX0NJUEhFUl9TVEFURUxF U1NfTU9ERSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZlYXR1cmVzID0gZmVhdHVyZXMg JiB+KFFWSVJUSU9fRl9CQURfRkVBVFVSRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgxdSA8PCBWSVJUSU9fUklOR19GX0VWRU5UX0lEWCkpOworICAgIH0KKyAgICBx dmlydGlvX3NldF9mZWF0dXJlcygmZGV2LT52ZGV2LCBmZWF0dXJlcyk7CisKKyAgICBkYXRh cSA9IChRVmlydFF1ZXVlUENJICopcXZpcnRxdWV1ZV9zZXR1cCgmZGV2LT52ZGV2LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jLCAwKTsKKyAg ICBjb250cm9scSA9IChRVmlydFF1ZXVlUENJICopcXZpcnRxdWV1ZV9zZXR1cCgmZGV2LT52 ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9j LCAxKTsKKworICAgIHZpcnRpb19jcnlwdG9fZHJpdmVyX2luaXQoJmRldi0+dmRldik7CisK KyAgICAvKiBTdGVwIDE6IEVuY3J5cHRpb24gKi8KKyAgICB2aXJ0aW9fY3J5cHRvX3Rlc3Rf Y2lwaGVyKCZkZXYtPnZkZXYsIGFsbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmNvbnRyb2xxLT52cSwgJmRhdGFxLT52cSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRlc3RfZGF0YSwgMSk7CisgICAgLyogU3RlcCAyOiBEZWNyeXB0aW9uICovCisg ICAgdmlydGlvX2NyeXB0b190ZXN0X2NpcGhlcigmZGV2LT52ZGV2LCBhbGxvYywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZjb250cm9scS0+dnEsICZkYXRhcS0+dnEsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2RhdGEsIDApOworCisgICAgLyog RW5kIHRlc3QgKi8KKyAgICBndWVzdF9mcmVlKGFsbG9jLCBkYXRhcS0+dnEuZGVzYyk7Cisg ICAgZ3Vlc3RfZnJlZShhbGxvYywgY29udHJvbHEtPnZxLmRlc2MpOworICAgIHBjX2FsbG9j X3VuaW5pdChhbGxvYyk7CisgICAgcXZpcnRpb19wY2lfZGV2aWNlX2Rpc2FibGUoZGV2KTsK KyAgICBnX2ZyZWUoZGV2KTsKKyAgICBxcGNpX2ZyZWVfcGMoYnVzKTsKKyAgICB0ZXN0X2Vu ZCgpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgY29u c3QgY2hhciAqcWVtdTsKKyAgICBjb25zdCBjaGFyICphcmNoOworICAgIGludCBpLCByZXQ7 CisKKyAgICBxZW11ID0gZ2V0ZW52KCJRVEVTVF9RRU1VX0JJTkFSWSIpOworICAgIGlmIChx ZW11ID09IE5VTEwpIHsKKyAgICAgICAgcmV0ID0gc2V0ZW52KCJRVEVTVF9RRU1VX0JJTkFS WSIsCisgICAgICAgICAgICAgICAgICAgICAieDg2XzY0LXNvZnRtbXUvcWVtdS1zeXN0ZW0t eDg2XzY0IiwgMCk7CisgICAgICAgIGdfYXNzZXJ0KHJldCA9PSAwKTsKKyAgICB9CisKKyAg ICBhcmNoID0gcXRlc3RfZ2V0X2FyY2goKTsKKworICAgIGdfdGVzdF9pbml0KCZhcmdjLCAm YXJndiwgTlVMTCk7CisKKyAgICBpZiAoc3RyY21wKGFyY2gsICJpMzg2IikgPT0gMCB8fCBz dHJjbXAoYXJjaCwgIng4Nl82NCIpID09IDApIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IEdfTl9FTEVNRU5UUyhjaXBoZXJfdGVzdF9kYXRhKTsgaSsrKSB7CisgICAgICAgICAgICBn X3Rlc3RfYWRkX2RhdGFfZnVuYyhjaXBoZXJfdGVzdF9kYXRhW2ldLnBhdGgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSZjaXBoZXJfdGVzdF9kYXRhW2ld LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdUZXN0RGF0YUZ1bmMpdmly dGlvX2NyeXB0b19wY2lfYmFzaWMpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu IGdfdGVzdF9ydW4oKTsKK30KLS0gCjEuOC4zLjEKCg== --------------000905010807050209040800 Content-Type: text/plain; charset=us-ascii --------------------------------------------------------------------- To unsubscribe, e-mail: virtio-dev-unsubscribe@lists.oasis-open.org For additional commands, e-mail: virtio-dev-help@lists.oasis-open.org --------------000905010807050209040800-- From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:43262) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dsIVE-0000Rp-SJ for qemu-devel@nongnu.org; Wed, 13 Sep 2017 20:59:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dsIVA-0007de-Sk for qemu-devel@nongnu.org; Wed, 13 Sep 2017 20:59:36 -0400 Received: from szxga04-in.huawei.com ([45.249.212.190]:2321) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1dsIV9-0007XX-DF for qemu-devel@nongnu.org; Wed, 13 Sep 2017 20:59:32 -0400 Message-ID: <59B9D439.10807@huawei.com> Date: Thu, 14 Sep 2017 08:58:33 +0800 From: "Longpeng (Mike)" MIME-Version: 1.0 References: <1505092240-10864-1-git-send-email-longpeng2@huawei.com> <2d8ae3d3-438b-da84-4959-cf63f4f4ce99@linux.vnet.ibm.com> In-Reply-To: <2d8ae3d3-438b-da84-4959-cf63f4f4ce99@linux.vnet.ibm.com> Content-Type: multipart/mixed; boundary="------------000905010807050209040800" Subject: Re: [Qemu-devel] [virtio-dev] Re: [RFC 0/8] virtio-crypto: add multiplexing mode support List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Halil Pasic Cc: qemu-devel@nongnu.org, virtio-dev@lists.oasis-open.org, weidong.huang@huawei.com, mst@redhat.com, jasowang@redhat.com, john.griffin@intel.com, Varun.Sethi@freescale.com, denglingli@chinamobile.com, arei.gonglei@hotmail.com, agraf@suse.de, arei.gonglei@huawei.com, vincent.jardin@6wind.com, Ola.Liljedahl@arm.com, luonengjun@huawei.com, xin.zeng@intel.com, liang.j.ma@intel.com, stefanha@redhat.com, Jani.Kokkonen@huawei.com, brian.a.keating@intel.com, wangxinxin.wang@huawei.com, cohuck@redhat.com, mike.caraman@nxp.com --------------000905010807050209040800 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 7bit On 2017/9/14 2:14, Halil Pasic wrote: > > > On 09/11/2017 03:10 AM, Longpeng(Mike) wrote: >> *NOTE* >> The code realization is based on the latest virtio crypto spec: >> [PATCH v19 0/2] virtio-crypto: virtio crypto device specification >> https://lists.nongnu.org/archive/html/qemu-devel/2017-08/msg05217.html >> >> In session mode, the process of create/close a session >> makes we have a least one full round-trip cost from guest to host to guest >> to be able to send any data for symmetric algorithms. It gets ourself into >> synchronization troubles in some scenarios like a web server handling lots >> of small requests whose algorithms and keys are different. >> >> We can support one-blob request (no sessions) as well for symmetric >> algorithms, including HASH, MAC services. The benefit is obvious for >> HASH service because it's usually a one-blob operation. >> > > Hi! > > I've just started looking at this. Patch #1 modifies linux/virtio_crypto.h > which if I compare with the (almost) latest linux master is different. Thus > I would expect a corresponding kernel patch set too, but I haven't received > one, nor did I find a reference in the cover letter. > > I think if I want to test the new features I need the kernel counter-part > too, or? > > Could you point me to the kernel counterpart? > Hi Halil, We haven't implemented the kernel frontend part yet, but there's a testcase based on qtest, you can use it. Please see the attachment. -- Regards, Longpeng(Mike) > Regards, > Halil > > >> Gonglei (3): >> virtio-crypto: add stateless crypto request handler >> cryptodev: extract one util function >> virtio-crypto: add host feature bits support >> >> Longpeng(Mike) (5): >> virtio-crypto: add new definations for multiplexing mode >> virtio-crypto: add session creation logic for mux mode >> virtio-crypto: add dataq operation logic for mux mode >> cryptodev: add stateless mode cipher support >> cryptodev-builtin: add stateless cipher support >> >> backends/cryptodev-builtin.c | 189 ++++++++--- >> backends/cryptodev.c | 21 ++ >> hw/virtio/virtio-crypto.c | 433 +++++++++++++++++++++++-- >> include/hw/virtio/virtio-crypto.h | 2 + >> include/standard-headers/linux/virtio_crypto.h | 182 ++++++++++- >> include/sysemu/cryptodev.h | 21 ++ >> 6 files changed, 774 insertions(+), 74 deletions(-) >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: virtio-dev-unsubscribe@lists.oasis-open.org > For additional commands, e-mail: virtio-dev-help@lists.oasis-open.org > > > . > -- Regards, Longpeng(Mike) --------------000905010807050209040800 Content-Type: text/plain; charset="gb18030"; name="testcase.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="testcase.patch" RnJvbSAyNTkzNTk3MDBiMTg0N2NkNjZmOWMzZTA0YTg2YTE0NTQ2ZjZmMGUwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBHb25nbGVpIDxhcmVpLmdvbmdsZWlAaHVhd2VpLmNv bT4KRGF0ZTogTW9uLCA4IE1heSAyMDE3IDEzOjQyOjUzICswODAwClN1YmplY3Q6IFtQQVRD SF0gcXRlc3Q6IGVtdWxhdGUgdmlydGlvIGNyeXB0byBhcyBhIGxlZ2FjeSBkZXZpY2UgZm9y CiBleHBlcmltZW50CgpCZWNhdXNlIHRoZSBjdXJyZW50IHF0ZXN0IGZyYW1ld29yayBkbyBu b3Qgc3VwcG9ydCB2aXJ0aW8tMQpvciBsYXR0ZXIgZGV2aWNlcy4gRm9yIGV4cGVyaW1lbnRh bCBwdXJwb3NlLApsZXQncyBlbXVsYXRlIHRoZSB2aXJ0aW8gY3J5cHRvIGRldmljZSBhcyBh IGxlZ2FjeSB2aXJ0aW8KZGV2aWNlIGJ5IGRlZmF1bHQuIFVzaW5nIDB4MTAxNCBhcyB2aXJ0 aW8gY3J5cHRvIHBjaSBkZXZpY2UgSUQKYmVjYXVzZSB2aXJ0aW8gY3J5cHRvIElEIGlzIDIw ICgweDE0KS4KClNpZ25lZC1vZmYtYnk6IEdvbmdsZWkgPGFyZWkuZ29uZ2xlaUBodWF3ZWku Y29tPgoKdmlydGlvLWNyeXB0by10ZXN0OiBhZGQgcXRlc3QgY2FzZSBmb3IgdmlydGlvLWNy eXB0bwoKV2UgY2FuIHNpbXBseSB0ZXN0IHRoZSBmdW5jdGlvbnMgb2YgdmlydGlvIGNyeXB0 bwpkZXZpY2UsIGluY2x1ZGluZyBzZXNzaW9uIGNyZWF0aW9uLCBzZXNzaW9uIGNsb3Npbmcs CmNpcGhlciBlbmNyeXB0aW9uIGFuZCBkZWNyeXB0aW9uLgoKUXVpY2sgdXNhZ2U6CiAjIG1h a2UgdGVzdHMvdmlydGlvLWNyeXB0by10ZXN0ICYmIC4vdGVzdHMvdmlydGlvLWNyeXB0by10 ZXN0CiAgQ0MgICAgdGVzdHMvdmlydGlvLWNyeXB0by10ZXN0Lm8KICBMSU5LICB0ZXN0cy92 aXJ0aW8tY3J5cHRvLXRlc3QKL3ZpcnRpby9jcnlwdG8vY2JjKGFlcy0xMjgtc2Vzc2lvbi1t b2RlKTogT0sKL3ZpcnRpby9jcnlwdG8vY2JjKGFlcy0xMjgtc3RhdGVsZXNzLW1vZGUpOiBP SwoKU2lnbmVkLW9mZi1ieTogR29uZ2xlaSA8YXJlaS5nb25nbGVpQGh1YXdlaS5jb20+Clty ZWJhc2Ugb24gdGhlIHYxOSBzcGVjXQpTaWduZWQtb2ZmLWJ5OiBMb25ncGVuZyhNaWtlKSA8 bG9uZ3BlbmcyQGh1YXdlaS5jb20+Ci0tLQogZG9jcy9zcGVjcy9wY2ktaWRzLnR4dCAgICAg ICAgfCAgIDIgKwogaHcvdmlydGlvL3ZpcnRpby1jcnlwdG8tcGNpLmMgfCAgIDQgKy0KIGlu Y2x1ZGUvaHcvcGNpL3BjaS5oICAgICAgICAgIHwgICAyICsKIHRlc3RzL01ha2VmaWxlLmlu Y2x1ZGUgICAgICAgIHwgICAzICsKIHRlc3RzL3ZpcnRpby1jcnlwdG8tdGVzdC5jICAgIHwg NjAwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogNSBmaWxl cyBjaGFuZ2VkLCA2MTAgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3JlYXRlIG1v ZGUgMTAwNjQ0IHRlc3RzL3ZpcnRpby1jcnlwdG8tdGVzdC5jCgpkaWZmIC0tZ2l0IGEvZG9j cy9zcGVjcy9wY2ktaWRzLnR4dCBiL2RvY3Mvc3BlY3MvcGNpLWlkcy50eHQKaW5kZXggYmI5 OWEwMi4uNjE4NzdiNyAxMDA3NTUKLS0tIGEvZG9jcy9zcGVjcy9wY2ktaWRzLnR4dAorKysg Yi9kb2NzL3NwZWNzL3BjaS1pZHMudHh0CkBAIC0yMiw2ICsyMiw3IEBAIG1haW50YWluZWQg YXMgcGFydCBvZiB0aGUgdmlydGlvIHNwZWNpZmljYXRpb24uCiAxYWY0OjEwMDQgIFNDU0kg aG9zdCBidXMgYWRhcHRlciBkZXZpY2UgKGxlZ2FjeSkKIDFhZjQ6MTAwNSAgZW50cm9weSBn ZW5lcmF0b3IgZGV2aWNlIChsZWdhY3kpCiAxYWY0OjEwMDkgIDlwIGZpbGVzeXN0ZW0gZGV2 aWNlIChsZWdhY3kpCisxYWY0OjEwMTQgIGNyeXB0byBkZXZpY2UgKGxlZ2FjeSkKIAogMWFm NDoxMDQxICBuZXR3b3JrIGRldmljZSAobW9kZXJuKQogMWFmNDoxMDQyICBibG9jayBkZXZp Y2UgKG1vZGVybikKQEAgLTMyLDYgKzMzLDcgQEAgbWFpbnRhaW5lZCBhcyBwYXJ0IG9mIHRo ZSB2aXJ0aW8gc3BlY2lmaWNhdGlvbi4KIDFhZjQ6MTA0OSAgOXAgZmlsZXN5c3RlbSBkZXZp Y2UgKG1vZGVybikKIDFhZjQ6MTA1MCAgdmlydGlvIGdwdSBkZXZpY2UgKG1vZGVybikKIDFh ZjQ6MTA1MiAgdmlydGlvIGlucHV0IGRldmljZSAobW9kZXJuKQorMWFmNDoxMDU0ICBjcnlw dG8gZGV2aWNlIChtb2Rlcm4pCiAKIDFhZjQ6MTBmMCAgQXZhaWxhYmxlIGZvciBleHBlcmlt ZW50YWwgdXNhZ2Ugd2l0aG91dCByZWdpc3RyYXRpb24uICBNdXN0IGdldAogICAgdG8gICAg ICBvZmZpY2lhbCBJRCB3aGVuIHRoZSBjb2RlIGxlYXZlcyB0aGUgdGVzdCBsYWIgKGkuZS4g d2hlbiBzZWVraW5nCmRpZmYgLS1naXQgYS9ody92aXJ0aW8vdmlydGlvLWNyeXB0by1wY2ku YyBiL2h3L3ZpcnRpby92aXJ0aW8tY3J5cHRvLXBjaS5jCmluZGV4IGJmNjQ5OTYuLjY2YTI5 NjYgMTAwNzU1Ci0tLSBhL2h3L3ZpcnRpby92aXJ0aW8tY3J5cHRvLXBjaS5jCisrKyBiL2h3 L3ZpcnRpby92aXJ0aW8tY3J5cHRvLXBjaS5jCkBAIC0zNyw3ICszNyw2IEBAIHN0YXRpYyB2 b2lkIHZpcnRpb19jcnlwdG9fcGNpX3JlYWxpemUoVmlydElPUENJUHJveHkgKnZwY2lfZGV2 LCBFcnJvciAqKmVycnApCiAgICAgfQogCiAgICAgcWRldl9zZXRfcGFyZW50X2J1cyh2ZGV2 LCBCVVMoJnZwY2lfZGV2LT5idXMpKTsKLSAgICB2aXJ0aW9fcGNpX2ZvcmNlX3ZpcnRpb18x KHZwY2lfZGV2KTsKICAgICBvYmplY3RfcHJvcGVydHlfc2V0X2Jvb2woT0JKRUNUKHZkZXYp LCB0cnVlLCAicmVhbGl6ZWQiLCBlcnJwKTsKICAgICBvYmplY3RfcHJvcGVydHlfc2V0X2xp bmsoT0JKRUNUKHZjcnlwdG8pLAogICAgICAgICAgICAgICAgICBPQkpFQ1QodmNyeXB0by0+ dmRldi5jb25mLmNyeXB0b2RldiksICJjcnlwdG9kZXYiLApAQCAtNTMsNiArNTIsOSBAQCBz dGF0aWMgdm9pZCB2aXJ0aW9fY3J5cHRvX3BjaV9jbGFzc19pbml0KE9iamVjdENsYXNzICpr bGFzcywgdm9pZCAqZGF0YSkKICAgICBrLT5yZWFsaXplID0gdmlydGlvX2NyeXB0b19wY2lf cmVhbGl6ZTsKICAgICBzZXRfYml0KERFVklDRV9DQVRFR09SWV9NSVNDLCBkYy0+Y2F0ZWdv cmllcyk7CiAgICAgZGMtPnByb3BzID0gdmlydGlvX2NyeXB0b19wY2lfcHJvcGVydGllczsK KyAgICBwY2lkZXZfay0+dmVuZG9yX2lkID0gUENJX1ZFTkRPUl9JRF9SRURIQVRfUVVNUkFO RVQ7CisgICAgcGNpZGV2X2stPmRldmljZV9pZCA9IFBDSV9ERVZJQ0VfSURfVklSVElPX0NS WVBUTzsKKyAgICBwY2lkZXZfay0+cmV2aXNpb24gPSAwOwogICAgIHBjaWRldl9rLT5jbGFz c19pZCA9IFBDSV9DTEFTU19PVEhFUlM7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaHcv cGNpL3BjaS5oIGIvaW5jbHVkZS9ody9wY2kvcGNpLmgKaW5kZXggZTU5OGIwOS4uYWU5MzI3 YyAxMDA3NTUKLS0tIGEvaW5jbHVkZS9ody9wY2kvcGNpLmgKKysrIGIvaW5jbHVkZS9ody9w Y2kvcGNpLmgKQEAgLTgzLDYgKzgzLDggQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSVJU SU9fUk5HICAgICAgICAgMHgxMDA1CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklSVElPXzlQ ICAgICAgICAgIDB4MTAwOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJUlRJT19WU09DSyAg ICAgICAweDEwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSVJUSU9fQ1JZUFRPICAgICAg MHgxMDE0CisKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1JFREhBVCAgICAgICAgICAgICAw eDFiMzYKICNkZWZpbmUgUENJX0RFVklDRV9JRF9SRURIQVRfQlJJREdFICAgICAgMHgwMDAx CmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5pbmNsdWRlIGIvdGVzdHMvTWFrZWZpbGUu aW5jbHVkZQppbmRleCAzN2MxYmVkLi45YjZjMTMxIDEwMDc1NQotLS0gYS90ZXN0cy9NYWtl ZmlsZS5pbmNsdWRlCisrKyBiL3Rlc3RzL01ha2VmaWxlLmluY2x1ZGUKQEAgLTE5Miw2ICsx OTIsOCBAQCBjaGVjay1xdGVzdC12aXJ0aW8teSArPSB0ZXN0cy92aXJ0aW8tc2VyaWFsLXRl c3QkKEVYRVNVRikKIGdjb3YtZmlsZXMtdmlydGlvLXkgKz0gaTM4Ni1zb2Z0bW11L2h3L2No YXIvdmlydGlvLXNlcmlhbC1idXMuYwogY2hlY2stcXRlc3QtdmlydGlvLXkgKz0gJChjaGVj ay1xdGVzdC12aXJ0aW9zZXJpYWwteSkKIGdjb3YtZmlsZXMtdmlydGlvLXkgKz0gJChnY292 LWZpbGVzLXZpcnRpb3NlcmlhbC15KQorY2hlY2stcXRlc3QtdmlydGlvLXkgKz0gdGVzdHMv dmlydGlvLWNyeXB0by10ZXN0JChFWEVTVUYpCitnY292LWZpbGVzLXZpcnRpby15ICs9IGkz ODYtc29mdG1tdS9ody92aXJ0aW8vdmlydGlvLWNyeXB0by5jCiAKIGNoZWNrLXF0ZXN0LXBj aS15ICs9IHRlc3RzL2UxMDAwLXRlc3QkKEVYRVNVRikKIGdjb3YtZmlsZXMtcGNpLXkgKz0g aHcvbmV0L2UxMDAwLmMKQEAgLTc1Myw2ICs3NTUsNyBAQCB0ZXN0cy92aXJ0aW8tc2NzaS10 ZXN0JChFWEVTVUYpOiB0ZXN0cy92aXJ0aW8tc2NzaS10ZXN0Lm8gJChsaWJxb3MtdmlydGlv LW9iai15KQogdGVzdHMvdmlydGlvLTlwLXRlc3QkKEVYRVNVRik6IHRlc3RzL3ZpcnRpby05 cC10ZXN0Lm8gJChsaWJxb3MtdmlydGlvLW9iai15KQogdGVzdHMvdmlydGlvLXNlcmlhbC10 ZXN0JChFWEVTVUYpOiB0ZXN0cy92aXJ0aW8tc2VyaWFsLXRlc3QubwogdGVzdHMvdmlydGlv LWNvbnNvbGUtdGVzdCQoRVhFU1VGKTogdGVzdHMvdmlydGlvLWNvbnNvbGUtdGVzdC5vCit0 ZXN0cy92aXJ0aW8tY3J5cHRvLXRlc3QkKEVYRVNVRik6IHRlc3RzL3ZpcnRpby1jcnlwdG8t dGVzdC5vICQobGlicW9zLXZpcnRpby1vYmoteSkKIHRlc3RzL3RwY2kyMDAtdGVzdCQoRVhF U1VGKTogdGVzdHMvdHBjaTIwMC10ZXN0Lm8KIHRlc3RzL2Rpc3BsYXktdmdhLXRlc3QkKEVY RVNVRik6IHRlc3RzL2Rpc3BsYXktdmdhLXRlc3QubwogdGVzdHMvaXBvY3RhbDIzMi10ZXN0 JChFWEVTVUYpOiB0ZXN0cy9pcG9jdGFsMjMyLXRlc3QubwpkaWZmIC0tZ2l0IGEvdGVzdHMv dmlydGlvLWNyeXB0by10ZXN0LmMgYi90ZXN0cy92aXJ0aW8tY3J5cHRvLXRlc3QuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODI1ZjFmCi0tLSAvZGV2L251bGwK KysrIGIvdGVzdHMvdmlydGlvLWNyeXB0by10ZXN0LmMKQEAgLTAsMCArMSw2MDAgQEAKKy8q CisgKiBRVGVzdCB0ZXN0Y2FzZSBmb3IgVmlydElPIENyeXB0byBEZXZpY2UKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMTYgSFVBV0VJIFRFQ0hOT0xPR0lFUyBDTy4sIExURC4KKyAqCisg KiBBdXRob3JzOgorICogICAgR29uZ2xlaSA8YXJlaS5nb25nbGVpQGh1YXdlaS5jb20+Cisg KgorICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdQTCwgdmVyc2lvbiAyIG9yIGxhdGVyLgorICogU2VlIHRoZSBDT1BZSU5HIGZpbGUgaW4g dGhlIHRvcC1sZXZlbCBkaXJlY3RvcnkuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgor CisjaW5jbHVkZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgImxpYnF0ZXN0LmgiCisjaW5j bHVkZSAibGlicW9zL3ZpcnRpby5oIgorI2luY2x1ZGUgImxpYnFvcy92aXJ0aW8tcGNpLmgi CisjaW5jbHVkZSAibGlicW9zL3ZpcnRpby1tbWlvLmgiCisjaW5jbHVkZSAibGlicW9zL3Bj aS1wYy5oIgorI2luY2x1ZGUgImxpYnFvcy9tYWxsb2MuaCIKKyNpbmNsdWRlICJsaWJxb3Mv bWFsbG9jLXBjLmgiCisjaW5jbHVkZSAibGlicW9zL21hbGxvYy1nZW5lcmljLmgiCisjaW5j bHVkZSAicWVtdS9ic3dhcC5oIgorI2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGludXgv dmlydGlvX2lkcy5oIgorI2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlv X2NvbmZpZy5oIgorI2luY2x1ZGUgInN0YW5kYXJkLWhlYWRlcnMvbGludXgvdmlydGlvX3Jp bmcuaCIKKyNpbmNsdWRlICJzdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19jcnlwdG8u aCIKKyNpbmNsdWRlICJzdGFuZGFyZC1oZWFkZXJzL2xpbnV4L3ZpcnRpb19wY2kuaCIKKwor I2RlZmluZSBRVklSVElPX0NSWVBUT19USU1FT1VUX1VTICAoMzAgKiAxMDAwICogMTAwMCkK KworI2RlZmluZSBQQ0lfU0xPVF9IUCAgICAgICAgICAgICAweDA2CisjZGVmaW5lIFBDSV9T TE9UICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgUENJX0ZOICAgICAgICAgICAgICAg ICAgMHgwMAorCisvKgorICogVmlydElPQ3J5cHRvQ2lwaGVyVGVzdERhdGE6ICBzdHJ1Y3R1 cmUgdG8gZGVzY3JpYmUgYSBjaXBoZXIgdGVzdAorICogQGtleTogICAgQSBwb2ludGVyIHRv IGEga2V5IHVzZWQgYnkgdGhlIHRlc3QKKyAqIEBrZXlfbGVuOiAgICBUaGUgbGVuZ3RoIG9m IEBrZXkKKyAqIEBpdjogICAgIEEgcG9pbnRlciB0byB0aGUgSVYvQ291bnRlciB1c2VkIGJ5 IHRoZSB0ZXN0CisgKiBAaXZfbGVuOiBUaGUgbGVuZ3RoIG9mIEBpdgorICogQGlucHV0OiAg QSBwb2ludGVyIHRvIGRhdGEgdXNlZCBhcyBpbnB1dAorICogQGlsZW4gICAgVGhlIGxlbmd0 aCBvZiBkYXRhIGluIEBpbnB1dAorICogQG91dHB1dDogQSBwb2ludGVyIHRvIHdoYXQgdGhl IHRlc3QgbmVlZCB0byBwcm9kdWNlCisgKiBAb2xlbjogICBUaGUgbGVuZ3RoIG9mIGRhdGEg aW4gQG91dHB1dAorICogQGFsZ286ICAgVGhlIHR5cGUgb2YgYWxnb3JpdGhtLCByZWZlciB0 byBWSVJUSU9fQ1JZUFRPX0NJUEhFUl9BRVNfKgorICovCit0eXBlZGVmIHN0cnVjdCBWaXJ0 SU9DcnlwdG9DaXBoZXJUZXN0RGF0YSB7CisgICAgY29uc3QgY2hhciAqcGF0aDsKKyAgICB1 bnNpZ25lZCBzaG9ydCBhbGdvOworICAgIGNvbnN0IGNoYXIgKmtleTsKKyAgICBjb25zdCBj aGFyICppdjsKKyAgICBjb25zdCBjaGFyICppbnB1dDsKKyAgICBjb25zdCBjaGFyICpvdXRw dXQ7CisgICAgdW5zaWduZWQgY2hhciBrZXlfbGVuOworICAgIHVuc2lnbmVkIGNoYXIgaXZf bGVuOworICAgIHVuc2lnbmVkIHNob3J0IGlsZW47CisgICAgdW5zaWduZWQgc2hvcnQgb2xl bjsKKyAgICBib29sIGlzX3N0YXRlbHNzX21vZGU7Cit9IFZpcnRJT0NyeXB0b0NpcGhlclRl c3REYXRhOworCisKK3N0YXRpYyBWaXJ0SU9DcnlwdG9DaXBoZXJUZXN0RGF0YSBjaXBoZXJf dGVzdF9kYXRhW10gPSB7CisgICAgeyAvKiBGcm9tIFJGQyAzNjAyICovCisgICAgICAgIC5w YXRoID0gIi92aXJ0aW8vY3J5cHRvL2NiYyhhZXMtMTI4LXNlc3Npb24tbW9kZSkiLAorICAg ICAgICAuYWxnbyA9IFZJUlRJT19DUllQVE9fQ0lQSEVSX0FFU19DQkMsCisgICAgICAgIC5r ZXkgID0gIlx4MDZceGE5XHgyMVx4NDBceDM2XHhiOFx4YTFceDViIgorICAgICAgICAgICAg ICAgICJceDUxXHgyZVx4MDNceGQ1XHgzNFx4MTJceDAwXHgwNiIsCisgICAgICAgIC5rZXlf bGVuICAgPSAxNiwKKyAgICAgICAgLml2ID0gIlx4M2RceGFmXHhiYVx4NDJceDlkXHg5ZVx4 YjRceDMwIgorICAgICAgICAgICAgICAiXHhiNFx4MjJceGRhXHg4MFx4MmNceDlmXHhhY1x4 NDEiLAorICAgICAgICAuaXZfbGVuID0gMTYsCisgICAgICAgIC5pbnB1dCAgPSAiU2luZ2xl IGJsb2NrIG1zZyIsCisgICAgICAgIC5pbGVuICAgPSAxNiwKKyAgICAgICAgLm91dHB1dCA9 ICJceGUzXHg1M1x4NzdceDljXHgxMFx4NzlceGFlXHhiOCIKKyAgICAgICAgICAgICAgICAg ICJceDI3XHgwOFx4OTRceDJkXHhiZVx4NzdceDE4XHgxYSIsCisgICAgICAgIC5vbGVuICAg PSAxNiwKKyAgICAgICAgLmlzX3N0YXRlbHNzX21vZGUgPSBmYWxzZSwKKyAgICB9LAorICAg IHsgLyogRnJvbSBSRkMgMzYwMiAqLworICAgICAgICAucGF0aCA9ICIvdmlydGlvL2NyeXB0 by9jYmMoYWVzLTEyOC1zdGF0ZWxlc3MtbW9kZSkiLAorICAgICAgICAuYWxnbyA9IFZJUlRJ T19DUllQVE9fQ0lQSEVSX0FFU19DQkMsCisgICAgICAgIC5rZXkgID0gIlx4MDZceGE5XHgy MVx4NDBceDM2XHhiOFx4YTFceDViIgorICAgICAgICAgICAgICAgICJceDUxXHgyZVx4MDNc eGQ1XHgzNFx4MTJceDAwXHgwNiIsCisgICAgICAgIC5rZXlfbGVuICAgPSAxNiwKKyAgICAg ICAgLml2ID0gIlx4M2RceGFmXHhiYVx4NDJceDlkXHg5ZVx4YjRceDMwIgorICAgICAgICAg ICAgICAiXHhiNFx4MjJceGRhXHg4MFx4MmNceDlmXHhhY1x4NDEiLAorICAgICAgICAuaXZf bGVuID0gMTYsCisgICAgICAgIC5pbnB1dCAgPSAiU2luZ2xlIGJsb2NrIG1zZyIsCisgICAg ICAgIC5pbGVuICAgPSAxNiwKKyAgICAgICAgLm91dHB1dCA9ICJceGUzXHg1M1x4NzdceDlj XHgxMFx4NzlceGFlXHhiOCIKKyAgICAgICAgICAgICAgICAgICJceDI3XHgwOFx4OTRceDJk XHhiZVx4NzdceDE4XHgxYSIsCisgICAgICAgIC5vbGVuICAgPSAxNiwKKyAgICAgICAgLmlz X3N0YXRlbHNzX21vZGUgPSB0cnVlLAorICAgIH0sCit9OworCitzdGF0aWMgUVBDSUJ1cyAq dmlydGlvX2NyeXB0b190ZXN0X3N0YXJ0KHZvaWQpCit7CisgICAgY2hhciAqY21kbGluZTsK KworICAgIGNtZGxpbmUgPSBnX3N0cmR1cF9wcmludGYoCisgICAgICAgICAgICAgICAiLW9i amVjdCBjcnlwdG9kZXYtYmFja2VuZC1idWlsdGluLGlkPWNyeXB0b2RldjAgIgorICAgICAg ICAgICAgICAgIi1kZXZpY2UgdmlydGlvLWNyeXB0by1wY2ksaWQ9Y3J5cHRvMCwiCisgICAg ICAgICAgICAgICAiY3J5cHRvZGV2PWNyeXB0b2RldjAiKTsKKworICAgIHF0ZXN0X3N0YXJ0 KGNtZGxpbmUpOworICAgIGdfZnJlZShjbWRsaW5lKTsKKworICAgIHJldHVybiBxcGNpX2lu aXRfcGMoTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfZW5kKHZvaWQpCit7CisgICAg cXRlc3RfZW5kKCk7Cit9CisKK3N0YXRpYyBRVmlydGlvUENJRGV2aWNlICp2aXJ0aW9fY3J5 cHRvX3BjaV9pbml0KFFQQ0lCdXMgKmJ1cywgaW50IHNsb3QpCit7CisgICAgUVZpcnRpb1BD SURldmljZSAqZGV2OworCisgICAgZGV2ID0gcXZpcnRpb19wY2lfZGV2aWNlX2ZpbmQoYnVz LCBWSVJUSU9fSURfQ1JZUFRPKTsKKyAgICBnX2Fzc2VydChkZXYgIT0gTlVMTCk7CisgICAg Z19hc3NlcnRfY21waGV4KGRldi0+dmRldi5kZXZpY2VfdHlwZSwgPT0sIFZJUlRJT19JRF9D UllQVE8pOworCisgICAgcXZpcnRpb19wY2lfZGV2aWNlX2VuYWJsZShkZXYpOworICAgIHF2 aXJ0aW9fcmVzZXQoJmRldi0+dmRldik7CisgICAgcXZpcnRpb19zZXRfYWNrbm93bGVkZ2Uo JmRldi0+dmRldik7CisgICAgcXZpcnRpb19zZXRfZHJpdmVyKCZkZXYtPnZkZXYpOworCisg ICAgcmV0dXJuIGRldjsKK30KKworc3RhdGljIHVpbnQ2NF90Cit2aXJ0aW9fY3J5cHRvX2N0 cmxfcmVxdWVzdChRR3Vlc3RBbGxvY2F0b3IgKmFsbG9jLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHZpcnRpb19jcnlwdG9fb3BfY3RybF9yZXEgKnJlcSkKK3sKKyAg ICB1aW50NjRfdCBhZGRyOworCisgICAgYWRkciA9IGd1ZXN0X2FsbG9jKGFsbG9jLCBzaXpl b2YoKnJlcSkpOworCisgICAgbWVtd3JpdGUoYWRkciwgcmVxLCBzaXplb2YoKnJlcSkpOwor CisgICAgcmV0dXJuIGFkZHI7Cit9CisKK3N0YXRpYyB1aW50NjRfdAordmlydGlvX2NyeXB0 b19kYXRhX3JlcXVlc3QoUUd1ZXN0QWxsb2NhdG9yICphbGxvYywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB2aXJ0aW9fY3J5cHRvX29wX2RhdGFfcmVxICpyZXEpCit7 CisgICAgdWludDY0X3QgYWRkcjsKKworICAgIGFkZHIgPSBndWVzdF9hbGxvYyhhbGxvYywg c2l6ZW9mKCpyZXEpKTsKKworICAgIG1lbXdyaXRlKGFkZHIsIHJlcSwgc2l6ZW9mKCpyZXEp KTsKKworICAgIHJldHVybiBhZGRyOworfQorCitzdGF0aWMgdm9pZAordmlydGlvX2NyeXB0 b19kcml2ZXJfaW5pdChRVmlydGlvRGV2aWNlICpkZXYpCit7CisgICAgLyogUmVhZCBjb25m aWd1cmUgc3BhY2UgdG8gZ2V0ICBzdXBwb3J0ZWQgY3J5cHRvIHNlcnZpY2VzICovCisKKyAg ICBxdmlydGlvX3NldF9kcml2ZXJfb2soZGV2KTsKK30KKworc3RhdGljIHVpbnQ2NF90Cit2 aXJ0aW9fY3J5cHRvX2NyZWF0ZV9zZXNzaW9uKFFWaXJ0aW9EZXZpY2UgKmRldiwKKyAgICAg ICAgICAgIFFHdWVzdEFsbG9jYXRvciAqYWxsb2MsIFFWaXJ0UXVldWUgKnZxLAorICAgICAg ICAgICAgVmlydElPQ3J5cHRvQ2lwaGVyVGVzdERhdGEgKmRhdGEsCisgICAgICAgICAgICBp bnQgZW5jcnlwdCkKK3sKKyAgICB1aW50MzJfdCBmcmVlX2hlYWQ7CisgICAgc3RydWN0IHZp cnRpb19jcnlwdG9fb3BfY3RybF9yZXEgY3RybDsKKyAgICBzdHJ1Y3QgdmlydGlvX2NyeXB0 b19zZXNzaW9uX2lucHV0IGlucHV0OworICAgIHVpbnQzMl90IGtleV9sZW4gPSBkYXRhLT5r ZXlfbGVuOworICAgIHVpbnQ2NF90IHJlcV9hZGRyOworICAgIHVpbnQ2NF90IGtleV9hZGRy LCBpbnB1dF9hZGRyOyAvKiBjaXBoZXIga2V5IGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgKi8K KyAgICB1aW50NjRfdCBzZXNzaW9uX2lkOworICAgIFFWUmluZ0luZGlyZWN0RGVzYyAqaW5k aXJlY3Q7CisKKyAgICAvKiBDcmVhdGUgYW4gZW5jcnlwdGlvbiBzZXNzaW9uICovCisgICAg Y3RybC5oZWFkZXIub3Bjb2RlID0gVklSVElPX0NSWVBUT19DSVBIRVJfQ1JFQVRFX1NFU1NJ T047CisgICAgY3RybC5oZWFkZXIuYWxnbyA9IGRhdGEtPmFsZ287CisgICAgLyogU2V0IHRo ZSBkZWZhdWx0IGRhdGFxdWV1ZSBpZCB0byAwICovCisgICAgY3RybC5oZWFkZXIucXVldWVf aWQgPSAwOworCisgICAgLyogUGFkIGNpcGhlcidzIHBhcmFtZXRlcnMgKi8KKyAgICBjdHJs LnUuc3ltX2NyZWF0ZV9zZXNzaW9uLm9wX3R5cGUgPSBWSVJUSU9fQ1JZUFRPX1NZTV9PUF9D SVBIRVI7CisgICAgY3RybC51LnN5bV9jcmVhdGVfc2Vzc2lvbi51LmNpcGhlci5wYXJhLmFs Z28gPSBjdHJsLmhlYWRlci5hbGdvOworICAgIGN0cmwudS5zeW1fY3JlYXRlX3Nlc3Npb24u dS5jaXBoZXIucGFyYS5rZXlsZW4gPSBrZXlfbGVuOworICAgIGlmIChlbmNyeXB0KSB7Cisg ICAgICAgIGN0cmwudS5zeW1fY3JlYXRlX3Nlc3Npb24udS5jaXBoZXIucGFyYS5vcCA9IFZJ UlRJT19DUllQVE9fT1BfRU5DUllQVDsKKyAgICB9IGVsc2UgeworICAgICAgICBjdHJsLnUu c3ltX2NyZWF0ZV9zZXNzaW9uLnUuY2lwaGVyLnBhcmEub3AgPSBWSVJUSU9fQ1JZUFRPX09Q X0RFQ1JZUFQ7CisgICAgfQorCisgICAgcmVxX2FkZHIgPSB2aXJ0aW9fY3J5cHRvX2N0cmxf cmVxdWVzdChhbGxvYywgJmN0cmwpOworCisgICAgLyogUGFkIGNpcGhlcidzIG91dHB1dCBk YXRhICovCisgICAga2V5X2FkZHIgPSBndWVzdF9hbGxvYyhhbGxvYywga2V5X2xlbik7Cisg ICAgbWVtd3JpdGUoa2V5X2FkZHIsIGRhdGEtPmtleSwga2V5X2xlbik7CisKKyAgICBpbnB1 dC5zdGF0dXMgPSBWSVJUSU9fQ1JZUFRPX0VSUjsKKyAgICBpbnB1dF9hZGRyID0gZ3Vlc3Rf YWxsb2MoYWxsb2MsIHNpemVvZihpbnB1dCkpOworICAgIG1lbXdyaXRlKGlucHV0X2FkZHIs ICZpbnB1dCwgc2l6ZW9mKGlucHV0KSk7CisKKyAgICBpbmRpcmVjdCA9IHF2cmluZ19pbmRp cmVjdF9kZXNjX3NldHVwKGRldiwgYWxsb2MsIDMpOworICAgIHF2cmluZ19pbmRpcmVjdF9k ZXNjX2FkZChpbmRpcmVjdCwgcmVxX2FkZHIsIHNpemVvZihjdHJsKSwgZmFsc2UpOworICAg IHF2cmluZ19pbmRpcmVjdF9kZXNjX2FkZChpbmRpcmVjdCwga2V5X2FkZHIsIGtleV9sZW4s IGZhbHNlKTsKKyAgICBxdnJpbmdfaW5kaXJlY3RfZGVzY19hZGQoaW5kaXJlY3QsIGlucHV0 X2FkZHIsIHNpemVvZihpbnB1dCksIHRydWUpOworICAgIGZyZWVfaGVhZCA9IHF2aXJ0cXVl dWVfYWRkX2luZGlyZWN0KHZxLCBpbmRpcmVjdCk7CisKKyAgICBxdmlydHF1ZXVlX2tpY2so ZGV2LCB2cSwgZnJlZV9oZWFkKTsKKworICAgIHF2aXJ0aW9fd2FpdF9xdWV1ZV9pc3IoZGV2 LCB2cSwgUVZJUlRJT19DUllQVE9fVElNRU9VVF9VUyk7CisKKyAgICAvKiBjYWxjdWxhdGUg dGhlIG9mZnNldCBvZiBpbnB1dCBkYXRhICovCisKKyAgICBtZW1yZWFkKGlucHV0X2FkZHIs ICZpbnB1dCwgc2l6ZW9mKGlucHV0KSk7CisKKyAgICAvKiBWZXJpZnkgdGhlIHJlc3VsdCAq LworICAgIGdfYXNzZXJ0X2NtcGludChpbnB1dC5zdGF0dXMsID09LCBWSVJUSU9fQ1JZUFRP X09LKTsKKworICAgIHNlc3Npb25faWQgPSBpbnB1dC5zZXNzaW9uX2lkOworCisgICAgZ19m cmVlKGluZGlyZWN0KTsKKyAgICBndWVzdF9mcmVlKGFsbG9jLCBpbnB1dF9hZGRyKTsKKyAg ICBndWVzdF9mcmVlKGFsbG9jLCBrZXlfYWRkcik7CisgICAgZ3Vlc3RfZnJlZShhbGxvYywg cmVxX2FkZHIpOworCisgICAgcmV0dXJuIHNlc3Npb25faWQ7Cit9CisKK3N0YXRpYyB2b2lk Cit2aXJ0aW9fY3J5cHRvX2Nsb3NlX3Nlc3Npb24oUVZpcnRpb0RldmljZSAqZGV2LAorICAg ICAgICAgICAgUUd1ZXN0QWxsb2NhdG9yICphbGxvYywgUVZpcnRRdWV1ZSAqdnEsCisgICAg ICAgICAgICB1aW50NjRfdCBzZXNzaW9uX2lkKQoreworICAgIHVpbnQzMl90IGZyZWVfaGVh ZDsKKyAgICBzdHJ1Y3QgdmlydGlvX2NyeXB0b19vcF9jdHJsX3JlcSBjdHJsOworICAgIHVp bnQ2NF90IHJlcV9hZGRyLCBzdGF0dXNfYWRkcjsKKyAgICB1aW50OF90IHN0YXR1czsKKyAg ICBRVlJpbmdJbmRpcmVjdERlc2MgKmluZGlyZWN0OworCisgICAgLyogQ3JlYXRlIGFuIGVu Y3J5cHRpb24gc2Vzc2lvbiAqLworICAgIGN0cmwuaGVhZGVyLm9wY29kZSA9IFZJUlRJT19D UllQVE9fQ0lQSEVSX0RFU1RST1lfU0VTU0lPTjsKKyAgICAvKiBTZXQgdGhlIGRlZmF1bHQg ZGF0YXF1ZXVlIGlkIHRvIDAgKi8KKyAgICBjdHJsLmhlYWRlci5xdWV1ZV9pZCA9IDA7CisK KyAgICBjdHJsLnUuZGVzdHJveV9zZXNzaW9uLnNlc3Npb25faWQgPSBzZXNzaW9uX2lkOwor CisgICAgcmVxX2FkZHIgPSB2aXJ0aW9fY3J5cHRvX2N0cmxfcmVxdWVzdChhbGxvYywgJmN0 cmwpOworCisgICAgc3RhdHVzX2FkZHIgPSBndWVzdF9hbGxvYyhhbGxvYywgc2l6ZW9mKHN0 YXR1cykpOworICAgIHdyaXRlbChzdGF0dXNfYWRkciwgVklSVElPX0NSWVBUT19FUlIpOwor CisgICAgaW5kaXJlY3QgPSBxdnJpbmdfaW5kaXJlY3RfZGVzY19zZXR1cChkZXYsIGFsbG9j LCAyKTsKKyAgICBxdnJpbmdfaW5kaXJlY3RfZGVzY19hZGQoaW5kaXJlY3QsIHJlcV9hZGRy LCBzaXplb2YoY3RybCksIGZhbHNlKTsKKyAgICBxdnJpbmdfaW5kaXJlY3RfZGVzY19hZGQo aW5kaXJlY3QsIHN0YXR1c19hZGRyLCBzaXplb2Yoc3RhdHVzKSwgdHJ1ZSk7CisgICAgZnJl ZV9oZWFkID0gcXZpcnRxdWV1ZV9hZGRfaW5kaXJlY3QodnEsIGluZGlyZWN0KTsKKworICAg IHF2aXJ0cXVldWVfa2ljayhkZXYsIHZxLCBmcmVlX2hlYWQpOworCisgICAgcXZpcnRpb193 YWl0X3F1ZXVlX2lzcihkZXYsIHZxLCBRVklSVElPX0NSWVBUT19USU1FT1VUX1VTKTsKKwor ICAgIC8qIFZlcmlmeSB0aGUgcmVzdWx0ICovCisgICAgc3RhdHVzID0gcmVhZGwoc3RhdHVz X2FkZHIpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGF0dXMsID09LCBWSVJUSU9fQ1JZUFRP X09LKTsKKworICAgIGdfZnJlZShpbmRpcmVjdCk7CisgICAgZ3Vlc3RfZnJlZShhbGxvYywg cmVxX2FkZHIpOworICAgIGd1ZXN0X2ZyZWUoYWxsb2MsIHN0YXR1c19hZGRyKTsKK30KKwor CitzdGF0aWMgdm9pZAordmlydGlvX2NyeXB0b190ZXN0X2NpcGhlcl9zZXNzaW9uX21vZGUo UVZpcnRpb0RldmljZSAqZGV2LAorICAgICAgICAgICAgUUd1ZXN0QWxsb2NhdG9yICphbGxv YywgUVZpcnRRdWV1ZSAqY3RybHEsCisgICAgICAgICAgICBRVmlydFF1ZXVlICp2cSwgVmly dElPQ3J5cHRvQ2lwaGVyVGVzdERhdGEgKmRhdGEsCisgICAgICAgICAgICBpbnQgZW5jcnlw dCkKK3sKKyAgICB1aW50MzJfdCBmcmVlX2hlYWQ7CisgICAgc3RydWN0IHZpcnRpb19jcnlw dG9fb3BfZGF0YV9yZXEgcmVxOworICAgIHVpbnQ2NF90IHJlcV9hZGRyLCBzdGF0dXNfYWRk cjsKKyAgICB1aW50NjRfdCBpdl9hZGRyID0gMCwgc3JjX2FkZHIsIGRzdF9hZGRyOworICAg IHVpbnQ2NF90IHNlc3Npb25faWQ7CisgICAgY2hhciAqb3V0cHV0OworICAgIHVpbnQzMl90 IHNyY19sZW4sIGRzdF9sZW47CisgICAgdWludDhfdCBzdGF0dXM7CisgICAgUVZSaW5nSW5k aXJlY3REZXNjICppbmRpcmVjdDsKKyAgICB1aW50OF90IGVudHJ5X251bTsKKworICAgIC8q IENyZWF0ZSBhIHNlc3Npb24gKi8KKyAgICBzZXNzaW9uX2lkID0gdmlydGlvX2NyeXB0b19j cmVhdGVfc2Vzc2lvbihkZXYsIGFsbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY3RybHEsIGRhdGEsIGVuY3J5cHQpOworCisgICAgLyogSGVh ZCBvZiBvcGVyYXRpb24gKi8KKyAgICByZXEuaGVhZGVyLnNlc3Npb25faWQgPSBzZXNzaW9u X2lkOworICAgIGlmIChlbmNyeXB0KSB7CisgICAgICAgIHJlcS5oZWFkZXIub3Bjb2RlID0g VklSVElPX0NSWVBUT19DSVBIRVJfRU5DUllQVDsKKyAgICB9IGVsc2UgeworICAgICAgICBy ZXEuaGVhZGVyLm9wY29kZSA9IFZJUlRJT19DUllQVE9fQ0lQSEVSX0RFQ1JZUFQ7CisgICAg fQorCisgICAgcmVxLnUuc3ltX3JlcS5vcF90eXBlID0gVklSVElPX0NSWVBUT19TWU1fT1Bf Q0lQSEVSOworICAgIHJlcS51LnN5bV9yZXEudS5jaXBoZXIucGFyYS5pdl9sZW4gPSBkYXRh LT5pdl9sZW47CisgICAgcmVxLnUuc3ltX3JlcS51LmNpcGhlci5wYXJhLnNyY19kYXRhX2xl biA9IGRhdGEtPmlsZW47CisgICAgcmVxLnUuc3ltX3JlcS51LmNpcGhlci5wYXJhLmRzdF9k YXRhX2xlbiA9IGRhdGEtPm9sZW47CisKKyAgICByZXFfYWRkciA9IHZpcnRpb19jcnlwdG9f ZGF0YV9yZXF1ZXN0KGFsbG9jLCAmcmVxKTsKKworICAgIC8qIElWICovCisgICAgaWYgKGRh dGEtPml2X2xlbiA+IDApIHsKKyAgICAgICAgaXZfYWRkciA9IGd1ZXN0X2FsbG9jKGFsbG9j LCBkYXRhLT5pdl9sZW4pOworICAgICAgICBtZW13cml0ZShpdl9hZGRyLCBkYXRhLT5pdiwg ZGF0YS0+aXZfbGVuKTsKKworICAgICAgICAvKiBoZWFkZXIgKyBpdiArIHNyYyArIGRzdCAr IHN0YXR1cyAqLworICAgICAgICBlbnRyeV9udW0gPSA1OworICAgIH0gZWxzZSB7CisgICAg ICAgIC8qIGhlYWRlciArIHNyYyArIGRzdCArIHN0YXR1cyAqLworICAgICAgICBlbnRyeV9u dW0gPSA0OworICAgIH0KKworICAgIGlmIChlbmNyeXB0KSB7CisgICAgICAgIHNyY19sZW4g PSBkYXRhLT5pbGVuOworICAgICAgICBkc3RfbGVuID0gZGF0YS0+b2xlbjsKKyAgICAgICAg LyogU291cmNlIGRhdGEgaXMgdGhlIGlucHV0IGRhdGEgd2hpY2ggaXMgYSBzaW5nbGUgYnVm ZmVyICovCisgICAgICAgIHNyY19hZGRyID0gZ3Vlc3RfYWxsb2MoYWxsb2MsIHNyY19sZW4p OworICAgICAgICBtZW13cml0ZShzcmNfYWRkciwgZGF0YS0+aW5wdXQsIHNyY19sZW4pOwor ICAgIH0gZWxzZSB7CisgICAgICAgIHNyY19sZW4gPSBkYXRhLT5vbGVuOworICAgICAgICBk c3RfbGVuID0gZGF0YS0+aWxlbjsKKyAgICAgICAgLyogU291cmNlIGRhdGEgaXMgdGhlIG91 dHB1dCBkYXRhIHdoaWNoIGlzIGEgc2luZ2xlIGJ1ZmZlciAqLworICAgICAgICBzcmNfYWRk ciA9IGd1ZXN0X2FsbG9jKGFsbG9jLCBzcmNfbGVuKTsKKyAgICAgICAgbWVtd3JpdGUoc3Jj X2FkZHIsIGRhdGEtPm91dHB1dCwgc3JjX2xlbik7CisgICAgfQorCisgICAgZHN0X2FkZHIg PSBndWVzdF9hbGxvYyhhbGxvYywgZHN0X2xlbik7CisKKyAgICBzdGF0dXNfYWRkciA9IGd1 ZXN0X2FsbG9jKGFsbG9jLCBzaXplb2Yoc3RhdHVzKSk7CisgICAgd3JpdGVsKHN0YXR1c19h ZGRyLCBWSVJUSU9fQ1JZUFRPX0VSUik7CisKKyAgICAvKiBBbGxvY2F0ZSBkZXNjcmlwdG8g dGFibGUgZW50cmllcyAqLworICAgIGluZGlyZWN0ID0gcXZyaW5nX2luZGlyZWN0X2Rlc2Nf c2V0dXAoZGV2LCBhbGxvYywgZW50cnlfbnVtKTsKKyAgICBxdnJpbmdfaW5kaXJlY3RfZGVz Y19hZGQoaW5kaXJlY3QsIHJlcV9hZGRyLCBzaXplb2YocmVxKSwgZmFsc2UpOworICAgIGlm IChkYXRhLT5pdl9sZW4gPiAwKSB7CisgICAgICAgIHF2cmluZ19pbmRpcmVjdF9kZXNjX2Fk ZChpbmRpcmVjdCwgaXZfYWRkciwgZGF0YS0+aXZfbGVuLCBmYWxzZSk7CisgICAgfQorICAg IHF2cmluZ19pbmRpcmVjdF9kZXNjX2FkZChpbmRpcmVjdCwgc3JjX2FkZHIsIHNyY19sZW4s IGZhbHNlKTsKKyAgICBxdnJpbmdfaW5kaXJlY3RfZGVzY19hZGQoaW5kaXJlY3QsIGRzdF9h ZGRyLCBkc3RfbGVuLCB0cnVlKTsKKyAgICBxdnJpbmdfaW5kaXJlY3RfZGVzY19hZGQoaW5k aXJlY3QsIHN0YXR1c19hZGRyLCBzaXplb2Yoc3RhdHVzKSwgdHJ1ZSk7CisgICAgZnJlZV9o ZWFkID0gcXZpcnRxdWV1ZV9hZGRfaW5kaXJlY3QodnEsIGluZGlyZWN0KTsKKworICAgIHF2 aXJ0cXVldWVfa2ljayhkZXYsIHZxLCBmcmVlX2hlYWQpOworCisgICAgcXZpcnRpb193YWl0 X3F1ZXVlX2lzcihkZXYsIHZxLCBRVklSVElPX0NSWVBUT19USU1FT1VUX1VTKTsKKworICAg IC8qIFZlcmlmeSB0aGUgcmVzdWx0ICovCisgICAgc3RhdHVzID0gcmVhZGwoc3RhdHVzX2Fk ZHIpOworICAgIGdfYXNzZXJ0X2NtcGludChzdGF0dXMsID09LCBWSVJUSU9fQ1JZUFRPX09L KTsKKworICAgIG91dHB1dCA9IGdfbWFsbG9jMChkc3RfbGVuKTsKKyAgICBtZW1yZWFkKGRz dF9hZGRyLCBvdXRwdXQsIGRzdF9sZW4pOworICAgIGlmIChlbmNyeXB0KSB7CisgICAgICAg IGdfYXNzZXJ0X2NtcHN0cihvdXRwdXQsID09LCBkYXRhLT5vdXRwdXQpOworICAgIH0gZWxz ZSB7CisgICAgICAgIGdfYXNzZXJ0X2NtcHN0cihvdXRwdXQsID09LCBkYXRhLT5pbnB1dCk7 CisgICAgfQorICAgIGdfZnJlZShvdXRwdXQpOworCisgICAgZ19mcmVlKGluZGlyZWN0KTsK KworICAgIGlmIChkYXRhLT5pdl9sZW4gPiAwKSB7CisgICAgICAgIGd1ZXN0X2ZyZWUoYWxs b2MsIGl2X2FkZHIpOworICAgIH0KKyAgICBndWVzdF9mcmVlKGFsbG9jLCBzcmNfYWRkcik7 CisgICAgZ3Vlc3RfZnJlZShhbGxvYywgZHN0X2FkZHIpOworICAgIGd1ZXN0X2ZyZWUoYWxs b2MsIHJlcV9hZGRyKTsKKyAgICBndWVzdF9mcmVlKGFsbG9jLCBzdGF0dXNfYWRkcik7CisK KyAgICAvKiBDbG9zZSB0aGUgc2Vzc2lvbiAqLworICAgIHZpcnRpb19jcnlwdG9fY2xvc2Vf c2Vzc2lvbihkZXYsIGFsbG9jLCBjdHJscSwgc2Vzc2lvbl9pZCk7Cit9CisKK3N0YXRpYyB2 b2lkCit2aXJ0aW9fY3J5cHRvX3Rlc3RfY2lwaGVyX3N0YXRlbGVzc19tb2RlKFFWaXJ0aW9E ZXZpY2UgKmRldiwKKyAgICAgICAgICAgIFFHdWVzdEFsbG9jYXRvciAqYWxsb2MsCisgICAg ICAgICAgICBRVmlydFF1ZXVlICp2cSwgVmlydElPQ3J5cHRvQ2lwaGVyVGVzdERhdGEgKmRh dGEsCisgICAgICAgICAgICBpbnQgZW5jcnlwdCkKK3sKKyAgICB1aW50MzJfdCBmcmVlX2hl YWQ7CisgICAgc3RydWN0IHZpcnRpb19jcnlwdG9fb3BfZGF0YV9yZXFfbXV4IHJlcTsKKyAg ICBzdHJ1Y3QgdmlydGlvX2NyeXB0b19zeW1fZGF0YV9yZXFfc3RhdGVsZXNzIHBhcmE7Cisg ICAgdWludDY0X3QgcmVxX2FkZHIsIHBhcmFfYWRkciwgc3RhdHVzX2FkZHI7CisgICAgdWlu dDY0X3QgaXZfYWRkciA9IDAsIHNyY19hZGRyLCBkc3RfYWRkciwga2V5X2FkZHI7CisgICAg Y2hhciAqb3V0cHV0OworICAgIHVpbnQzMl90IHNyY19sZW4sIGRzdF9sZW47CisgICAgdWlu dDhfdCBzdGF0dXM7CisgICAgUVZSaW5nSW5kaXJlY3REZXNjICppbmRpcmVjdDsKKyAgICB1 aW50OF90IGVudHJ5X251bTsKKworICAgIC8qIEhlYWQgb2Ygb3BlcmF0aW9uICovCisgICAg cmVxLmhlYWRlci5mbGFnID0gMDsKKyAgICBpZiAoZW5jcnlwdCkgeworICAgICAgICByZXEu aGVhZGVyLm9wY29kZSA9IFZJUlRJT19DUllQVE9fQ0lQSEVSX0VOQ1JZUFQ7CisgICAgICAg IHBhcmEudS5jaXBoZXIucGFyYS5zZXNzX3BhcmEub3AgPSBWSVJUSU9fQ1JZUFRPX09QX0VO Q1JZUFQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVxLmhlYWRlci5vcGNvZGUgPSBWSVJU SU9fQ1JZUFRPX0NJUEhFUl9ERUNSWVBUOworICAgICAgICBwYXJhLnUuY2lwaGVyLnBhcmEu c2Vzc19wYXJhLm9wID0gVklSVElPX0NSWVBUT19PUF9ERUNSWVBUOworICAgIH0KKworICAg IHBhcmEub3BfdHlwZSA9IFZJUlRJT19DUllQVE9fU1lNX09QX0NJUEhFUjsKKyAgICBwYXJh LnUuY2lwaGVyLnBhcmEuc2Vzc19wYXJhLmFsZ28gPSBkYXRhLT5hbGdvOworICAgIHBhcmEu dS5jaXBoZXIucGFyYS5zZXNzX3BhcmEua2V5bGVuID0gZGF0YS0+a2V5X2xlbjsKKyAgICBw YXJhLnUuY2lwaGVyLnBhcmEuaXZfbGVuID0gZGF0YS0+aXZfbGVuOworICAgIHBhcmEudS5j aXBoZXIucGFyYS5zcmNfZGF0YV9sZW4gPSBkYXRhLT5pbGVuOworICAgIHBhcmEudS5jaXBo ZXIucGFyYS5kc3RfZGF0YV9sZW4gPSBkYXRhLT5vbGVuOworCisgICAgcmVxX2FkZHIgPSBn dWVzdF9hbGxvYyhhbGxvYywgc2l6ZW9mKHJlcSkpOworICAgIG1lbXdyaXRlKHJlcV9hZGRy LCAmcmVxLCBzaXplb2YocmVxKSk7CisKKyAgICBwYXJhX2FkZHIgPSBndWVzdF9hbGxvYyhh bGxvYywgc2l6ZW9mKHBhcmEpKTsKKyAgICBtZW13cml0ZShwYXJhX2FkZHIsICZwYXJhLCBz aXplb2YocGFyYSkpOworCisgICAgZ19hc3NlcnQoZGF0YS0+a2V5X2xlbiA+IDApOworICAg IGtleV9hZGRyID0gZ3Vlc3RfYWxsb2MoYWxsb2MsIGRhdGEtPmtleV9sZW4pOworICAgIG1l bXdyaXRlKGtleV9hZGRyLCBkYXRhLT5rZXksIGRhdGEtPmtleV9sZW4pOworCisgICAgLyog SVYgKi8KKyAgICBpZiAoZGF0YS0+aXZfbGVuID4gMCkgeworICAgICAgICBpdl9hZGRyID0g Z3Vlc3RfYWxsb2MoYWxsb2MsIGRhdGEtPml2X2xlbik7CisgICAgICAgIG1lbXdyaXRlKGl2 X2FkZHIsIGRhdGEtPml2LCBkYXRhLT5pdl9sZW4pOworCisgICAgICAgIC8qIGhlYWRlciAr IGtleSArIGl2ICsgc3JjICsgZHN0ICsgc3RhdHVzICovCisgICAgICAgIGVudHJ5X251bSA9 IDc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogaGVhZGVyICsga2V5ICsgc3JjICsgZHN0 ICsgc3RhdHVzICovCisgICAgICAgIGVudHJ5X251bSA9IDY7CisgICAgfQorCisgICAgaWYg KGVuY3J5cHQpIHsKKyAgICAgICAgc3JjX2xlbiA9IGRhdGEtPmlsZW47CisgICAgICAgIGRz dF9sZW4gPSBkYXRhLT5vbGVuOworICAgICAgICAvKiBTb3VyY2UgZGF0YSBpcyB0aGUgaW5w dXQgZGF0YSB3aGljaCBpcyBhIHNpbmdsZSBidWZmZXIgKi8KKyAgICAgICAgc3JjX2FkZHIg PSBndWVzdF9hbGxvYyhhbGxvYywgc3JjX2xlbik7CisgICAgICAgIG1lbXdyaXRlKHNyY19h ZGRyLCBkYXRhLT5pbnB1dCwgc3JjX2xlbik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3Jj X2xlbiA9IGRhdGEtPm9sZW47CisgICAgICAgIGRzdF9sZW4gPSBkYXRhLT5pbGVuOworICAg ICAgICAvKiBTb3VyY2UgZGF0YSBpcyB0aGUgb3V0cHV0IGRhdGEgd2hpY2ggaXMgYSBzaW5n bGUgYnVmZmVyICovCisgICAgICAgIHNyY19hZGRyID0gZ3Vlc3RfYWxsb2MoYWxsb2MsIHNy Y19sZW4pOworICAgICAgICBtZW13cml0ZShzcmNfYWRkciwgZGF0YS0+b3V0cHV0LCBzcmNf bGVuKTsKKyAgICB9CisKKyAgICBkc3RfYWRkciA9IGd1ZXN0X2FsbG9jKGFsbG9jLCBkc3Rf bGVuKTsKKworICAgIHN0YXR1c19hZGRyID0gZ3Vlc3RfYWxsb2MoYWxsb2MsIHNpemVvZihz dGF0dXMpKTsKKyAgICB3cml0ZWwoc3RhdHVzX2FkZHIsIFZJUlRJT19DUllQVE9fRVJSKTsK KworICAgIC8qIEFsbG9jYXRlIGRlc2MgdGFibGUgZW50cmllcyAqLworICAgIGluZGlyZWN0 ID0gcXZyaW5nX2luZGlyZWN0X2Rlc2Nfc2V0dXAoZGV2LCBhbGxvYywgZW50cnlfbnVtKTsK KyAgICBxdnJpbmdfaW5kaXJlY3RfZGVzY19hZGQoaW5kaXJlY3QsIHJlcV9hZGRyLCBzaXpl b2YocmVxKSwgZmFsc2UpOworICAgIHF2cmluZ19pbmRpcmVjdF9kZXNjX2FkZChpbmRpcmVj dCwgcGFyYV9hZGRyLCBzaXplb2YocGFyYSksIGZhbHNlKTsKKyAgICBxdnJpbmdfaW5kaXJl Y3RfZGVzY19hZGQoaW5kaXJlY3QsIGtleV9hZGRyLCBkYXRhLT5rZXlfbGVuLCBmYWxzZSk7 CisgICAgaWYgKGRhdGEtPml2X2xlbiA+IDApIHsKKyAgICAgICAgcXZyaW5nX2luZGlyZWN0 X2Rlc2NfYWRkKGluZGlyZWN0LCBpdl9hZGRyLCBkYXRhLT5pdl9sZW4sIGZhbHNlKTsKKyAg ICB9CisgICAgcXZyaW5nX2luZGlyZWN0X2Rlc2NfYWRkKGluZGlyZWN0LCBzcmNfYWRkciwg c3JjX2xlbiwgZmFsc2UpOworICAgIHF2cmluZ19pbmRpcmVjdF9kZXNjX2FkZChpbmRpcmVj dCwgZHN0X2FkZHIsIGRzdF9sZW4sIHRydWUpOworICAgIHF2cmluZ19pbmRpcmVjdF9kZXNj X2FkZChpbmRpcmVjdCwgc3RhdHVzX2FkZHIsIHNpemVvZihzdGF0dXMpLCB0cnVlKTsKKyAg ICBmcmVlX2hlYWQgPSBxdmlydHF1ZXVlX2FkZF9pbmRpcmVjdCh2cSwgaW5kaXJlY3QpOwor CisgICAgcXZpcnRxdWV1ZV9raWNrKGRldiwgdnEsIGZyZWVfaGVhZCk7CisKKyAgICBxdmly dGlvX3dhaXRfcXVldWVfaXNyKGRldiwgdnEsIFFWSVJUSU9fQ1JZUFRPX1RJTUVPVVRfVVMp OworCisgICAgLyogVmVyaWZ5IHRoZSByZXN1bHQgKi8KKyAgICBzdGF0dXMgPSByZWFkbChz dGF0dXNfYWRkcik7CisgICAgZ19hc3NlcnRfY21waW50KHN0YXR1cywgPT0sIFZJUlRJT19D UllQVE9fT0spOworCisgICAgb3V0cHV0ID0gZ19tYWxsb2MwKGRzdF9sZW4pOworICAgIG1l bXJlYWQoZHN0X2FkZHIsIG91dHB1dCwgZHN0X2xlbik7CisgICAgaWYgKGVuY3J5cHQpIHsK KyAgICAgICAgZ19hc3NlcnRfY21wc3RyKG91dHB1dCwgPT0sIGRhdGEtPm91dHB1dCk7Cisg ICAgfSBlbHNlIHsKKyAgICAgICAgZ19hc3NlcnRfY21wc3RyKG91dHB1dCwgPT0sIGRhdGEt PmlucHV0KTsKKyAgICB9CisgICAgZ19mcmVlKG91dHB1dCk7CisKKyAgICBnX2ZyZWUoaW5k aXJlY3QpOworICAgIGd1ZXN0X2ZyZWUoYWxsb2MsIGtleV9hZGRyKTsKKyAgICBpZiAoZGF0 YS0+aXZfbGVuID4gMCkgeworICAgICAgICBndWVzdF9mcmVlKGFsbG9jLCBpdl9hZGRyKTsK KyAgICB9CisgICAgZ3Vlc3RfZnJlZShhbGxvYywgc3JjX2FkZHIpOworICAgIGd1ZXN0X2Zy ZWUoYWxsb2MsIGRzdF9hZGRyKTsKKyAgICBndWVzdF9mcmVlKGFsbG9jLCBwYXJhX2FkZHIp OworICAgIGd1ZXN0X2ZyZWUoYWxsb2MsIHJlcV9hZGRyKTsKKyAgICBndWVzdF9mcmVlKGFs bG9jLCBzdGF0dXNfYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkCit2aXJ0aW9fY3J5cHRvX3Rl c3RfY2lwaGVyKFFWaXJ0aW9EZXZpY2UgKmRldiwKKyAgICAgICAgICAgIFFHdWVzdEFsbG9j YXRvciAqYWxsb2MsIFFWaXJ0UXVldWUgKmN0cmxxLAorICAgICAgICAgICAgUVZpcnRRdWV1 ZSAqZGF0YXEsIFZpcnRJT0NyeXB0b0NpcGhlclRlc3REYXRhICpkYXRhLAorICAgICAgICAg ICAgaW50IGVuY3J5cHQpCit7CisgICAgaWYgKCFkYXRhLT5pc19zdGF0ZWxzc19tb2RlKSB7 CisgICAgICAgIHZpcnRpb19jcnlwdG9fdGVzdF9jaXBoZXJfc2Vzc2lvbl9tb2RlKGRldiwg YWxsb2MsCisgICAgICAgICAgICBjdHJscSwgZGF0YXEsIGRhdGEsIGVuY3J5cHQpOworICAg IH0gZWxzZSB7CisgICAgICAgIHZpcnRpb19jcnlwdG9fdGVzdF9jaXBoZXJfc3RhdGVsZXNz X21vZGUoZGV2LCBhbGxvYywKKyAgICAgICAgICAgIGRhdGFxLCBkYXRhLCBlbmNyeXB0KTsK KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHZpcnRpb19jcnlwdG9fcGNpX2Jhc2ljKHZvaWQg Km9wYXF1ZSkKK3sKKyAgICBWaXJ0SU9DcnlwdG9DaXBoZXJUZXN0RGF0YSAqdGVzdF9kYXRh ID0gb3BhcXVlOworICAgIFFWaXJ0aW9QQ0lEZXZpY2UgKmRldjsKKyAgICBRUENJQnVzICpi dXM7CisgICAgUUd1ZXN0QWxsb2NhdG9yICphbGxvYzsKKyAgICBRVmlydFF1ZXVlUENJICpk YXRhcSwgKmNvbnRyb2xxOworICAgIHVpbnQzMl90IGZlYXR1cmVzOworCisgICAgYnVzID0g dmlydGlvX2NyeXB0b190ZXN0X3N0YXJ0KCk7CisgICAgZGV2ID0gdmlydGlvX2NyeXB0b19w Y2lfaW5pdChidXMsIFBDSV9TTE9UKTsKKworICAgIGFsbG9jID0gcGNfYWxsb2NfaW5pdCgp OworCisgICAgZmVhdHVyZXMgPSBxdmlydGlvX2dldF9mZWF0dXJlcygmZGV2LT52ZGV2KTsK KyAgICBnX2Fzc2VydF9jbXBoZXgoZmVhdHVyZXMgJiAoMXUgPDwgVklSVElPX1JJTkdfRl9J TkRJUkVDVF9ERVNDKSwgIT0sIDApOworCisgICAgaWYgKCF0ZXN0X2RhdGEtPmlzX3N0YXRl bHNzX21vZGUpIHsKKyAgICAgICAgZmVhdHVyZXMgPSBmZWF0dXJlcyAmIH4oUVZJUlRJT19G X0JBRF9GRUFUVVJFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDF1IDw8 IFZJUlRJT19SSU5HX0ZfRVZFTlRfSURYIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgMXUgPDwgVklSVElPX0NSWVBUT19GX01VWF9NT0RFIHwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMXUgPDwgVklSVElPX0NSWVBUT19GX0NJUEhFUl9TVEFURUxF U1NfTU9ERSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGZlYXR1cmVzID0gZmVhdHVyZXMg JiB+KFFWSVJUSU9fRl9CQURfRkVBVFVSRSB8CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgxdSA8PCBWSVJUSU9fUklOR19GX0VWRU5UX0lEWCkpOworICAgIH0KKyAgICBx dmlydGlvX3NldF9mZWF0dXJlcygmZGV2LT52ZGV2LCBmZWF0dXJlcyk7CisKKyAgICBkYXRh cSA9IChRVmlydFF1ZXVlUENJICopcXZpcnRxdWV1ZV9zZXR1cCgmZGV2LT52ZGV2LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jLCAwKTsKKyAg ICBjb250cm9scSA9IChRVmlydFF1ZXVlUENJICopcXZpcnRxdWV1ZV9zZXR1cCgmZGV2LT52 ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9j LCAxKTsKKworICAgIHZpcnRpb19jcnlwdG9fZHJpdmVyX2luaXQoJmRldi0+dmRldik7CisK KyAgICAvKiBTdGVwIDE6IEVuY3J5cHRpb24gKi8KKyAgICB2aXJ0aW9fY3J5cHRvX3Rlc3Rf Y2lwaGVyKCZkZXYtPnZkZXYsIGFsbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJmNvbnRyb2xxLT52cSwgJmRhdGFxLT52cSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRlc3RfZGF0YSwgMSk7CisgICAgLyogU3RlcCAyOiBEZWNyeXB0aW9uICovCisg ICAgdmlydGlvX2NyeXB0b190ZXN0X2NpcGhlcigmZGV2LT52ZGV2LCBhbGxvYywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZjb250cm9scS0+dnEsICZkYXRhcS0+dnEsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X2RhdGEsIDApOworCisgICAgLyog RW5kIHRlc3QgKi8KKyAgICBndWVzdF9mcmVlKGFsbG9jLCBkYXRhcS0+dnEuZGVzYyk7Cisg ICAgZ3Vlc3RfZnJlZShhbGxvYywgY29udHJvbHEtPnZxLmRlc2MpOworICAgIHBjX2FsbG9j X3VuaW5pdChhbGxvYyk7CisgICAgcXZpcnRpb19wY2lfZGV2aWNlX2Rpc2FibGUoZGV2KTsK KyAgICBnX2ZyZWUoZGV2KTsKKyAgICBxcGNpX2ZyZWVfcGMoYnVzKTsKKyAgICB0ZXN0X2Vu ZCgpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgY29u c3QgY2hhciAqcWVtdTsKKyAgICBjb25zdCBjaGFyICphcmNoOworICAgIGludCBpLCByZXQ7 CisKKyAgICBxZW11ID0gZ2V0ZW52KCJRVEVTVF9RRU1VX0JJTkFSWSIpOworICAgIGlmIChx ZW11ID09IE5VTEwpIHsKKyAgICAgICAgcmV0ID0gc2V0ZW52KCJRVEVTVF9RRU1VX0JJTkFS WSIsCisgICAgICAgICAgICAgICAgICAgICAieDg2XzY0LXNvZnRtbXUvcWVtdS1zeXN0ZW0t eDg2XzY0IiwgMCk7CisgICAgICAgIGdfYXNzZXJ0KHJldCA9PSAwKTsKKyAgICB9CisKKyAg ICBhcmNoID0gcXRlc3RfZ2V0X2FyY2goKTsKKworICAgIGdfdGVzdF9pbml0KCZhcmdjLCAm YXJndiwgTlVMTCk7CisKKyAgICBpZiAoc3RyY21wKGFyY2gsICJpMzg2IikgPT0gMCB8fCBz dHJjbXAoYXJjaCwgIng4Nl82NCIpID09IDApIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8 IEdfTl9FTEVNRU5UUyhjaXBoZXJfdGVzdF9kYXRhKTsgaSsrKSB7CisgICAgICAgICAgICBn X3Rlc3RfYWRkX2RhdGFfZnVuYyhjaXBoZXJfdGVzdF9kYXRhW2ldLnBhdGgsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSZjaXBoZXJfdGVzdF9kYXRhW2ld LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEdUZXN0RGF0YUZ1bmMpdmly dGlvX2NyeXB0b19wY2lfYmFzaWMpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu IGdfdGVzdF9ydW4oKTsKK30KLS0gCjEuOC4zLjEKCg== --------------000905010807050209040800--