From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexey G Subject: [PATCH] xen-mapcache: Fix the bug when overlapping emulated DMA operations may cause inconsistency in guest memory mappings Date: Tue, 11 Jul 2017 06:00:15 +1000 Message-ID: <20170711060015.00004b1f@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org, Anthony PERARD , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org ClVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyBub3JtYWwgeGVuLW1hcGNhY2hlIGZ1bmN0aW9u aW5nIG1heSBiZSBicm9rZW4KYnkgZ3Vlc3QncyBhY3Rpb25zLiBUaGlzIG1heSBsZWFkIHRvIGVp dGhlciBRRU1VIHBlcmZvcm1pbmcgZXhpdCgpIGR1ZSB0bwphIGNhdWdodCBiYWQgcG9pbnRlciAo YW5kIHdpdGggUUVNVSBwcm9jZXNzIGdvbmUgdGhlIGd1ZXN0IGRvbWFpbiBzaW1wbHkKYXBwZWFy cyBodW5nIGFmdGVyd2FyZHMpIG9yIGFjdHVhbCB1c2Ugb2YgdGhlIGluY29ycmVjdCBwb2ludGVy IGluc2lkZQpRRU1VIGFkZHJlc3Mgc3BhY2UgLS0gYSB3cml0ZSB0byB1bm1hcHBlZCBtZW1vcnkg aXMgcG9zc2libGUuIFRoZSBidWcgaXMKaGFyZCB0byByZXByb2R1Y2Ugb24gYSBpNDQwIG1hY2hp bmUgYXMgbXVsdGlwbGUgRE1BIHNvdXJjZXMgYXJlIHJlcXVpcmVkCih0aG91Z2ggaXQncyBwb3Nz aWJsZSBpbiB0aGVvcnksIHVzaW5nIG11bHRpcGxlIGVtdWxhdGVkIGRldmljZXMpLCBidXQgY2Fu CmJlIHJlcHJvZHVjZWQgc29tZXdoYXQgZWFzaWx5IG9uIGEgUTM1IG1hY2hpbmUgdXNpbmcgYW4g ZW11bGF0ZWQgQUhDSQpjb250cm9sbGVyIC0tIGVhY2ggTkNRIHF1ZXVlIGNvbW1hbmQgc2xvdCBt YXkgYmUgdXNlZCBhcyBhbiBpbmRlcGVuZGVudApETUEgc291cmNlIGV4LiB1c2luZyBSRUFEIEZQ RE1BIFFVRVVFRCBjb21tYW5kLCBzbyBhIHNpbmdsZSBzdG9yYWdlCmRldmljZSBvbiB0aGUgQUhD SSBjb250cm9sbGVyIHBvcnQgd2lsbCBiZSBlbm91Z2ggdG8gcHJvZHVjZSBtdWx0aXBsZSBETUFz Cih1cCB0byAzMikuIFRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUgaXNzdWUgZm9sbG93 cy4KClhlbi1tYXBjYWNoZSBwcm92aWRlcyBhbiBhYmlsaXR5IHRvIG1hcCBwYXJ0cyBvZiBhIGd1 ZXN0IG1lbW9yeSBpbnRvClFFTVUncyBvd24gYWRkcmVzcyBzcGFjZSB0byB3b3JrIHdpdGguCgpU aGVyZSBhcmUgdHdvIHR5cGVzIG9mIGNhY2hlIGxvb2t1cHM6CiAtIHRyYW5zbGF0aW5nIGEgZ3Vl c3QgcGh5c2ljYWwgYWRkcmVzcyBpbnRvIGEgcG9pbnRlciBpbiBRRU1VJ3MgYWRkcmVzcwogICBz cGFjZSwgbWFwcGluZyBhIHBhcnQgb2YgZ3Vlc3QgZG9tYWluIG1lbW9yeSBpZiBuZWNlc3Nhcnkg KHdoaWxlIHRyeWluZwogICB0byByZWR1Y2UgYSBudW1iZXIgb2Ygc3VjaCAocmUpbWFwcGluZ3Mg dG8gYSBtaW5pbXVtKQogLSB0cmFuc2xhdGluZyBhIFFFTVUncyBwb2ludGVyIGJhY2sgdG8gaXRz IHBoeXNpY2FsIGFkZHJlc3MgaW4gZ3Vlc3QgUkFNCgpUaGVzZSBsb29rdXBzIGFyZSBtYW5hZ2Vk IHZpYSB0d28gbGlua2VkLWxpc3RzIG9mIHN0cnVjdHVyZXMuCk1hcENhY2hlRW50cnkgaXMgdXNl ZCBmb3IgZm9yd2FyZCBjYWNoZSBsb29rdXBzLCB3aGlsZSBNYXBDYWNoZVJldiAtLSBmb3IKcmV2 ZXJzZSBsb29rdXBzLgoKRXZlcnkgZ3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBpcyBicm9rZW4gZG93 biBpbnRvIDIgcGFydHM6CiAgICBhZGRyZXNzX2luZGV4ICA9IHBoeXNfYWRkciA+PiBNQ0FDSEVf QlVDS0VUX1NISUZUOwogICAgYWRkcmVzc19vZmZzZXQgPSBwaHlzX2FkZHIgJiAoTUNBQ0hFX0JV Q0tFVF9TSVpFIC0gMSk7CgpNQ0FDSEVfQlVDS0VUX1NISUZUIGRlcGVuZHMgb24gYSBzeXN0ZW0g KDMyLzY0KSBhbmQgaXMgZXF1YWwgdG8gMjAgZm9yCmEgNjQtYml0IHN5c3RlbSAod2hpY2ggYXNz dW1lZCBmb3IgdGhlIGZ1cnRoZXIgZGVzY3JpcHRpb24pLiBCYXNpY2FsbHksCnRoaXMgbWVhbnMg dGhhdCB3ZSBkZWFsIHdpdGggMSBNQiBjaHVua3MgYW5kIG9mZnNldHMgd2l0aGluIHRob3NlIDEg TUIKY2h1bmtzLiBBbGwgbWFwcGluZ3MgYXJlIGNyZWF0ZWQgd2l0aCAxTUItZ3JhbnVsYXJpdHks IGkuZS4gMU1CLzJNQi8zTUIKZXRjLiBNb3N0IERNQSB0cmFuc2ZlcnMgdHlwaWNhbGx5IGFyZSBs ZXNzIHRoYW4gMU1CLCBob3dldmVyLCBpZiB0aGUKdHJhbnNmZXIgY3Jvc3NlcyBhbnkgMU1CIGJv cmRlcihzKSAtIHRoYW4gYSBuZWFyZXN0IGxhcmdlciBtYXBwaW5nIHNpemUKd2lsbCBiZSB1c2Vk LCBzbyBleC4gYSA1MTItYnl0ZSBETUEgdHJhbnNmZXIgd2l0aCB0aGUgc3RhcnQgYWRkcmVzcwo3 MDBGRkY4MGggd2lsbCBhY3R1YWxseSByZXF1aXJlIGEgMk1CIHJhbmdlLgoKQ3VycmVudCBpbXBs ZW1lbnRhdGlvbiBhc3N1bWVzIHRoYXQgTWFwQ2FjaGVFbnRyaWVzIGFyZSB1bmlxdWUgZm9yIGEg Z2l2ZW4KYWRkcmVzc19pbmRleCBhbmQgc2l6ZSBwYWlyIGFuZCB0aGF0IGEgc2luZ2xlIE1hcENh Y2hlRW50cnkgbWF5IGJlIHJldXNlZApieSBtdWx0aXBsZSByZXF1ZXN0cyAtLSBpbiB0aGlzIGNh c2UgdGhlICdsb2NrJyBmaWVsZCB3aWxsIGJlIGxhcmdlciB0aGFuCjEuIE9uIG90aGVyIGhhbmQs IGVhY2ggcmVxdWVzdGVkIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgKHdpdGggJ2xvY2snIGZsYWcp CmlzIGRlc2NyaWJlZCBieSBlYWNoIG93biBNYXBDYWNoZVJldi4gU28gdGhlcmUgbWF5IGJlIG11 bHRpcGxlIE1hcENhY2hlUmV2CmVudHJpZXMgY29ycmVzcG9uZGluZyB0byBhIHNpbmdsZSBNYXBD YWNoZUVudHJ5LiBUaGUgeGVuLW1hcGNhY2hlIGNvZGUKdXNlcyBNYXBDYWNoZVJldiBlbnRyaWVz IHRvIHJldHJpZXZlIHRoZSBhZGRyZXNzX2luZGV4ICYgc2l6ZSBwYWlyIHdoaWNoCmluIHR1cm4g dXNlZCB0byBmaW5kIGEgcmVsYXRlZCBNYXBDYWNoZUVudHJ5LiBUaGUgJ2xvY2snIGZpZWxkIHdp dGhpbgphIE1hcENhY2hlRW50cnkgc3RydWN0dXJlIGlzIGFjdHVhbGx5IGEgcmVmZXJlbmNlIGNv dW50ZXIgd2hpY2ggc2hvd3MKYSBudW1iZXIgb2YgY29ycmVzcG9uZGluZyBNYXBDYWNoZVJldiBl bnRyaWVzLgoKVGhlIGJ1ZyBsaWVzIGluIGFiaWxpdHkgZm9yIHRoZSBndWVzdCB0byBpbmRpcmVj dGx5IG1hbmlwdWxhdGUgd2l0aCB0aGUKeGVuLW1hcGNhY2hlIE1hcENhY2hlRW50cmllcyBsaXN0 IHZpYSBhIHNwZWNpYWwgc2VxdWVuY2Ugb2YgRE1BCm9wZXJhdGlvbnMsIHR5cGljYWxseSBmb3Ig c3RvcmFnZSBkZXZpY2VzLiBJbiBvcmRlciB0byB0cmlnZ2VyIHRoZSBidWcsCmd1ZXN0IG5lZWRz IHRvIGlzc3VlIERNQSBvcGVyYXRpb25zIGluIHNwZWNpZmljIG9yZGVyIGFuZCB0aW1pbmcuCkFs dGhvdWdoIHhlbi1tYXBjYWNoZSBpcyBwcm90ZWN0ZWQgYnkgdGhlIG11dGV4IGxvY2sgLS0gdGhp cyBkb2Vzbid0IGhlbHAKaW4gdGhpcyBjYXNlLCBhcyB0aGUgYnVnIGlzIG5vdCBkdWUgdG8gYSBy YWNlIGNvbmRpdGlvbi4KClN1cHBvc2Ugd2UgaGF2ZSAzIERNQSB0cmFuc2ZlcnMsIG5hbWVseSBB LCBCIGFuZCBDLCB3aGVyZQotIHRyYW5zZmVyIEEgY3Jvc3NlcyAxTUIgYm9yZGVyIGFuZCB0aHVz IHVzZXMgYSAyTUIgbWFwcGluZwotIHRyYW5zZmVycyBCIGFuZCBDIGFyZSBub3JtYWwgdHJhbnNm ZXJzIHdpdGhpbiAxTUIgcmFuZ2UKLSBhbmQgYWxsIDMgdHJhbnNmZXJzIGJlbG9uZyB0byB0aGUg c2FtZSBhZGRyZXNzX2luZGV4CgpJbiB0aGlzIGNhc2UsIGlmIGFsbCB0aGVzZSB0cmFuc2ZlcnMg YXJlIHRvIGJlIGV4ZWN1dGVkIG9uZS1ieS1vbmUKKHdpdGhvdXQgb3ZlcmxhcHMpLCBubyBzcGVj aWFsIHRyZWF0bWVudCBuZWNlc3NhcnkgLS0gZWFjaCB0cmFuc2ZlcidzCm1hcHBpbmcgbG9jayB3 aWxsIGJlIHNldCBhbmQgdGhlbiBjbGVhcmVkIG9uIHVubWFwIGJlZm9yZSBzdGFydGluZwp0aGUg bmV4dCB0cmFuc2Zlci4KVGhlIHNpdHVhdGlvbiBjaGFuZ2VzIHdoZW4gRE1BIHRyYW5zZmVycyBv dmVybGFwIGluIHRpbWUsIGV4LiBsaWtlIHRoaXM6CgogIHw9PT09PSB0cmFuc2ZlciBBICgyTUIp ID09PT09fAoKICAgICAgICAgICAgICB8PT09PT0gdHJhbnNmZXIgQiAoMU1CKSA9PT09PXwKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgfD09PT09IHRyYW5zZmVyIEMgKDFNQikgPT09PT18CiB0 aW1lIC0tLT4KCkluIHRoaXMgc2l0dWF0aW9uIHRoZSBmb2xsb3dpbmcgc2VxdWVuY2Ugb2YgYWN0 aW9ucyBoYXBwZW5zOgoKMS4gdHJhbnNmZXIgQSBjcmVhdGVzIGEgbWFwcGluZyB0byAyTUIgYXJl YSAobG9jaz0xKQoyLiB0cmFuc2ZlciBCICgxTUIpIHRyaWVzIHRvIGZpbmQgYXZhaWxhYmxlIG1h cHBpbmcgYnV0IGNhbm5vdCBmaW5kIG9uZQogICBiZWNhdXNlIHRyYW5zZmVyIEEgaXMgc3RpbGwg aW4gcHJvZ3Jlc3MsIGFuZCBpdCBoYXMgMk1CIHNpemUgKyBub24temVybwogICBsb2NrLiBTbyB0 cmFuc2ZlciBCIGNyZWF0ZXMgYW5vdGhlciBtYXBwaW5nIC0tIHNhbWUgYWRkcmVzc19pbmRleCwK ICAgYnV0IDFNQiBzaXplLgozLiB0cmFuc2ZlciBBIGNvbXBsZXRlcywgbWFraW5nIDFzdCBtYXBw aW5nIGVudHJ5IGF2YWlsYWJsZSBieSBzZXR0aW5nIGl0cwogICBsb2NrIHRvIDAKNC4gdHJhbnNm ZXIgQyBzdGFydHMgYW5kIHRyaWVzIHRvIGZpbmQgYXZhaWxhYmxlIG1hcHBpbmcgZW50cnkgYW5k IHNlZXMKICAgdGhhdCAxc3QgZW50cnkgaGFzIGxvY2s9MCwgc28gaXQgdXNlcyB0aGlzIGVudHJ5 IGJ1dCByZW1hcHMgdGhlIG1hcHBpbmcKICAgdG8gYSAxTUIgc2l6ZQo1LiB0cmFuc2ZlciBCIGNv bXBsZXRlcyBhbmQgYnkgdGhpcyB0aW1lCiAgLSB0aGVyZSBhcmUgdHdvIGxvY2tlZCBlbnRyaWVz IGluIHRoZSBNYXBDYWNoZUVudHJ5IGxpc3Qgd2l0aCB0aGUgU0FNRQogICAgdmFsdWVzIGZvciBi b3RoIGFkZHJlc3NfaW5kZXggYW5kIHNpemUKICAtIHRoZSBlbnRyeSBmb3IgdHJhbnNmZXIgQiBh Y3R1YWxseSByZXNpZGVzIGZhcnRoZXIgaW4gbGlzdCB3aGlsZQogICAgdHJhbnNmZXIgQydzIGVu dHJ5IGlzIGZpcnN0CjYuIHhlbl9yYW1fYWRkcl9mcm9tX21hcGNhY2hlKCkgZm9yIHRyYW5zZmVy IEIgZ2V0cyBjb3JyZWN0IGFkZHJlc3NfaW5kZXgKICAgYW5kIHNpemUgcGFpciBmcm9tIGNvcnJl c3BvbmRpbmcgTWFwQ2FjaGVSZXYgZW50cnksIGJ1dCB0aGVuIGl0IHN0YXJ0cwogICBsb29raW5n IGZvciBNYXBDYWNoZUVudHJ5IHdpdGggdGhlc2UgdmFsdWVzIGFuZCBmaW5kcyB0aGUgZmlyc3Qg ZW50cnkKICAgLS0gd2hpY2ggYmVsb25ncyB0byB0cmFuc2ZlciBDLgoKQXQgdGhpcyBwb2ludCB0 aGVyZSBtYXkgYmUgZm9sbG93aW5nIHBvc3NpYmxlIChiYWQpIGNvbnNlcXVlbmNlczoKCjEuIHhl bl9yYW1fYWRkcl9mcm9tX21hcGNhY2hlKCkgd2lsbCB1c2UgYSB3cm9uZyBlbnRyeS0+dmFkZHJf YmFzZSB2YWx1ZQogICBpbiB0aGlzIHN0YXRlbWVudDoKCiAgIHJhZGRyID0gKHJldmVudHJ5LT5w YWRkcl9pbmRleCA8PCBNQ0FDSEVfQlVDS0VUX1NISUZUKSArCiAgICAgICAoKHVuc2lnbmVkIGxv bmcpIHB0ciAtICh1bnNpZ25lZCBsb25nKSBlbnRyeS0+dmFkZHJfYmFzZSk7CgpyZXN1bHRpbmcg aW4gYW4gaW5jb3JyZW50IHJhZGRyIHZhbHVlIHJldHVybmVkIGZyb20gdGhlIGZ1bmN0aW9uLiBU aGUKKHB0ciAtIGVudHJ5LT52YWRkcl9iYXNlKSBleHByZXNzaW9uIG1heSBwcm9kdWNlIGJvdGgg cG9zaXRpdmUgYW5kIG5lZ2F0aXZlCm51bWJlcnMgYW5kIGl0cyBhY3R1YWwgdmFsdWUgbWF5IGRp ZmZlciBncmVhdGx5IGFzIHRoZXJlIGFyZSBtYW55Cm1hcC91bm1hcCBvcGVyYXRpb25zIHRha2Ug cGxhY2UuIElmIHRoZSB2YWx1ZSB3aWxsIGJlIGJleW9uZCBndWVzdCBSQU0KbGltaXRzIHRoZW4g YSAiQmFkIFJBTSBvZmZzZXQiIGVycm9yIHdpbGwgYmUgdHJpZ2dlcmVkIGFuZCBsb2dnZWQsCmZv bGxvd2VkIGJ5IGV4aXQoKSBpbiBRRU1VLgoKMi4gSWYgcmFkZHIgdmFsdWUgd29uJ3QgZXhjZWVk IGd1ZXN0IFJBTSBib3VuZGFyaWVzLCB0aGUgc2FtZSBzZXF1ZW5jZQpvZiBhY3Rpb25zIHdpbGwg YmUgcGVyZm9ybWVkIGZvciB4ZW5faW52YWxpZGF0ZV9tYXBfY2FjaGVfZW50cnkoKSBvbiBETUEK dW5tYXAsIHJlc3VsdGluZyBpbiBhIHdyb25nIE1hcENhY2hlRW50cnkgYmVpbmcgdW5tYXBwZWQg d2hpbGUgRE1BCm9wZXJhdGlvbiB3aGljaCB1c2VzIGl0IGlzIHN0aWxsIGFjdGl2ZS4gVGhlIGFi b3ZlIGV4YW1wbGUgbXVzdApiZSBleHRlbmRlZCBieSBvbmUgbW9yZSBETUEgdHJhbnNmZXIgaW4g b3JkZXIgdG8gYWxsb3cgdW5tYXBwaW5nIGFzIHRoZQpmaXJzdCBtYXBwaW5nIGluIHRoZSBsaXN0 IGlzIHNvcnQgb2YgcmVzaWRlbnQuCgpUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGJlaGF2aW9yIGlu IHdoaWNoIE1hcENhY2hlRW50cnkncyBhcmUgYWRkZWQgdG8gdGhlCmxpc3QsIGF2b2lkaW5nIGR1 cGxpY2F0ZXMuCgpTaWduZWQtb2ZmLWJ5OiBBbGV4ZXkgR2VyYXNpbWVua28gPHgxOTE3eEBnbWFp bC5jb20+Ci0tLQogaHcvaTM4Ni94ZW4veGVuLW1hcGNhY2hlLmMgfCAzMyArKysrKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCA1 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2h3L2kzODYveGVuL3hlbi1tYXBjYWNoZS5jIGIv aHcvaTM4Ni94ZW4veGVuLW1hcGNhY2hlLmMKaW5kZXggZTYwMTU2Yy4uODRmMjVlZiAxMDA2NDQK LS0tIGEvaHcvaTM4Ni94ZW4veGVuLW1hcGNhY2hlLmMKKysrIGIvaHcvaTM4Ni94ZW4veGVuLW1h cGNhY2hlLmMKQEAgLTIwNiw2ICsyMDYsNyBAQCBzdGF0aWMgdWludDhfdCAqeGVuX21hcF9jYWNo ZV91bmxvY2tlZChod2FkZHIgcGh5c19hZGRyLCBod2FkZHIgc2l6ZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbG9jaywgYm9vbCBkbWEpCiB7CiAgICAg TWFwQ2FjaGVFbnRyeSAqZW50cnksICpwZW50cnkgPSBOVUxMOworICAgIE1hcENhY2hlRW50cnkg KmF2bF9lbnRyeSA9IE5VTEwsICphdmxfZW50cnlfcHJldiA9IE5VTEw7CiAgICAgaHdhZGRyIGFk ZHJlc3NfaW5kZXg7CiAgICAgaHdhZGRyIGFkZHJlc3Nfb2Zmc2V0OwogICAgIGh3YWRkciBjYWNo ZV9zaXplID0gc2l6ZTsKQEAgLTI1MSwxNCArMjUyLDM2IEBAIHRyeWFnYWluOgogCiAgICAgZW50 cnkgPSAmbWFwY2FjaGUtPmVudHJ5W2FkZHJlc3NfaW5kZXggJSBtYXBjYWNoZS0+bnJfYnVja2V0 c107CiAKLSAgICB3aGlsZSAoZW50cnkgJiYgZW50cnktPmxvY2sgJiYgZW50cnktPnZhZGRyX2Jh c2UgJiYKLSAgICAgICAgICAgIChlbnRyeS0+cGFkZHJfaW5kZXggIT0gYWRkcmVzc19pbmRleCB8 fCBlbnRyeS0+c2l6ZSAhPSBjYWNoZV9zaXplIHx8Ci0gICAgICAgICAgICAgIXRlc3RfYml0cyhh ZGRyZXNzX29mZnNldCA+PiBYQ19QQUdFX1NISUZULAotICAgICAgICAgICAgICAgICB0ZXN0X2Jp dF9zaXplID4+IFhDX1BBR0VfU0hJRlQsCi0gICAgICAgICAgICAgICAgIGVudHJ5LT52YWxpZF9t YXBwaW5nKSkpIHsKKyAgICAvKiBmaW5kIGEgcmVtYXBwYWJsZSBlbnRyeS4gQW4gZXhpc3Rpbmcg bG9ja2VkIGVudHJ5IHdoaWNoIGNhbiBiZSByZXVzZWQKKyAgICAgKiBoYXMgYSBwcmlvcml0eSBv dmVyIGFsbCBvdGhlciBlbnRyaWVzICh3aXRoIGxvY2s9MCwgZXRjKS4KKyAgICAgKiBOb3JtYWxs eSB0aGVyZSB3aWxsIGJlIGp1c3QgZmV3IGVudHJpZXMgZm9yIGEgZ2l2ZW4gYWRkcmVzc19pbmRl eAorICAgICAqIGJ1Y2tldCwgdHlwaWNhbGx5IDEtMiBlbnRyaWVzIG9ubHkKKyAgICAgKi8KKyAg ICB3aGlsZSAoZW50cnkpIHsKKyAgICAgICAgaWYgKGVudHJ5LT5sb2NrICYmCisgICAgICAgICAg ICBlbnRyeS0+cGFkZHJfaW5kZXggPT0gYWRkcmVzc19pbmRleCAmJgorICAgICAgICAgICAgZW50 cnktPnNpemUgPT0gY2FjaGVfc2l6ZSAmJgorICAgICAgICAgICAgdGVzdF9iaXRzKGFkZHJlc3Nf b2Zmc2V0ID4+IFhDX1BBR0VfU0hJRlQsCisgICAgICAgICAgICAgICAgIHRlc3RfYml0X3NpemUg Pj4gWENfUEFHRV9TSElGVCwgZW50cnktPnZhbGlkX21hcHBpbmcpKSB7CisgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICghZW50cnktPmxvY2sgfHwgIWVudHJ5 LT52YWRkcl9iYXNlKSB7CisgICAgICAgICAgICBhdmxfZW50cnkgPSBlbnRyeTsKKyAgICAgICAg ICAgIGF2bF9lbnRyeV9wcmV2ID0gcGVudHJ5OworICAgICAgICB9CisKICAgICAgICAgcGVudHJ5 ID0gZW50cnk7CiAgICAgICAgIGVudHJ5ID0gZW50cnktPm5leHQ7CiAgICAgfQorCisgICAgLyog aWYgdGhlIHJldXNlYWJsZSBlbnRyeSB3YXMgbm90IGZvdW5kLCB1c2UgYW55IGF2YWlsYWJsZS4K KyAgICAgKiBPdGhlcndpc2UsIGEgbmV3IGVudHJ5IHdpbGwgYmUgY3JlYXRlZAorICAgICAqLwor ICAgIGlmIChhdmxfZW50cnkgJiYgIWVudHJ5KSB7CisgICAgICAgIHBlbnRyeSA9IGF2bF9lbnRy eV9wcmV2OworICAgICAgICBlbnRyeSA9IGF2bF9lbnRyeTsKKyAgICB9CisKICAgICBpZiAoIWVu dHJ5KSB7CiAgICAgICAgIGVudHJ5ID0gZ19tYWxsb2MwKHNpemVvZiAoTWFwQ2FjaGVFbnRyeSkp OwogICAgICAgICBwZW50cnktPm5leHQgPSBlbnRyeTsKLS0gCjIuMS40CgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVs Cg==