From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Waterman Subject: [PATCH RFC 5/6] qemu-xen-trad: sasl: introduce SASL authentication and encryption layer Date: Tue, 16 May 2017 00:03:42 +0100 Message-ID: <1494889423-4212-6-git-send-email-watermansrdev@gmail.com> References: <1494889423-4212-1-git-send-email-watermansrdev@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1494889423-4212-1-git-send-email-watermansrdev@gmail.com> 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 Cc: dunlapg@umich.edu, ian.jackson@eu.citrix.com, Simon Waterman List-Id: xen-devel@lists.xenproject.org VGhpcyBjaGFuZ2UgYWRkcyBjYWxscyB0byB0aGUgU0FTTCBBUEkgdG8gbmVnb3RpYXRlIFNBU0wg YXV0aCBhbmQKaW5jbHVkZXMgU0FTTCBlbmNvZGUvZGVjb2RlIGludG8gcmVhZCBhbmQgd3JpdGUg Zmxvd3MgaWYgdGhlIFNBU0wKbWVjaGFuaXNtIGlzIHByb3ZpZGluZyBTU0YuCgpUaGUgY29kZSBp cyB0YWtlbiBmcm9tIHVwc3RyZWFtIHdpdGggbWlub3IgYWRqdXN0bWVudHMgZm9yCmNvbXBhdGli aWxpdHkgd2l0aCBxZW11LXhlbi10cmFkaXRpb25hbC4KClNpZ25lZC1vZmYtYnk6IFNpbW9uIFdh dGVybWFuIDx3YXRlcm1hbnNyZGV2QGdtYWlsLmNvbT4KLS0tCiB2bmMuYyB8IDMyOSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0t LS0KIDEgZmlsZSBjaGFuZ2VkLCAyOTIgaW5zZXJ0aW9ucygrKSwgMzcgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvdm5jLmMgYi92bmMuYwppbmRleCA3MjhlZmVjLi5mZjQ2MGI4IDEwMDY0NAot LS0gYS92bmMuYworKysgYi92bmMuYwpAQCAtODAsNiArODAsNTggQEAgc3RhdGljIERpc3BsYXlD aGFuZ2VMaXN0ZW5lciAqZGNsOwogICAoKCh4KSArICgxVUxMIDw8ICh2cyktPmRpcnR5X3BpeGVs X3NoaWZ0KSAtIDEpID4+ICh2cyktPmRpcnR5X3BpeGVsX3NoaWZ0KQogI2RlZmluZSBEUDJYKHZz LCB4KSAoKHgpIDw8ICh2cyktPmRpcnR5X3BpeGVsX3NoaWZ0KQogCisjaWZuZGVmIENPTkZJR19T VFVCRE9NCitzdGF0aWMgY2hhciAqYWRkcl90b19zdHJpbmcoY29uc3QgY2hhciAqZm9ybWF0LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpzYSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3Qgc2FsZW4pIHsKKyAgICBjaGFy ICphZGRyOworICAgIGNoYXIgaG9zdFtOSV9NQVhIT1NUXTsKKyAgICBjaGFyIHNlcnZbTklfTUFY U0VSVl07CisgICAgaW50IGVycjsKKyAgICBzaXplX3QgYWRkcmxlbjsKKworICAgIGlmICgoZXJy ID0gZ2V0bmFtZWluZm8oKHN0cnVjdCBzb2NrYWRkciAqKXNhLCBzYWxlbiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIGhvc3QsIHNpemVvZihob3N0KSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNlcnYsIHNpemVvZihzZXJ2KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5J X05VTUVSSUNIT1NUIHwgTklfTlVNRVJJQ1NFUlYpKSAhPSAwKSB7CisgICAgICAgIFZOQ19ERUJV RygiQ2Fubm90IHJlc29sdmUgYWRkcmVzcyAlZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICBl cnIsIGdhaV9zdHJlcnJvcihlcnIpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisg ICAgLyogRW5vdWdoIGZvciB0aGUgZXhpc3RpbmcgZm9ybWF0ICsgdGhlIDIgdmFycyB3ZSdyZQor ICAgICAqIHN1YnN0aXR1dGluZyBpbi4gKi8KKyAgICBhZGRybGVuID0gc3RybGVuKGZvcm1hdCkg KyBzdHJsZW4oaG9zdCkgKyBzdHJsZW4oc2Vydik7CisgICAgYWRkciA9IG1hbGxvYyhhZGRybGVu ICsgMSk7CisgICAgc25wcmludGYoYWRkciwgYWRkcmxlbiwgZm9ybWF0LCBob3N0LCBzZXJ2KTsK KyAgICBhZGRyW2FkZHJsZW5dID0gJ1wwJzsKKworICAgIHJldHVybiBhZGRyOworfQorCitjaGFy ICp2bmNfc29ja2V0X2xvY2FsX2FkZHIoY29uc3QgY2hhciAqZm9ybWF0LCBpbnQgZmQpIHsKKyAg ICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzYTsKKyAgICBzb2NrbGVuX3Qgc2FsZW47CisKKyAg ICBzYWxlbiA9IHNpemVvZihzYSk7CisgICAgaWYgKGdldHNvY2tuYW1lKGZkLCAoc3RydWN0IHNv Y2thZGRyKikmc2EsICZzYWxlbikgPCAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJl dHVybiBhZGRyX3RvX3N0cmluZyhmb3JtYXQsICZzYSwgc2FsZW4pOworfQorCitjaGFyICp2bmNf c29ja2V0X3JlbW90ZV9hZGRyKGNvbnN0IGNoYXIgKmZvcm1hdCwgaW50IGZkKSB7CisgICAgc3Ry dWN0IHNvY2thZGRyX3N0b3JhZ2Ugc2E7CisgICAgc29ja2xlbl90IHNhbGVuOworCisgICAgc2Fs ZW4gPSBzaXplb2Yoc2EpOworICAgIGlmIChnZXRwZWVybmFtZShmZCwgKHN0cnVjdCBzb2NrYWRk ciopJnNhLCAmc2FsZW4pIDwgMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4g YWRkcl90b19zdHJpbmcoZm9ybWF0LCAmc2EsIHNhbGVuKTsKK30KKyNlbmRpZiAvKiAhQ09ORklH X1NUVUJET00gKi8KKwogdm9pZCBkb19pbmZvX3ZuYyh2b2lkKQogewogICAgIGlmICh2bmNfc3Rh dGUgPT0gTlVMTCkKQEAgLTc3MCw2ICs4MjIsOSBAQCBpbnQgdm5jX2NsaWVudF9pb19lcnJvcihW bmNTdGF0ZSAqdnMsIGludCByZXQsIGludCBsYXN0X2Vycm5vKQogCX0KIAl2cy0+d2lyZW1vZGUg PSBWTkNfV0lSRU1PREVfQ0xFQVI7CiAjZW5kaWYgLyogQ09ORklHX1ZOQ19UTFMgKi8KKyNpZmRl ZiBDT05GSUdfVk5DX1NBU0wKKyAgICAgICAgdm5jX3Nhc2xfY2xpZW50X2NsZWFudXAodnMpOwor I2VuZGlmIC8qIENPTkZJR19WTkNfU0FTTCAqLwogCXJldHVybiAwOwogICAgIH0KICAgICByZXR1 cm4gcmV0OwpAQCAtNzgwLDY1ICs4MzUsMjAzIEBAIHZvaWQgdm5jX2NsaWVudF9lcnJvcihWbmNT dGF0ZSAqdnMpCiAgICAgdm5jX2NsaWVudF9pb19lcnJvcih2cywgLTEsIEVJTlZBTCk7CiB9CiAK LXN0YXRpYyB2b2lkIHZuY19jbGllbnRfd3JpdGUodm9pZCAqb3BhcXVlKQorI2lmZGVmIENPTkZJ R19WTkNfVExTCitzdGF0aWMgbG9uZyB2bmNfY2xpZW50X3dyaXRlX3RscyhnbnV0bHNfc2Vzc2lv bl90ICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWlu dDhfdCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRh bGVuKQoreworICAgIGxvbmcgcmV0ID0gZ251dGxzX3dyaXRlKCpzZXNzaW9uLCBkYXRhLCBkYXRh bGVuKTsKKyAgICBpZiAocmV0IDwgMCkgeyAKKyAgICAgICAgaWYgKHJldCA9PSBHTlVUTFNfRV9B R0FJTikgeworICAgICAgICAgICAgZXJybm8gPSBFQUdBSU47CisgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICBlcnJubyA9IEVJTzsKKyAgICAgICAgfQorICAgICAgICByZXQgPSAtMTsKKyAg ICB9CisgICAgcmV0dXJuIHJldDsKK30KKyNlbmRpZiAvKiBDT05GSUdfVk5DX1RMUyAqLworCisv KgorICogQ2FsbGVkIHRvIHdyaXRlIGEgY2h1bmsgb2YgZGF0YSB0byB0aGUgY2xpZW50IHNvY2tl dC4gVGhlIGRhdGEgbWF5CisgKiBiZSB0aGUgcmF3IGRhdGEsIG9yIG1heSBoYXZlIGFscmVhZHkg YmVlbiBlbmNvZGVkIGJ5IFNBU0wuCisgKiBUaGUgZGF0YSB3aWxsIGJlIHdyaXR0ZW4gZWl0aGVy IHN0cmFpZ2h0IG9udG8gdGhlIHNvY2tldCwgb3IKKyAqIHdyaXR0ZW4gdmlhIHRoZSBHTlVUTFMg d3JhcHBlcnMsIGlmIFRMUy9TU0wgZW5jcnlwdGlvbiBpcyBlbmFibGVkCisgKgorICogTkIsIGl0 IGlzIHRoZW9yZXRpY2FsbHkgcG9zc2libGUgdG8gaGF2ZSAyIGxheWVycyBvZiBlbmNyeXB0aW9u LAorICogYm90aCBTQVNMLCBhbmQgdGhpcyBUTFMgbGF5ZXIuIEl0IGlzIGhpZ2hseSB1bmxpa2Vs eSBpbiBwcmFjdGljZQorICogdGhvdWdoLCBzaW5jZSBTQVNMIGVuY3J5cHRpb24gd2lsbCB0eXBp Y2FsbHkgYmUgYSBuby1vcCBpZiBUTFMKKyAqIGlzIGFjdGl2ZQorICoKKyAqIFJldHVybnMgdGhl IG51bWJlciBvZiBieXRlcyB3cml0dGVuLCB3aGljaCBtYXkgYmUgbGVzcyB0aGFuCisgKiB0aGUg cmVxdWVzdGVkICdkYXRhbGVuJyBpZiB0aGUgc29ja2V0IHdvdWxkIGJsb2NrLiBSZXR1cm5zCisg KiAtMSBvbiBlcnJvciwgYW5kIGRpc2Nvbm5lY3RzIHRoZSBjbGllbnQgc29ja2V0LgorICovCits b25nIHZuY19jbGllbnRfd3JpdGVfYnVmKFZuY1N0YXRlICp2cywgY29uc3QgdWludDhfdCAqZGF0 YSwgc2l6ZV90IGRhdGFsZW4pCiB7CiAgICAgbG9uZyByZXQ7Ci0gICAgVm5jU3RhdGUgKnZzID0g b3BhcXVlOwotCiAjaWZkZWYgQ09ORklHX1ZOQ19UTFMKICAgICBpZiAodnMtPnRsc19zZXNzaW9u KSB7Ci0JcmV0ID0gZ251dGxzX3dyaXRlKHZzLT50bHNfc2Vzc2lvbiwgdnMtPm91dHB1dC5idWZm ZXIsIHZzLT5vdXRwdXQub2Zmc2V0KTsKLQlpZiAocmV0IDwgMCkgewotCSAgICBpZiAocmV0ID09 IEdOVVRMU19FX0FHQUlOKQotCQllcnJubyA9IEVBR0FJTjsKLQkgICAgZWxzZQotCQllcnJubyA9 IEVJTzsKLQkgICAgcmV0ID0gLTE7Ci0JfQotICAgIH0gZWxzZQorICAgICAgICByZXQgPSB2bmNf Y2xpZW50X3dyaXRlX3RscygmdnMtPnRsc19zZXNzaW9uLCBkYXRhLCBkYXRhbGVuKTsKKyAgICB9 IGVsc2UgeworI2VuZGlmIC8qIENPTkZJR19WTkNfVExTICovCisgICAgICAgIHJldCA9IHNlbmQo dnMtPmNzb2NrLCBkYXRhLCBkYXRhbGVuLCAwKTsKKyNpZmRlZiBDT05GSUdfVk5DX1RMUworICAg IH0KICNlbmRpZiAvKiBDT05GSUdfVk5DX1RMUyAqLwotCXJldCA9IHNlbmQodnMtPmNzb2NrLCB2 cy0+b3V0cHV0LmJ1ZmZlciwgdnMtPm91dHB1dC5vZmZzZXQsIDApOwotICAgIHJldCA9IHZuY19j bGllbnRfaW9fZXJyb3IodnMsIHJldCwgc29ja2V0X2Vycm9yKCkpOworICAgIFZOQ19ERUJVRygi V3JvdGUgd2lyZSAlcCAlemQgLT4gJWxkXG4iLCBkYXRhLCBkYXRhbGVuLCByZXQpOworICAgIHJl dHVybiB2bmNfY2xpZW50X2lvX2Vycm9yKHZzLCByZXQsIHNvY2tldF9lcnJvcigpKTsKK30KKwor LyoKKyAqIENhbGxlZCB0byB3cml0ZSBidWZmZXJlZCBkYXRhIHRvIHRoZSBjbGllbnQgc29ja2V0 LCB3aGVuIG5vdAorICogdXNpbmcgYW55IFNBU0wgU1NGIGVuY3J5cHRpb24gbGF5ZXJzLiBXaWxs IHdyaXRlIGFzIG11Y2ggZGF0YQorICogYXMgcG9zc2libGUgd2l0aG91dCBibG9ja2luZy4gSWYg YWxsIGJ1ZmZlcmVkIGRhdGEgaXMgd3JpdHRlbiwKKyAqIHdpbGwgc3dpdGNoIHRoZSBGRCBwb2xs KCkgaGFuZGxlciBiYWNrIHRvIHJlYWQgbW9uaXRvcmluZy4KKyAqCisgKiBSZXR1cm5zIHRoZSBu dW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiwgd2hpY2ggbWF5IGJlIGxlc3MgdGhhbgorICogdGhlIGJ1 ZmZlcmVkIG91dHB1dCBkYXRhIGlmIHRoZSBzb2NrZXQgd291bGQgYmxvY2suIFJldHVybnMKKyAq IC0xIG9uIGVycm9yLCBhbmQgZGlzY29ubmVjdHMgdGhlIGNsaWVudCBzb2NrZXQuCisgKi8KK3N0 YXRpYyBsb25nIHZuY19jbGllbnRfd3JpdGVfcGxhaW4oVm5jU3RhdGUgKnZzKQoreworICAgIGxv bmcgcmV0OworCisjaWZkZWYgQ09ORklHX1ZOQ19TQVNMCisgICAgVk5DX0RFQlVHKCJXcml0ZSBQ bGFpbjogUGVuZGluZyBvdXRwdXQgJXAgc2l6ZSAlemQgb2Zmc2V0ICV6ZC4gV2FpdCBTU0YgJWRc biIsCisgICAgICAgICAgICAgIHZzLT5vdXRwdXQuYnVmZmVyLCB2cy0+b3V0cHV0LmNhcGFjaXR5 LCB2cy0+b3V0cHV0Lm9mZnNldCwKKyAgICAgICAgICAgICAgdnMtPnNhc2wud2FpdFdyaXRlU1NG KTsKKworICAgIGlmICh2cy0+c2FzbC5jb25uICYmCisgICAgICAgIHZzLT5zYXNsLnJ1blNTRiAm JgorICAgICAgICB2cy0+c2FzbC53YWl0V3JpdGVTU0YpIHsKKyAgICAgICAgcmV0ID0gdm5jX2Ns aWVudF93cml0ZV9idWYodnMsIHZzLT5vdXRwdXQuYnVmZmVyLCB2cy0+c2FzbC53YWl0V3JpdGVT U0YpOworICAgICAgICBpZiAocmV0KQorICAgICAgICAgICAgdnMtPnNhc2wud2FpdFdyaXRlU1NG IC09IHJldDsKKyAgICB9IGVsc2UKKyNlbmRpZiAvKiBDT05GSUdfVk5DX1NBU0wgKi8KKyAgICAg ICAgcmV0ID0gdm5jX2NsaWVudF93cml0ZV9idWYodnMsIHZzLT5vdXRwdXQuYnVmZmVyLCB2cy0+ b3V0cHV0Lm9mZnNldCk7CiAgICAgaWYgKCFyZXQpCi0JcmV0dXJuOworICAgICAgICByZXR1cm4g MDsKIAogICAgIGJ1ZmZlcl9hZHZhbmNlKCZ2cy0+b3V0cHV0LCByZXQpOwogCi0gICAgaWYgKHZz LT5vdXRwdXQub2Zmc2V0ID09IDApCi0JcWVtdV9zZXRfZmRfaGFuZGxlcjIodnMtPmNzb2NrLCBO VUxMLCB2bmNfY2xpZW50X3JlYWQsIE5VTEwsIHZzKTsKKyAgICBpZiAodnMtPm91dHB1dC5vZmZz ZXQgPT0gMCkgeworICAgICAgICBxZW11X3NldF9mZF9oYW5kbGVyMih2cy0+Y3NvY2ssIE5VTEws IHZuY19jbGllbnRfcmVhZCwgTlVMTCwgdnMpOworICAgIH0KKworICAgIHJldHVybiByZXQ7CiB9 CiAKLXN0YXRpYyB2b2lkIHZuY19yZWFkX3doZW4oVm5jU3RhdGUgKnZzLCBWbmNSZWFkRXZlbnQg KmZ1bmMsIHNpemVfdCBleHBlY3RpbmcpCisvKgorICogRmlyc3QgZnVuY3Rpb24gY2FsbGVkIHdo ZW5ldmVyIHRoZXJlIGlzIGRhdGEgdG8gYmUgd3JpdHRlbiB0bworICogdGhlIGNsaWVudCBzb2Nr ZXQuIFdpbGwgZGVsZWdhdGUgYWN0dWFsIHdvcmsgYWNjb3JkaW5nIHRvIHdoZXRoZXIKKyAqIFNB U0wgU1NGIGxheWVycyBhcmUgZW5hYmxlZCAodGh1cyByZXF1aXJpbmcgZW5jcnlwdGlvbiBjYWxs cykKKyAqLworc3RhdGljIHZvaWQgdm5jX2NsaWVudF93cml0ZSh2b2lkICpvcGFxdWUpCit7Cisg ICAgbG9uZyByZXQ7CisgICAgVm5jU3RhdGUgKnZzID0gb3BhcXVlOworCisjaWZkZWYgQ09ORklH X1ZOQ19TQVNMCisgICAgaWYgKHZzLT5zYXNsLmNvbm4gJiYKKyAgICAgICAgdnMtPnNhc2wucnVu U1NGICYmCisgICAgICAgICF2cy0+c2FzbC53YWl0V3JpdGVTU0YpCisgICAgICAgIHJldCA9IHZu Y19jbGllbnRfd3JpdGVfc2FzbCh2cyk7CisgICAgZWxzZQorI2VuZGlmIC8qIENPTkZJR19WTkNf U0FTTCAqLworICAgICAgICByZXQgPSB2bmNfY2xpZW50X3dyaXRlX3BsYWluKHZzKTsKK30KKwor dm9pZCB2bmNfcmVhZF93aGVuKFZuY1N0YXRlICp2cywgVm5jUmVhZEV2ZW50ICpmdW5jLCBzaXpl X3QgZXhwZWN0aW5nKQogewogICAgIHZzLT5yZWFkX2hhbmRsZXIgPSBmdW5jOwogICAgIHZzLT5y ZWFkX2hhbmRsZXJfZXhwZWN0ID0gZXhwZWN0aW5nOwogfQogCi12b2lkIHZuY19jbGllbnRfcmVh ZCh2b2lkICpvcGFxdWUpCisjaWZkZWYgQ09ORklHX1ZOQ19UTFMKK3N0YXRpYyBsb25nIHZuY19j bGllbnRfcmVhZF90bHMoZ251dGxzX3Nlc3Npb25fdCAqc2Vzc2lvbiwgdWludDhfdCAqZGF0YSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4pCiB7Ci0gICAg Vm5jU3RhdGUgKnZzID0gb3BhcXVlOwotICAgIGxvbmcgcmV0OwotCi0gICAgYnVmZmVyX3Jlc2Vy dmUoJnZzLT5pbnB1dCwgNDA5Nik7CisgICAgbG9uZyByZXQgPSBnbnV0bHNfcmVhZCgqc2Vzc2lv biwgZGF0YSwgZGF0YWxlbik7CisgICAgaWYgKHJldCA8IDApIHsgCisgICAgICAgIGlmIChyZXQg PT0gR05VVExTX0VfQUdBSU4pIHsKKyAgICAgICAgICAgIGVycm5vID0gRUFHQUlOOworICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgZXJybm8gPSBFSU87CisgICAgICAgIH0KKyAgICAgICAg cmV0ID0gLTE7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisjZW5kaWYgLyogQ09ORklHX1ZO Q19UTFMgKi8KIAorLyoKKyAqIENhbGxlZCB0byByZWFkIGEgY2h1bmsgb2YgZGF0YSBmcm9tIHRo ZSBjbGllbnQgc29ja2V0LiBUaGUgZGF0YSBtYXkKKyAqIGJlIHRoZSByYXcgZGF0YSwgb3IgbWF5 IG5lZWQgdG8gYmUgZnVydGhlciBkZWNvZGVkIGJ5IFNBU0wuCisgKiBUaGUgZGF0YSB3aWxsIGJl IHJlYWQgZWl0aGVyIHN0cmFpZ2h0IGZyb20gdG8gdGhlIHNvY2tldCwgb3IKKyAqIHJlYWQgdmlh IHRoZSBHTlVUTFMgd3JhcHBlcnMsIGlmIFRMUy9TU0wgZW5jcnlwdGlvbiBpcyBlbmFibGVkCisg KgorICogTkIsIGl0IGlzIHRoZW9yZXRpY2FsbHkgcG9zc2libGUgdG8gaGF2ZSAyIGxheWVycyBv ZiBlbmNyeXB0aW9uLAorICogYm90aCBTQVNMLCBhbmQgdGhpcyBUTFMgbGF5ZXIuIEl0IGlzIGhp Z2hseSB1bmxpa2VseSBpbiBwcmFjdGljZQorICogdGhvdWdoLCBzaW5jZSBTQVNMIGVuY3J5cHRp b24gd2lsbCB0eXBpY2FsbHkgYmUgYSBuby1vcCBpZiBUTFMKKyAqIGlzIGFjdGl2ZQorICoKKyAq IFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyByZWFkLCB3aGljaCBtYXkgYmUgbGVzcyB0aGFu CisgKiB0aGUgcmVxdWVzdGVkICdkYXRhbGVuJyBpZiB0aGUgc29ja2V0IHdvdWxkIGJsb2NrLiBS ZXR1cm5zCisgKiAtMSBvbiBlcnJvciwgYW5kIGRpc2Nvbm5lY3RzIHRoZSBjbGllbnQgc29ja2V0 LgorICovCitsb25nIHZuY19jbGllbnRfcmVhZF9idWYoVm5jU3RhdGUgKnZzLCB1aW50OF90ICpk YXRhLCBzaXplX3QgZGF0YWxlbikKK3sKKyAgICBsb25nIHJldDsKICNpZmRlZiBDT05GSUdfVk5D X1RMUwogICAgIGlmICh2cy0+dGxzX3Nlc3Npb24pIHsKLQlyZXQgPSBnbnV0bHNfcmVhZCh2cy0+ dGxzX3Nlc3Npb24sIGJ1ZmZlcl9lbmQoJnZzLT5pbnB1dCksIDQwOTYpOwotCWlmIChyZXQgPCAw KSB7Ci0JICAgIGlmIChyZXQgPT0gR05VVExTX0VfQUdBSU4pCi0JCWVycm5vID0gRUFHQUlOOwot CSAgICBlbHNlCi0JCWVycm5vID0gRUlPOwotCSAgICByZXQgPSAtMTsKLQl9Ci0gICAgfSBlbHNl CisgICAgICAgIHJldCA9IHZuY19jbGllbnRfcmVhZF90bHMoJnZzLT50bHNfc2Vzc2lvbiwgZGF0 YSwgZGF0YWxlbik7CisgICAgfSBlbHNlIHsKICNlbmRpZiAvKiBDT05GSUdfVk5DX1RMUyAqLwot CXJldCA9IHJlY3YodnMtPmNzb2NrLCBidWZmZXJfZW5kKCZ2cy0+aW5wdXQpLCA0MDk2LCAwKTsK LSAgICByZXQgPSB2bmNfY2xpZW50X2lvX2Vycm9yKHZzLCByZXQsIHNvY2tldF9lcnJvcigpKTsK LSAgICBpZiAoIXJldCkKLQlyZXR1cm47CisgICAgICAgIHJldCA9IHJlY3YodnMtPmNzb2NrLCBk YXRhLCBkYXRhbGVuLCAwKTsKKyNpZmRlZiBDT05GSUdfVk5DX1RMUworICAgIH0KKyNlbmRpZiAv KiBDT05GSUdfVk5DX1RMUyAqLworICAgIFZOQ19ERUJVRygiUmVhZCB3aXJlICVwICV6ZCAtPiAl bGRcbiIsIGRhdGEsIGRhdGFsZW4sIHJldCk7CisgICAgcmV0dXJuIHZuY19jbGllbnRfaW9fZXJy b3IodnMsIHJldCwgc29ja2V0X2Vycm9yKCkpOworfQogCisvKgorICogQ2FsbGVkIHRvIHJlYWQg ZGF0YSBmcm9tIHRoZSBjbGllbnQgc29ja2V0IHRvIHRoZSBpbnB1dCBidWZmZXIsCisgKiB3aGVu IG5vdCB1c2luZyBhbnkgU0FTTCBTU0YgZW5jcnlwdGlvbiBsYXllcnMuIFdpbGwgcmVhZCBhcyBt dWNoCisgKiBkYXRhIGFzIHBvc3NpYmxlIHdpdGhvdXQgYmxvY2tpbmcuCisgKgorICogUmV0dXJu cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQuIFJldHVybnMgLTEgb24gZXJyb3IsIGFuZAorICog ZGlzY29ubmVjdHMgdGhlIGNsaWVudCBzb2NrZXQuCisgKi8KK3N0YXRpYyBsb25nIHZuY19jbGll bnRfcmVhZF9wbGFpbihWbmNTdGF0ZSAqdnMpCit7CisgICAgaW50IHJldDsKKyAgICBWTkNfREVC VUcoIlJlYWQgcGxhaW4gJXAgc2l6ZSAlemQgb2Zmc2V0ICV6ZFxuIiwKKyAgICAgICAgICAgICAg dnMtPmlucHV0LmJ1ZmZlciwgdnMtPmlucHV0LmNhcGFjaXR5LCB2cy0+aW5wdXQub2Zmc2V0KTsK KyAgICBidWZmZXJfcmVzZXJ2ZSgmdnMtPmlucHV0LCA0MDk2KTsKKyAgICByZXQgPSB2bmNfY2xp ZW50X3JlYWRfYnVmKHZzLCBidWZmZXJfZW5kKCZ2cy0+aW5wdXQpLCA0MDk2KTsKKyAgICBpZiAo IXJldCkKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgdnMtPmlucHV0Lm9mZnNldCArPSByZXQ7Cisg ICAgcmV0dXJuIHJldDsKK30KKwordm9pZCB2bmNfY2xpZW50X3JlYWQodm9pZCAqb3BhcXVlKQor eworICAgIFZuY1N0YXRlICp2cyA9IG9wYXF1ZTsKKyAgICBsb25nIHJldDsKKworI2lmZGVmIENP TkZJR19WTkNfU0FTTAorICAgIGlmICh2cy0+c2FzbC5jb25uICYmIHZzLT5zYXNsLnJ1blNTRikK KyAgICAgICAgcmV0ID0gdm5jX2NsaWVudF9yZWFkX3Nhc2wodnMpOworICAgIGVsc2UKKyNlbmRp ZiAvKiBDT05GSUdfVk5DX1NBU0wgKi8KKyAgICAgICAgcmV0ID0gdm5jX2NsaWVudF9yZWFkX3Bs YWluKHZzKTsKKyAgICBpZiAoIXJldCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgd2hpbGUgKHZz LT5yZWFkX2hhbmRsZXIgJiYgdnMtPmlucHV0Lm9mZnNldCA+PSB2cy0+cmVhZF9oYW5kbGVyX2V4 cGVjdCkgewogCXNpemVfdCBsZW4gPSB2cy0+cmVhZF9oYW5kbGVyX2V4cGVjdDsKQEAgLTE4OTcs NiArMjA5MCwxNCBAQCBzdGF0aWMgaW50IHN0YXJ0X2F1dGhfdmVuY3J5cHRfc3ViYXV0aChWbmNT dGF0ZSAqdnMpCiAgICAgICAgVk5DX0RFQlVHKCJTdGFydCBUTFMgYXV0aCBWTkNcbiIpOwogICAg ICAgIHJldHVybiBzdGFydF9hdXRoX3ZuYyh2cyk7CiAKKyNpZmRlZiBDT05GSUdfVk5DX1NBU0wK KyAgICBjYXNlIFZOQ19BVVRIX1ZFTkNSWVBUX1g1MDlTQVNMOgorICAgIGNhc2UgVk5DX0FVVEhf VkVOQ1JZUFRfVExTU0FTTDoKKyAgICAgICBWTkNfREVCVUcoIlN0YXJ0IFRMUyBhdXRoIFNBU0xc biIpOworICAgICAgIHN0YXJ0X2F1dGhfc2FzbCh2cyk7CisgICAgYnJlYWs7CisjZW5kaWYgLyog Q09ORklHX1ZOQ19TQVNMICovCisKICAgICBkZWZhdWx0OiAvKiBTaG91bGQgbm90IGJlIHBvc3Np YmxlLCBidXQganVzdCBpbiBjYXNlICovCiAgICAgICAgVk5DX0RFQlVHKCJSZWplY3QgYXV0aCAl ZFxuIiwgdnMtPmF1dGgpOwogICAgICAgIHZuY193cml0ZV91OCh2cywgMSk7CkBAIC0xOTU3LDcg KzIxNTgsOSBAQCBzdGF0aWMgdm9pZCB2bmNfaGFuZHNoYWtlX2lvKHZvaWQgKm9wYXF1ZSkgewog I2RlZmluZSBORUVEX1g1MDlfQVVUSCh2cykJCQkgICAgICBcCiAgICAgKCh2cyktPnN1YmF1dGgg PT0gVk5DX0FVVEhfVkVOQ1JZUFRfWDUwOU5PTkUgfHwgICBcCiAgICAgICh2cyktPnN1YmF1dGgg PT0gVk5DX0FVVEhfVkVOQ1JZUFRfWDUwOVZOQyB8fCAgICBcCi0gICAgICh2cyktPnN1YmF1dGgg PT0gVk5DX0FVVEhfVkVOQ1JZUFRfWDUwOVBMQUlOKQorICAgICAodnMpLT5zdWJhdXRoID09IFZO Q19BVVRIX1ZFTkNSWVBUX1g1MDlQTEFJTiB8fCBcCisgICAgICh2cyktPnN1YmF1dGggPT0gVk5D X0FVVEhfVkVOQ1JZUFRfWDUwOVNBU0wgfHwgICBcCisgICAgICh2cyktPnN1YmF1dGggPT0gVk5D X0FVVEhfVkVOQ1JZUFRfVExTU0FTTCkKIAogI2lmIGRlZmluZWQoR05VVExTX1ZFUlNJT05fTlVN QkVSKSAmJiBcCiAgICAgR05VVExTX1ZFUlNJT05fTlVNQkVSID49IDB4MDIwMjAwIC8qIDIuMi4w ICovCkBAIC0yMTcyLDYgKzIzNzUsMTMgQEAgc3RhdGljIGludCBwcm90b2NvbF9jbGllbnRfYXV0 aChWbmNTdGF0ZSAqdnMsIHVpbnQ4X3QgKmRhdGEsIHNpemVfdCBsZW4pCiAgICAgICAgICAgIHJl dHVybiBzdGFydF9hdXRoX3ZlbmNyeXB0KHZzKTsKICNlbmRpZiAvKiBDT05GSUdfVk5DX1RMUyAq LwogCisjaWZkZWYgQ09ORklHX1ZOQ19TQVNMCisgICAgICAgY2FzZSBWTkNfQVVUSF9TQVNMOgor ICAgICAgICAgICBWTkNfREVCVUcoIkFjY2VwdCBTQVNMIGF1dGhcbiIpOworICAgICAgICAgICBz dGFydF9hdXRoX3Nhc2wodnMpOworICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBDT05GSUdf Vk5DX1NBU0wgKi8KKwogICAgICAgIGRlZmF1bHQ6IC8qIFNob3VsZCBub3QgYmUgcG9zc2libGUs IGJ1dCBqdXN0IGluIGNhc2UgKi8KICAgICAgICAgICAgVk5DX0RFQlVHKCJSZWplY3QgYXV0aCAl ZFxuIiwgdnMtPmF1dGgpOwogICAgICAgICAgICB2bmNfd3JpdGVfdTgodnMsIDEpOwpAQCAtMjQz NSw2ICsyNjQ1LDEwIEBAIGludCB2bmNfZGlzcGxheV9vcGVuKERpc3BsYXlTdGF0ZSAqZHMsIGNv bnN0IGNoYXIgKmRpc3BsYXksIGludCBmaW5kX3VudXNlZCkKICNpZmRlZiBDT05GSUdfVk5DX1RM UwogICAgIGludCB0bHMgPSAwLCB4NTA5ID0gMDsKICNlbmRpZgorICAgIGJvb2wgc2FzbCA9IGZh bHNlOworI2lmZGVmIENPTkZJR19WTkNfU0FTTAorICAgIGludCBzYXNsRXJyOworI2VuZGlmCiAK ICAgICBpZiAoZGlzcGxheSA9PSBOVUxMKQogCWRpc3BsYXkgPSAibG9jYWxob3N0OjAiOwpAQCAt MjQ1Myw2ICsyNjY3LDE1IEBAIGludCB2bmNfZGlzcGxheV9vcGVuKERpc3BsYXlTdGF0ZSAqZHMs IGNvbnN0IGNoYXIgKmRpc3BsYXksIGludCBmaW5kX3VudXNlZCkKIAkgICAgcGFzc3dvcmQgPSAx OyAvKiBSZXF1aXJlIHBhc3N3b3JkIGF1dGggKi8KICAgICAgICAgfSBlbHNlIGlmIChzdHJuY21w KG9wdGlvbnMsICJzd2l0Y2hicHAiLCA5KSA9PSAwKSB7CiAgICAgICAgICAgICB2cy0+c3dpdGNo YnBwID0gMTsKKwl9IGVsc2UgaWYgKHN0cm5jbXAob3B0aW9ucywgInNhc2wiLCA0KSA9PSAwKSB7 CisjaWZkZWYgQ09ORklHX1ZOQ19TQVNMCisJICAgIHNhc2wgPSAxOyAvKiBSZXF1aXJlIFNBU0wg YXV0aCAqLworI2Vsc2UKKwkgICAgZnByaW50ZihzdGRlcnIsICJWTkMgU0FTTCBhdXRoIHJlcXVp cmVzIGN5cnVzLXNhc2wgc3VwcG9ydFxuIik7CisJICAgIHFlbXVfZnJlZSh2cy0+ZGlzcGxheSk7 CisJICAgIHZzLT5kaXNwbGF5ID0gTlVMTDsKKwkgICAgcmV0dXJuIC0xOworI2VuZGlmIC8qIENP TkZJR19WTkNfU0FTTCAqLwogI2lmZGVmIENPTkZJR19WTkNfVExTCiAJfSBlbHNlIGlmIChzdHJu Y21wKG9wdGlvbnMsICJ0bHMiLCAzKSA9PSAwKSB7CiAJICAgIHRscyA9IDE7IC8qIFJlcXVpcmUg VExTICovCkBAIC0yNTA5LDYgKzI3MzIsMjcgQEAgaW50IHZuY19kaXNwbGF5X29wZW4oRGlzcGxh eVN0YXRlICpkcywgY29uc3QgY2hhciAqZGlzcGxheSwgaW50IGZpbmRfdW51c2VkKQogCSAgICB2 cy0+c3ViYXV0aCA9IFZOQ19BVVRIX0lOVkFMSUQ7CiAJfQogI2VuZGlmCisjaWZkZWYgQ09ORklH X1ZOQ19TQVNMCisgICAgfSBlbHNlIGlmIChzYXNsKSB7CisjaWZkZWYgQ09ORklHX1ZOQ19UTFMK KyAgICAgICAgaWYgKHRscykgeworICAgICAgICAgICAgdnMtPmF1dGggPSBWTkNfQVVUSF9WRU5D UllQVDsKKyAgICAgICAgICAgIGlmICh4NTA5KSB7CisJCVZOQ19ERUJVRygiSW5pdGlhbGl6aW5n IFZOQyBzZXJ2ZXIgd2l0aCB4NTA5IFNBU0wgYXV0aFxuIik7CisgICAgICAgICAgICAgICAgdnMt PnN1YmF1dGggPSBWTkNfQVVUSF9WRU5DUllQVF9YNTA5U0FTTDsKKyAgICAgICAgICAgIH0gZWxz ZSB7CisJCVZOQ19ERUJVRygiSW5pdGlhbGl6aW5nIFZOQyBzZXJ2ZXIgd2l0aCBUTFMgU0FTTCBh dXRoXG4iKTsKKyAgICAgICAgICAgICAgICB2cy0+c3ViYXV0aCA9IFZOQ19BVVRIX1ZFTkNSWVBU X1RMU1NBU0w7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisjZW5kaWYgLyogQ09O RklHX1ZOQ19UTFMgKi8KKwkgICAgVk5DX0RFQlVHKCJJbml0aWFsaXppbmcgVk5DIHNlcnZlciB3 aXRoIFNBU0wgYXV0aFxuIik7CisgICAgICAgICAgICB2cy0+YXV0aCA9IFZOQ19BVVRIX1NBU0w7 CisjaWZkZWYgQ09ORklHX1ZOQ19UTFMKKyAgICAgICAgICAgIHZzLT5zdWJhdXRoID0gVk5DX0FV VEhfSU5WQUxJRDsKKyAgICAgICAgfQorI2VuZGlmIC8qIENPTkZJR19WTkNfVExTICovCisjZW5k aWYgLyogQ09ORklHX1ZOQ19TQVNMICovCiAgICAgfSBlbHNlIHsKICNpZmRlZiBDT05GSUdfVk5D X1RMUwogCWlmICh0bHMpIHsKQEAgLTI1MjksNiArMjc3MywxNyBAQCBpbnQgdm5jX2Rpc3BsYXlf b3BlbihEaXNwbGF5U3RhdGUgKmRzLCBjb25zdCBjaGFyICpkaXNwbGF5LCBpbnQgZmluZF91bnVz ZWQpCiAJfQogI2VuZGlmCiAgICAgfQorCisjaWZkZWYgQ09ORklHX1ZOQ19TQVNMCisgICAgaWYg KChzYXNsRXJyID0gc2FzbF9zZXJ2ZXJfaW5pdChOVUxMLCAicWVtdSIpKSAhPSBTQVNMX09LKSB7 CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGluaXRpYWxpemUgU0FTTCBhdXRo ICVzIiwKKyAgICAgICAgICAgICAgICBzYXNsX2VycnN0cmluZyhzYXNsRXJyLCBOVUxMLCBOVUxM KSk7CisgICAgICAgIGZyZWUodnMtPmRpc3BsYXkpOworICAgICAgICB2cy0+ZGlzcGxheSA9IE5V TEw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjZW5kaWYKKwogI2lmbmRlZiBOT19VTklY X1NPQ0tFVFMKICAgICBpZiAoc3Ryc3RhcnQoZGlzcGxheSwgInVuaXg6IiwgJnApKSB7CiAJYWRk ciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmdWFkZHI7Ci0tIAoyLjcuNAoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=