From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Adalbert=20Laz=C4=83r?= Subject: [RFC PATCH v6 03/92] kvm: introspection: add permission access ioctls Date: Fri, 9 Aug 2019 18:59:18 +0300 Message-ID: <20190809160047.8319-4-alazar@bitdefender.com> References: <20190809160047.8319-1-alazar@bitdefender.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190809160047.8319-1-alazar@bitdefender.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: kvm@vger.kernel.org Cc: Tamas K Lengyel , Weijiang Yang , Yu C , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Jan Kiszka , =?UTF-8?q?Samuel=20Laur=C3=A9n?= , Konrad Rzeszutek Wilk , virtualization@lists.linux-foundation.org, =?UTF-8?q?Adalbert=20Laz=C4=83r?= , linux-mm@kvack.org, Patrick Colp , Mathieu Tarral , Stefan Hajnoczi , Paolo Bonzini , Zhang@mail.linuxfoundation.org, =?UTF-8?q?Mihai=20Don=C8=9Bu?= List-Id: virtualization@lists.linuxfoundation.org S1ZNX0lOVFJPU1BFQ1RJT05fQ09NTUFORCBhbmQgS1ZNX0lOVFJPU1BFQ1RJT05fRVZFTlRTIHNo b3VsZCBiZSB1c2VkCmJ5IHVzZXJzcGFjZS9RRU1VIHRvIGFsbG93IGFjY2VzcyB0byBzcGVjaWZp YyAob3IgYWxsKSBpbnRyb3NwZWN0aW9uCmNvbW1hbmRzIGFuZCBldmVudHMuCgpCeSBkZWZhdWx0 LCBhbGwgaW50cm9zcGVjdGlvbiBldmVudHMgYW5kIGFsbW9zdCBhbGwgaW50cm9zcGVjdGlvbiBj b21tYW5kcwphcmUgZGlzYWxsb3dlZC4gVGhlcmUgYXJlIGEgY291cGxlIG9mIGNvbW1hbmRzIHRo YXQgYXJlIGFsd2F5cyBhbGxvd2VkCih0aG9zZSBxdWVyeWluZyB0aGUgaW50cm9zcGVjdGlvbiBj YXBhYmlsaXRpZXMpLgoKU2lnbmVkLW9mZi1ieTogQWRhbGJlcnQgTGF6xINyIDxhbGF6YXJAYml0 ZGVmZW5kZXIuY29tPgotLS0KIERvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vYXBpLnR4dCB8IDU2 ICsrKysrKysrKysrKysrKysrKystCiBpbmNsdWRlL3VhcGkvbGludXgva3ZtLmggICAgICAgICAg fCAgNiArKysKIHZpcnQva3ZtL2t2bV9tYWluLmMgICAgICAgICAgICAgICB8ICA2ICsrKwogdmly dC9rdm0va3ZtaS5jICAgICAgICAgICAgICAgICAgIHwgODUgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKwogdmlydC9rdm0va3ZtaV9pbnQuaCAgICAgICAgICAgICAgIHwgNTEgKysrKysr KysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAyMDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxl dGlvbigtKQoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vYXBpLnR4dCBi L0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vYXBpLnR4dAppbmRleCAyOGQ0NDI5ZjlhZTkuLmVh MzEzNWQzNjVjNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9hcGkudHh0 CisrKyBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0vYXBpLnR4dApAQCAtMzg4OSw3ICszODg5 LDYxIEBAIEl0IHdpbGwgZmFpbCB3aXRoIC1FSU5WQUwgaWYgcGFkZGluZyBpcyBub3QgemVyby4K IFRoZSBLVk1JIHZlcnNpb24gY2FuIGJlIHJldHJpZXZlZCB1c2luZyB0aGUgS1ZNX0NBUF9JTlRS T1NQRUNUSU9OIG9mCiB0aGUgS1ZNX0NIRUNLX0VYVEVOU0lPTiBpb2N0bCgpIGF0IHJ1bi10aW1l LgogCi00Ljk5NyBLVk1fSU5UUk9TUEVDVElPTl9VTkhPT0sKKzQuOTk3IEtWTV9JTlRST1NQRUNU SU9OX0NPTU1BTkQKKworQ2FwYWJpbGl0eTogS1ZNX0NBUF9JTlRST1NQRUNUSU9OCitBcmNoaXRl Y3R1cmVzOiB4ODYKK1R5cGU6IHZtIGlvY3RsCitQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX2ludHJv c3BlY3Rpb25fZmVhdHVyZSAoaW4pCitSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUg dmFsdWUgb24gZXJyb3IKKworVGhpcyBpb2N0bCBpcyB1c2VkIHRvIGFsbG93IG9yIGRpc2FsbG93 IGludHJvc3BlY3Rpb24gY29tbWFuZHMKK2ZvciB0aGUgY3VycmVudCBWTS4gQnkgZGVmYXVsdCwg YWxtb3N0IGFsbCBjb21tYW5kcyBhcmUgZGlzYWxsb3dlZAorZXhjZXB0IGZvciB0aG9zZSB1c2Vk IHRvIHF1ZXJ5IHRoZSBBUEkuCisKK3N0cnVjdCBrdm1faW50cm9zcGVjdGlvbl9mZWF0dXJlIHsK KwlfX3UzMiBhbGxvdzsKKwlfX3MzMiBpZDsKK307CisKK0lmIGFsbG93IGlzIDEsIHRoZSBjb21t YW5kIHNwZWNpZmllZCBieSBpZCBpcyBhbGxvd2VkLiBJZiBhbGxvdyBpcyAwLAordGhlIGNvbW1h bmQgaXMgZGlzYWxsb3dlZC4KKworVW5sZXNzIHNldCB0byAtMSAobWVhbmluZyBhbGwgY29tbWFu ZHMpLCBpZCBtdXN0IGJlIGEgY29tbWFuZCBJRAorKGUuZy4gS1ZNSV9HRVRfVkVSU0lPTiwgS1ZN SV9HRVRfR1VFU1RfSU5GTyBldGMuKQorCitFcnJvcnM6CisKKyAgLUVJTlZBTCBpZiB0aGUgY29t bWFuZCBpcyB1bmtub3duCisgIC1FUEVSTSBpZiB0aGUgY29tbWFuZCBjYW4ndCBiZSBkaXNhbGxv d2VkIChlLmcuIEtWTUlfR0VUX1ZFUlNJT04pCisKKzQuOTk4IEtWTV9JTlRST1NQRUNUSU9OX0VW RU5UCisKK0NhcGFiaWxpdHk6IEtWTV9DQVBfSU5UUk9TUEVDVElPTgorQXJjaGl0ZWN0dXJlczog eDg2CitUeXBlOiB2bSBpb2N0bAorUGFyYW1ldGVyczogc3RydWN0IGt2bV9pbnRyb3NwZWN0aW9u X2ZlYXR1cmUgKGluKQorUmV0dXJuczogMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIHZhbHVlIG9u IGVycm9yCisKK1RoaXMgaW9jdGwgaXMgdXNlZCB0byBhbGxvdyBvciBkaXNhbGxvdyBpbnRyb3Nw ZWN0aW9uIGV2ZW50cworZm9yIHRoZSBjdXJyZW50IFZNLiBCeSBkZWZhdWx0LCBhbGwgZXZlbnRz IGFyZSBkaXNhbGxvd2VkLgorCitzdHJ1Y3Qga3ZtX2ludHJvc3BlY3Rpb25fZmVhdHVyZSB7CisJ X191MzIgYWxsb3c7CisJX19zMzIgaWQ7Cit9OworCitJZiBhbGxvdyBpcyAxLCB0aGUgZXZlbnQg c3BlY2lmaWVkIGJ5IGlkIGlzIGFsbG93ZWQuIElmIGFsbG93IGlzIDAsCit0aGUgZXZlbnQgaXMg ZGlzYWxsb3dlZC4KKworVW5sZXNzIHNldCB0byAtMSAobWVhbmluZyBhbGwgZXZlbnQpLCBpZCBt dXN0IGJlIGEgZXZlbnQgSUQKKyhlLmcuIEtWTUlfRVZFTlRfVU5IT09LLCBLVk1JX0VWRU5UX0NS LCBldGMuKQorCitFcnJvcnM6CisKKyAgLUVJTlZBTCBpZiB0aGUgZXZlbnQgaXMgdW5rbm93bgor Cis0Ljk5OSBLVk1fSU5UUk9TUEVDVElPTl9VTkhPT0sKIAogQ2FwYWJpbGl0eTogS1ZNX0NBUF9J TlRST1NQRUNUSU9OCiBBcmNoaXRlY3R1cmVzOiB4ODYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFw aS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAppbmRleCBiYWUzN2JmMzcz MzguLjJmZjA1ZmQxMjNlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oCisr KyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaApAQCAtMTUyNyw5ICsxNTI3LDE1IEBAIHN0cnVj dCBrdm1faW50cm9zcGVjdGlvbiB7CiAJX191MzIgcGFkZGluZzsKIAlfX3U4IHV1aWRbMTZdOwog fTsKK3N0cnVjdCBrdm1faW50cm9zcGVjdGlvbl9mZWF0dXJlIHsKKwlfX3UzMiBhbGxvdzsKKwlf X3MzMiBpZDsKK307CiAjZGVmaW5lIEtWTV9JTlRST1NQRUNUSU9OX0hPT0sgICAgX0lPVyhLVk1J TywgMHhmZiwgc3RydWN0IGt2bV9pbnRyb3NwZWN0aW9uKQogI2RlZmluZSBLVk1fSU5UUk9TUEVD VElPTl9VTkhPT0sgIF9JTyhLVk1JTywgMHhmZSkKIC8qIHdyaXRlIHRydWUgb24gZm9yY2UtcmVz ZXQsIGZhbHNlIG90aGVyd2lzZSAqLworI2RlZmluZSBLVk1fSU5UUk9TUEVDVElPTl9DT01NQU5E IF9JT1coS1ZNSU8sIDB4ZmQsIHN0cnVjdCBrdm1faW50cm9zcGVjdGlvbl9mZWF0dXJlKQorI2Rl ZmluZSBLVk1fSU5UUk9TUEVDVElPTl9FVkVOVCAgIF9JT1coS1ZNSU8sIDB4ZmMsIHN0cnVjdCBr dm1faW50cm9zcGVjdGlvbl9mZWF0dXJlKQogCiAjZGVmaW5lIEtWTV9ERVZfQVNTSUdOX0VOQUJM RV9JT01NVQkoMSA8PCAwKQogI2RlZmluZSBLVk1fREVWX0FTU0lHTl9QQ0lfMl8zCQkoMSA8PCAx KQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0va3ZtX21haW4uYyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMK aW5kZXggMDlhOTMwYWMwMDdkLi44Mzk5YjgyNmYyZDIgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2 bV9tYWluLmMKKysrIGIvdmlydC9rdm0va3ZtX21haW4uYwpAQCAtMzI3MCw2ICszMjcwLDEyIEBA IHN0YXRpYyBsb25nIGt2bV92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKIAljYXNlIEtWTV9J TlRST1NQRUNUSU9OX0hPT0s6CiAJCXIgPSBrdm1pX2lvY3RsX2hvb2soa3ZtLCBhcmdwKTsKIAkJ YnJlYWs7CisJY2FzZSBLVk1fSU5UUk9TUEVDVElPTl9DT01NQU5EOgorCQlyID0ga3ZtaV9pb2N0 bF9jb21tYW5kKGt2bSwgYXJncCk7CisJCWJyZWFrOworCWNhc2UgS1ZNX0lOVFJPU1BFQ1RJT05f RVZFTlQ6CisJCXIgPSBrdm1pX2lvY3RsX2V2ZW50KGt2bSwgYXJncCk7CisJCWJyZWFrOwogCWNh c2UgS1ZNX0lOVFJPU1BFQ1RJT05fVU5IT09LOgogCQlyID0ga3ZtaV9pb2N0bF91bmhvb2soa3Zt LCBhcmcpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bWkuYyBiL3ZpcnQva3Zt L2t2bWkuYwppbmRleCA1OTFmNmVlMjIxMzUuLmRjNjRmOTc1OTk4ZiAxMDA2NDQKLS0tIGEvdmly dC9rdm0va3ZtaS5jCisrKyBiL3ZpcnQva3ZtL2t2bWkuYwpAQCAtMTY5LDYgKzE2OSw5MSBAQCBp bnQga3ZtaV9pb2N0bF9ob29rKHN0cnVjdCBrdm0gKmt2bSwgdm9pZCBfX3VzZXIgKmFyZ3ApCiAJ cmV0dXJuIGt2bWlfaG9vayhrdm0sICZpKTsKIH0KIAorc3RhdGljIGludCBrdm1pX2lvY3RsX2dl dF9mZWF0dXJlKHZvaWQgX191c2VyICphcmdwLCBib29sICphbGxvdywgaW50ICppZCwKKwkJCQkg IHVuc2lnbmVkIGxvbmcgKmJpdG1hc2spCit7CisJc3RydWN0IGt2bV9pbnRyb3NwZWN0aW9uX2Zl YXR1cmUgZmVhdDsKKwlpbnQgYWxsX2JpdHMgPSAtMTsKKworCWlmIChjb3B5X2Zyb21fdXNlcigm ZmVhdCwgYXJncCwgc2l6ZW9mKGZlYXQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoZmVh dC5pZCA8IDAgJiYgZmVhdC5pZCAhPSBhbGxfYml0cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkq YWxsb3cgPSAhIShmZWF0LmFsbG93ICYgMSk7CisJKmlkID0gZmVhdC5pZDsKKwkqYml0bWFzayA9 ICppZCA9PSBhbGxfYml0cyA/IC0xIDogQklUKGZlYXQuaWQpOworCisJcmV0dXJuIDA7Cit9CisK K3N0YXRpYyBpbnQga3ZtaV9pb2N0bF9mZWF0dXJlKHN0cnVjdCBrdm0gKmt2bSwKKwkJCSAgICAg IGJvb2wgYWxsb3csIHVuc2lnbmVkIGxvbmcgKnJlcXVlc3RlZCwKKwkJCSAgICAgIHNpemVfdCBv ZmZfZGVzdCwgdW5zaWduZWQgaW50IG5iaXRzKQoreworCXVuc2lnbmVkIGxvbmcgKmRlc3Q7CisJ c3RydWN0IGt2bWkgKmlrdm07CisKKwlpZiAoYml0bWFwX2VtcHR5KHJlcXVlc3RlZCwgbmJpdHMp KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlrdm0gPSBrdm1pX2dldChrdm0pOworCWlmICghaWt2 bSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlkZXN0ID0gKHVuc2lnbmVkIGxvbmcgKikoKGNoYXIg Kilpa3ZtICsgb2ZmX2Rlc3QpOworCisJaWYgKGFsbG93KQorCQliaXRtYXBfb3IoZGVzdCwgZGVz dCwgcmVxdWVzdGVkLCBuYml0cyk7CisJZWxzZQorCQliaXRtYXBfYW5kbm90KGRlc3QsIGRlc3Qs IHJlcXVlc3RlZCwgbmJpdHMpOworCisJa3ZtaV9wdXQoa3ZtKTsKKworCXJldHVybiAwOworfQor CitpbnQga3ZtaV9pb2N0bF9ldmVudChzdHJ1Y3Qga3ZtICprdm0sIHZvaWQgX191c2VyICphcmdw KQoreworCURFQ0xBUkVfQklUTUFQKHJlcXVlc3RlZCwgS1ZNSV9OVU1fRVZFTlRTKTsKKwlERUNM QVJFX0JJVE1BUChrbm93biwgS1ZNSV9OVU1fRVZFTlRTKTsKKwlib29sIGFsbG93OworCWludCBl cnI7CisJaW50IGlkOworCisJZXJyID0ga3ZtaV9pb2N0bF9nZXRfZmVhdHVyZShhcmdwLCAmYWxs b3csICZpZCwgcmVxdWVzdGVkKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJYml0bWFw X2Zyb21fdTY0KGtub3duLCBLVk1JX0tOT1dOX0VWRU5UUyk7CisJYml0bWFwX2FuZChyZXF1ZXN0 ZWQsIHJlcXVlc3RlZCwga25vd24sIEtWTUlfTlVNX0VWRU5UUyk7CisKKwlyZXR1cm4ga3ZtaV9p b2N0bF9mZWF0dXJlKGt2bSwgYWxsb3csIHJlcXVlc3RlZCwKKwkJCQkgIG9mZnNldG9mKHN0cnVj dCBrdm1pLCBldmVudF9hbGxvd19tYXNrKSwKKwkJCQkgIEtWTUlfTlVNX0VWRU5UUyk7Cit9CisK K2ludCBrdm1pX2lvY3RsX2NvbW1hbmQoc3RydWN0IGt2bSAqa3ZtLCB2b2lkIF9fdXNlciAqYXJn cCkKK3sKKwlERUNMQVJFX0JJVE1BUChyZXF1ZXN0ZWQsIEtWTUlfTlVNX0NPTU1BTkRTKTsKKwlE RUNMQVJFX0JJVE1BUChrbm93biwgS1ZNSV9OVU1fQ09NTUFORFMpOworCWJvb2wgYWxsb3c7CisJ aW50IGVycjsKKwlpbnQgaWQ7CisKKwllcnIgPSBrdm1pX2lvY3RsX2dldF9mZWF0dXJlKGFyZ3As ICZhbGxvdywgJmlkLCByZXF1ZXN0ZWQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwli aXRtYXBfZnJvbV91NjQoa25vd24sIEtWTUlfS05PV05fQ09NTUFORFMpOworCWJpdG1hcF9hbmQo cmVxdWVzdGVkLCByZXF1ZXN0ZWQsIGtub3duLCBLVk1JX05VTV9DT01NQU5EUyk7CisKKwlyZXR1 cm4ga3ZtaV9pb2N0bF9mZWF0dXJlKGt2bSwgYWxsb3csIHJlcXVlc3RlZCwKKwkJCQkgIG9mZnNl dG9mKHN0cnVjdCBrdm1pLCBjbWRfYWxsb3dfbWFzayksCisJCQkJICBLVk1JX05VTV9DT01NQU5E Uyk7Cit9CisKIHZvaWQga3ZtaV9jcmVhdGVfdm0oc3RydWN0IGt2bSAqa3ZtKQogewogCWluaXRf Y29tcGxldGlvbigma3ZtLT5rdm1pX2NvbXBsZXRlZCk7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9r dm1pX2ludC5oIGIvdmlydC9rdm0va3ZtaV9pbnQuaAppbmRleCA5YmM1MjA1Yzg3MTQuLmJkOGI1 MzllOTE3YSAxMDA2NDQKLS0tIGEvdmlydC9rdm0va3ZtaV9pbnQuaAorKysgYi92aXJ0L2t2bS9r dm1pX2ludC5oCkBAIC0yMyw2ICsyMyw1NCBAQAogI2RlZmluZSBrdm1pX2Vycihpa3ZtLCBmbXQs IC4uLikgXAogCWt2bV9pbmZvKCIlcFUgRVJST1I6ICIgZm10LCAmaWt2bS0+dXVpZCwgIyMgX19W QV9BUkdTX18pCiAKKyNkZWZpbmUgS1ZNSV9LTk9XTl9WQ1BVX0VWRU5UUyAoIFwKKwkJQklUKEtW TUlfRVZFTlRfQ1IpIHwgXAorCQlCSVQoS1ZNSV9FVkVOVF9NU1IpIHwgXAorCQlCSVQoS1ZNSV9F VkVOVF9YU0VUQlYpIHwgXAorCQlCSVQoS1ZNSV9FVkVOVF9CUkVBS1BPSU5UKSB8IFwKKwkJQklU KEtWTUlfRVZFTlRfSFlQRVJDQUxMKSB8IFwKKwkJQklUKEtWTUlfRVZFTlRfUEYpIHwgXAorCQlC SVQoS1ZNSV9FVkVOVF9UUkFQKSB8IFwKKwkJQklUKEtWTUlfRVZFTlRfREVTQ1JJUFRPUikgfCBc CisJCUJJVChLVk1JX0VWRU5UX1BBVVNFX1ZDUFUpIHwgXAorCQlCSVQoS1ZNSV9FVkVOVF9TSU5H TEVTVEVQKSkKKworI2RlZmluZSBLVk1JX0tOT1dOX1ZNX0VWRU5UUyAoIFwKKwkJQklUKEtWTUlf RVZFTlRfQ1JFQVRFX1ZDUFUpIHwgXAorCQlCSVQoS1ZNSV9FVkVOVF9VTkhPT0spKQorCisjZGVm aW5lIEtWTUlfS05PV05fRVZFTlRTIChLVk1JX0tOT1dOX1ZDUFVfRVZFTlRTIHwgS1ZNSV9LTk9X Tl9WTV9FVkVOVFMpCisKKyNkZWZpbmUgS1ZNSV9LTk9XTl9DT01NQU5EUyAoIFwKKwkJQklUKEtW TUlfR0VUX1ZFUlNJT04pIHwgXAorCQlCSVQoS1ZNSV9DSEVDS19DT01NQU5EKSB8IFwKKwkJQklU KEtWTUlfQ0hFQ0tfRVZFTlQpIHwgXAorCQlCSVQoS1ZNSV9HRVRfR1VFU1RfSU5GTykgfCBcCisJ CUJJVChLVk1JX1BBVVNFX1ZDUFUpIHwgXAorCQlCSVQoS1ZNSV9DT05UUk9MX1ZNX0VWRU5UUykg fCBcCisJCUJJVChLVk1JX0NPTlRST0xfRVZFTlRTKSB8IFwKKwkJQklUKEtWTUlfQ09OVFJPTF9D UikgfCBcCisJCUJJVChLVk1JX0NPTlRST0xfTVNSKSB8IFwKKwkJQklUKEtWTUlfQ09OVFJPTF9W RSkgfCBcCisJCUJJVChLVk1JX0dFVF9SRUdJU1RFUlMpIHwgXAorCQlCSVQoS1ZNSV9TRVRfUkVH SVNURVJTKSB8IFwKKwkJQklUKEtWTUlfR0VUX0NQVUlEKSB8IFwKKwkJQklUKEtWTUlfR0VUX1hT QVZFKSB8IFwKKwkJQklUKEtWTUlfUkVBRF9QSFlTSUNBTCkgfCBcCisJCUJJVChLVk1JX1dSSVRF X1BIWVNJQ0FMKSB8IFwKKwkJQklUKEtWTUlfSU5KRUNUX0VYQ0VQVElPTikgfCBcCisJCUJJVChL Vk1JX0dFVF9QQUdFX0FDQ0VTUykgfCBcCisJCUJJVChLVk1JX1NFVF9QQUdFX0FDQ0VTUykgfCBc CisJCUJJVChLVk1JX0dFVF9NQVBfVE9LRU4pIHwgXAorCQlCSVQoS1ZNSV9DT05UUk9MX1NQUCkg fCBcCisJCUJJVChLVk1JX0dFVF9QQUdFX1dSSVRFX0JJVE1BUCkgfCBcCisJCUJJVChLVk1JX1NF VF9QQUdFX1dSSVRFX0JJVE1BUCkgfCBcCisJCUJJVChLVk1JX0dFVF9NVFJSX1RZUEUpIHwgXAor CQlCSVQoS1ZNSV9DT05UUk9MX0NNRF9SRVNQT05TRSkgfCBcCisJCUJJVChLVk1JX0dFVF9WQ1BV X0lORk8pKQorCisjZGVmaW5lIEtWTUlfTlVNX0NPTU1BTkRTIEtWTUlfTkVYVF9BVkFJTEFCTEVf Q09NTUFORAorCiAjZGVmaW5lIElLVk0oa3ZtKSAoKHN0cnVjdCBrdm1pICopKChrdm0pLT5rdm1p KSkKIAogc3RydWN0IGt2bWkgewpAQCAtMzIsNiArODAsOSBAQCBzdHJ1Y3Qga3ZtaSB7CiAJc3Ry dWN0IHRhc2tfc3RydWN0ICpyZWN2OwogCiAJdXVpZF90IHV1aWQ7CisKKwlERUNMQVJFX0JJVE1B UChjbWRfYWxsb3dfbWFzaywgS1ZNSV9OVU1fQ09NTUFORFMpOworCURFQ0xBUkVfQklUTUFQKGV2 ZW50X2FsbG93X21hc2ssIEtWTUlfTlVNX0VWRU5UUyk7CiB9OwogCiAvKiBrdm1pX21zZy5jICov Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxp emF0aW9uIG1haWxpbmcgbGlzdApWaXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9u Lm9yZwpodHRwczovL2xpc3RzLmxpbnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92 aXJ0dWFsaXphdGlvbg==