From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joe Stringer Subject: [PATCH net-next v12 5/5] openvswitch: Add support for unique flow IDs. Date: Thu, 15 Jan 2015 13:48:27 -0800 Message-ID: <1421358507-5992-6-git-send-email-joestringer@nicira.com> References: <1421358507-5992-1-git-send-email-joestringer@nicira.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: dev-yBygre7rU0TnMu66kgdUjQ@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Return-path: In-Reply-To: <1421358507-5992-1-git-send-email-joestringer-l0M0P4e3n4LQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces-yBygre7rU0TnMu66kgdUjQ@public.gmane.org Sender: "dev" List-Id: netdev.vger.kernel.org UHJldmlvdXNseSwgZmxvd3Mgd2VyZSBtYW5pcHVsYXRlZCBieSB1c2Vyc3BhY2Ugc3BlY2lmeWlu ZyBhIGZ1bGwsCnVubWFza2VkIGZsb3cga2V5LiBUaGlzIGFkZHMgc2lnbmlmaWNhbnQgYnVyZGVu IG9udG8gZmxvdwpzZXJpYWxpemF0aW9uL2Rlc2VyaWFsaXphdGlvbiwgcGFydGljdWxhcmx5IHdo ZW4gZHVtcGluZyBmbG93cy4KClRoaXMgcGF0Y2ggYWRkcyBhbiBhbHRlcm5hdGl2ZSB3YXkgdG8g cmVmZXIgdG8gZmxvd3MgdXNpbmcgYQp2YXJpYWJsZS1sZW5ndGggInVuaXF1ZSBmbG93IGlkZW50 aWZpZXIiIChVRklEKS4gQXQgZmxvdyBzZXR1cCB0aW1lLAp1c2Vyc3BhY2UgbWF5IHNwZWNpZnkg YSBVRklEIGZvciBhIGZsb3csIHdoaWNoIGlzIHN0b3JlZCB3aXRoIHRoZSBmbG93CmFuZCBpbnNl cnRlZCBpbnRvIGEgc2VwYXJhdGUgdGFibGUgZm9yIGxvb2t1cCwgaW4gYWRkaXRpb24gdG8gdGhl CnN0YW5kYXJkIGZsb3cgdGFibGUuIEZsb3dzIGNyZWF0ZWQgdXNpbmcgYSBVRklEIG11c3QgYmUg ZmV0Y2hlZCBvcgpkZWxldGVkIHVzaW5nIHRoZSBVRklELgoKQWxsIGZsb3cgZHVtcCBvcGVyYXRp b25zIG1heSBub3cgYmUgbWFkZSBtb3JlIHRlcnNlIHdpdGggT1ZTX1VGSURfRl8qCmZsYWdzLiBG b3IgZXhhbXBsZSwgdGhlIE9WU19VRklEX0ZfT01JVF9LRVkgZmxhZyBhbGxvd3MgcmVzcG9uc2Vz IHRvCm9taXQgdGhlIGZsb3cga2V5IGZyb20gYSBkYXRhcGF0aCBvcGVyYXRpb24gaWYgdGhlIGZs b3cgaGFzIGEKY29ycmVzcG9uZGluZyBVRklELiBUaGlzIHNpZ25pZmljYW50bHkgcmVkdWNlcyB0 aGUgdGltZSBzcGVudCBhc3NlbWJsaW5nCmFuZCB0cmFuc2FjdGluZyBuZXRsaW5rIG1lc3NhZ2Vz LiBXaXRoIGFsbCBPVlNfVUZJRF9GX09NSVRfKiBmbGFncwplbmFibGVkLCB0aGUgZGF0YXBhdGgg b25seSByZXR1cm5zIHRoZSBVRklEIGFuZCBzdGF0aXN0aWNzIGZvciBlYWNoIGZsb3cKZHVyaW5n IGZsb3cgZHVtcCwgaW5jcmVhc2luZyBvdnMtdnN3aXRjaGQgcmV2YWxpZGF0b3IgcGVyZm9ybWFu Y2UgYnkgNDAlCm9yIG1vcmUuCgpTaWduZWQtb2ZmLWJ5OiBKb2UgU3RyaW5nZXIgPGpvZXN0cmlu Z2VyQG5pY2lyYS5jb20+Ci0tLQogRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29wZW52c3dpdGNo LnR4dCB8ICAgMTMgKysKIGluY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oICAgICAgICAg fCAgIDIwICsrKwogbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMgICAgICAgICAgICAgICB8ICAy MjEgKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tCiBuZXQvb3BlbnZzd2l0Y2gvZmxvdy5o ICAgICAgICAgICAgICAgICAgIHwgICAyOCArKystCiBuZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRs aW5rLmMgICAgICAgICAgIHwgICA2NyArKysrKysrKy0KIG5ldC9vcGVudnN3aXRjaC9mbG93X25l dGxpbmsuaCAgICAgICAgICAgfCAgICA5ICstCiBuZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5j ICAgICAgICAgICAgIHwgIDE4NyArKysrKysrKysrKysrKysrKysrKy0tLS0tCiBuZXQvb3BlbnZz d2l0Y2gvZmxvd190YWJsZS5oICAgICAgICAgICAgIHwgICAgOCArLQogOCBmaWxlcyBjaGFuZ2Vk LCA0NjEgaW5zZXJ0aW9ucygrKSwgOTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvRG9jdW1l bnRhdGlvbi9uZXR3b3JraW5nL29wZW52c3dpdGNoLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29y a2luZy9vcGVudnN3aXRjaC50eHQKaW5kZXggMzdjMjBlZS4uYjNiOWFjNiAxMDA2NDQKLS0tIGEv RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL29wZW52c3dpdGNoLnR4dAorKysgYi9Eb2N1bWVudGF0 aW9uL25ldHdvcmtpbmcvb3BlbnZzd2l0Y2gudHh0CkBAIC0xMzEsNiArMTMxLDE5IEBAIHBlcmZv cm1zIGJlc3QtZWZmb3J0IGRldGVjdGlvbiBvZiBvdmVybGFwcGluZyB3aWxkY2FyZGVkIGZsb3dz IGFuZCBtYXkgcmVqZWN0CiBzb21lIGJ1dCBub3QgYWxsIG9mIHRoZW0uIEhvd2V2ZXIsIHRoaXMg YmVoYXZpb3IgbWF5IGNoYW5nZSBpbiBmdXR1cmUgdmVyc2lvbnMuCiAKIAorVW5pcXVlIGZsb3cg aWRlbnRpZmllcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0FuIGFsdGVybmF0aXZlIHRv IHVzaW5nIHRoZSBvcmlnaW5hbCBtYXRjaCBwb3J0aW9uIG9mIGEga2V5IGFzIHRoZSBoYW5kbGUg Zm9yCitmbG93IGlkZW50aWZpY2F0aW9uIGlzIGEgdW5pcXVlIGZsb3cgaWRlbnRpZmllciwgb3Ig IlVGSUQiLiBVRklEcyBhcmUgb3B0aW9uYWwKK2ZvciBib3RoIHRoZSBrZXJuZWwgYW5kIHVzZXIg c3BhY2UgcHJvZ3JhbS4KKworVXNlciBzcGFjZSBwcm9ncmFtcyB0aGF0IHN1cHBvcnQgVUZJRCBh cmUgZXhwZWN0ZWQgdG8gcHJvdmlkZSBpdCBkdXJpbmcgZmxvdworc2V0dXAgaW4gYWRkaXRpb24g dG8gdGhlIGZsb3csIHRoZW4gcmVmZXIgdG8gdGhlIGZsb3cgdXNpbmcgdGhlIFVGSUQgZm9yIGFs bAorZnV0dXJlIG9wZXJhdGlvbnMuIFRoZSBrZXJuZWwgaXMgbm90IHJlcXVpcmVkIHRvIGluZGV4 IGZsb3dzIGJ5IHRoZSBvcmlnaW5hbAorZmxvdyBrZXkgaWYgYSBVRklEIGlzIHNwZWNpZmllZC4K KworCiBCYXNpYyBydWxlIGZvciBldm9sdmluZyBmbG93IGtleXMKIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvb3BlbnZz d2l0Y2guaCBiL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCmluZGV4IGNkOGQ5MzMu LjdhODc4NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCisr KyBiL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCkBAIC00NTksNiArNDU5LDE0IEBA IHN0cnVjdCBvdnNfa2V5X25kIHsKICAqIGEgd2lsZGNhcmRlZCBtYXRjaC4gT21pdHRpbmcgYXR0 cmlidXRlIGlzIHRyZWF0ZWQgYXMgd2lsZGNhcmRpbmcgYWxsCiAgKiBjb3JyZXNwb25kaW5nIGZp ZWxkcy4gT3B0aW9uYWwgZm9yIGFsbCByZXF1ZXN0cy4gSWYgbm90IHByZXNlbnQsCiAgKiBhbGwg ZmxvdyBrZXkgYml0cyBhcmUgZXhhY3QgbWF0Y2ggYml0cy4KKyAqIEBPVlNfRkxPV19BVFRSX1VG SUQ6IEEgdmFsdWUgYmV0d2VlbiAxLTE2IG9jdGV0cyBzcGVjaWZ5aW5nIGEgdW5pcXVlCisgKiBp ZGVudGlmaWVyIGZvciB0aGUgZmxvdy4gQ2F1c2VzIHRoZSBmbG93IHRvIGJlIGluZGV4ZWQgYnkg dGhpcyB2YWx1ZSByYXRoZXIKKyAqIHRoYW4gdGhlIHZhbHVlIG9mIHRoZSAlT1ZTX0ZMT1dfQVRU Ul9LRVkgYXR0cmlidXRlLiBPcHRpb25hbCBmb3IgYWxsCisgKiByZXF1ZXN0cy4gUHJlc2VudCBp biBub3RpZmljYXRpb25zIGlmIHRoZSBmbG93IHdhcyBjcmVhdGVkIHdpdGggdGhpcworICogYXR0 cmlidXRlLgorICogQE9WU19GTE9XX0FUVFJfVUZJRF9GTEFHUzogQSAzMi1iaXQgdmFsdWUgb2Yg T1InZCAlT1ZTX1VGSURfRl8qCisgKiBmbGFncyB0aGF0IHByb3ZpZGUgYWx0ZXJuYXRpdmUgc2Vt YW50aWNzIGZvciBmbG93IGluc3RhbGxhdGlvbiBhbmQKKyAqIHJldHJpZXZhbC4gT3B0aW9uYWwg Zm9yIGFsbCByZXF1ZXN0cy4KICAqCiAgKiBUaGVzZSBhdHRyaWJ1dGVzIGZvbGxvdyB0aGUgJnN0 cnVjdCBvdnNfaGVhZGVyIHdpdGhpbiB0aGUgR2VuZXJpYyBOZXRsaW5rCiAgKiBwYXlsb2FkIGZv ciAlT1ZTX0ZMT1dfKiBjb21tYW5kcy4KQEAgLTQ3NCwxMiArNDgyLDI0IEBAIGVudW0gb3ZzX2Zs b3dfYXR0ciB7CiAJT1ZTX0ZMT1dfQVRUUl9NQVNLLCAgICAgIC8qIFNlcXVlbmNlIG9mIE9WU19L RVlfQVRUUl8qIGF0dHJpYnV0ZXMuICovCiAJT1ZTX0ZMT1dfQVRUUl9QUk9CRSwgICAgIC8qIEZs b3cgb3BlcmF0aW9uIGlzIGEgZmVhdHVyZSBwcm9iZSwgZXJyb3IKIAkJCQkgICogbG9nZ2luZyBz aG91bGQgYmUgc3VwcHJlc3NlZC4gKi8KKwlPVlNfRkxPV19BVFRSX1VGSUQsICAgICAgLyogVmFy aWFibGUgbGVuZ3RoIHVuaXF1ZSBmbG93IGlkZW50aWZpZXIuICovCisJT1ZTX0ZMT1dfQVRUUl9V RklEX0ZMQUdTLC8qIHUzMiBvZiBPVlNfVUZJRF9GXyouICovCiAJX19PVlNfRkxPV19BVFRSX01B WAogfTsKIAogI2RlZmluZSBPVlNfRkxPV19BVFRSX01BWCAoX19PVlNfRkxPV19BVFRSX01BWCAt IDEpCiAKIC8qKgorICogT21pdCBhdHRyaWJ1dGVzIGZvciBub3RpZmljYXRpb25zLgorICoKKyAq IElmIGEgZGF0YXBhdGggcmVxdWVzdCBjb250YWlucyBhbiAlT1ZTX1VGSURfRl9PTUlUXyogZmxh ZywgdGhlbiB0aGUgZGF0YXBhdGgKKyAqIG1heSBvbWl0IHRoZSBjb3JyZXNwb25kaW5nICVPVlNf RkxPV19BVFRSXyogZnJvbSB0aGUgcmVzcG9uc2UuCisgKi8KKyNkZWZpbmUgT1ZTX1VGSURfRl9P TUlUX0tFWSAgICAgICgxIDw8IDApCisjZGVmaW5lIE9WU19VRklEX0ZfT01JVF9NQVNLICAgICAo MSA8PCAxKQorI2RlZmluZSBPVlNfVUZJRF9GX09NSVRfQUNUSU9OUyAgKDEgPDwgMikKKworLyoq CiAgKiBlbnVtIG92c19zYW1wbGVfYXR0ciAtIEF0dHJpYnV0ZXMgZm9yICVPVlNfQUNUSU9OX0FU VFJfU0FNUExFIGFjdGlvbi4KICAqIEBPVlNfU0FNUExFX0FUVFJfUFJPQkFCSUxJVFk6IDMyLWJp dCBmcmFjdGlvbiBvZiBwYWNrZXRzIHRvIHNhbXBsZSB3aXRoCiAgKiBAT1ZTX0FDVElPTl9BVFRS X1NBTVBMRS4gIEEgdmFsdWUgb2YgMCBzYW1wbGVzIG5vIHBhY2tldHMsIGEgdmFsdWUgb2YKZGlm ZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9kYXRhcGF0aC5jIGIvbmV0L29wZW52c3dpdGNoL2Rh dGFwYXRoLmMKaW5kZXggM2RlZDM0OS4uNTY0ZTE2MyAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dp dGNoL2RhdGFwYXRoLmMKKysrIGIvbmV0L29wZW52c3dpdGNoL2RhdGFwYXRoLmMKQEAgLTY1LDYg KzY1LDggQEAgc3RhdGljIHN0cnVjdCBnZW5sX2ZhbWlseSBkcF9wYWNrZXRfZ2VubF9mYW1pbHk7 CiBzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IGRwX2Zsb3dfZ2VubF9mYW1pbHk7CiBzdGF0aWMg c3RydWN0IGdlbmxfZmFtaWx5IGRwX2RhdGFwYXRoX2dlbmxfZmFtaWx5OwogCitzdGF0aWMgY29u c3Qgc3RydWN0IG5sYV9wb2xpY3kgZmxvd19wb2xpY3lbXTsKKwogc3RhdGljIGNvbnN0IHN0cnVj dCBnZW5sX211bHRpY2FzdF9ncm91cCBvdnNfZHBfZmxvd19tdWx0aWNhc3RfZ3JvdXAgPSB7CiAJ Lm5hbWUgPSBPVlNfRkxPV19NQ0dST1VQLAogfTsKQEAgLTY2MiwxNSArNjY0LDQ4IEBAIHN0YXRp YyB2b2lkIGdldF9kcF9zdGF0cyhjb25zdCBzdHJ1Y3QgZGF0YXBhdGggKmRwLCBzdHJ1Y3Qgb3Zz X2RwX3N0YXRzICpzdGF0cywKIAl9CiB9CiAKLXN0YXRpYyBzaXplX3Qgb3ZzX2Zsb3dfY21kX21z Z19zaXplKGNvbnN0IHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKmFjdHMpCitzdGF0aWMgYm9vbCBz aG91bGRfZmlsbF9rZXkoY29uc3Qgc3RydWN0IHN3X2Zsb3dfaWQgKnNmaWQsIHVpbnQzMl90IHVm aWRfZmxhZ3MpCit7CisJcmV0dXJuIG92c19pZGVudGlmaWVyX2lzX2tleShzZmlkKSB8fAorCSAg ICAgICAhKHVmaWRfZmxhZ3MgJiBPVlNfVUZJRF9GX09NSVRfS0VZKTsKK30KKworc3RhdGljIGJv b2wgc2hvdWxkX2ZpbGxfbWFzayh1aW50MzJfdCB1ZmlkX2ZsYWdzKQogewotCXJldHVybiBOTE1T R19BTElHTihzaXplb2Yoc3RydWN0IG92c19oZWFkZXIpKQotCQkrIG5sYV90b3RhbF9zaXplKG92 c19rZXlfYXR0cl9zaXplKCkpIC8qIE9WU19GTE9XX0FUVFJfS0VZICovCi0JCSsgbmxhX3RvdGFs X3NpemUob3ZzX2tleV9hdHRyX3NpemUoKSkgLyogT1ZTX0ZMT1dfQVRUUl9NQVNLICovCisJcmV0 dXJuICEodWZpZF9mbGFncyAmIE9WU19VRklEX0ZfT01JVF9NQVNLKTsKK30KKworc3RhdGljIGJv b2wgc2hvdWxkX2ZpbGxfYWN0aW9ucyh1aW50MzJfdCB1ZmlkX2ZsYWdzKQoreworCXJldHVybiAh KHVmaWRfZmxhZ3MgJiBPVlNfVUZJRF9GX09NSVRfQUNUSU9OUyk7Cit9CisKK3N0YXRpYyBzaXpl X3Qgb3ZzX2Zsb3dfY21kX21zZ19zaXplKGNvbnN0IHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKmFj dHMsCisJCQkJICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2lkICpzZmlkLAorCQkJCSAgICB1aW50 MzJfdCB1ZmlkX2ZsYWdzKQoreworCXNpemVfdCBsZW4gPSBOTE1TR19BTElHTihzaXplb2Yoc3Ry dWN0IG92c19oZWFkZXIpKTsKKworCS8qIE9WU19GTE9XX0FUVFJfVUZJRCAqLworCWlmIChzZmlk ICYmIG92c19pZGVudGlmaWVyX2lzX3VmaWQoc2ZpZCkpCisJCWxlbiArPSBubGFfdG90YWxfc2l6 ZShzZmlkLT51ZmlkX2xlbik7CisKKwkvKiBPVlNfRkxPV19BVFRSX0tFWSAqLworCWlmICghc2Zp ZCB8fCBzaG91bGRfZmlsbF9rZXkoc2ZpZCwgdWZpZF9mbGFncykpCisJCWxlbiArPSBubGFfdG90 YWxfc2l6ZShvdnNfa2V5X2F0dHJfc2l6ZSgpKTsKKworCS8qIE9WU19GTE9XX0FUVFJfTUFTSyAq LworCWlmIChzaG91bGRfZmlsbF9tYXNrKHVmaWRfZmxhZ3MpKQorCQlsZW4gKz0gbmxhX3RvdGFs X3NpemUob3ZzX2tleV9hdHRyX3NpemUoKSk7CisKKwkvKiBPVlNfRkxPV19BVFRSX0FDVElPTlMg Ki8KKwlpZiAoc2hvdWxkX2ZpbGxfYWN0aW9ucyh1ZmlkX2ZsYWdzKSkKKwkJbGVuICs9IG5sYV90 b3RhbF9zaXplKGFjdHMtPmFjdGlvbnNfbGVuKTsKKworCXJldHVybiBsZW4KIAkJKyBubGFfdG90 YWxfc2l6ZShzaXplb2Yoc3RydWN0IG92c19mbG93X3N0YXRzKSkgLyogT1ZTX0ZMT1dfQVRUUl9T VEFUUyAqLwogCQkrIG5sYV90b3RhbF9zaXplKDEpIC8qIE9WU19GTE9XX0FUVFJfVENQX0ZMQUdT ICovCi0JCSsgbmxhX3RvdGFsX3NpemUoOCkgLyogT1ZTX0ZMT1dfQVRUUl9VU0VEICovCi0JCSsg bmxhX3RvdGFsX3NpemUoYWN0cy0+YWN0aW9uc19sZW4pOyAvKiBPVlNfRkxPV19BVFRSX0FDVElP TlMgKi8KKwkJKyBubGFfdG90YWxfc2l6ZSg4KTsgLyogT1ZTX0ZMT1dfQVRUUl9VU0VEICovCiB9 CiAKIC8qIENhbGxlZCB3aXRoIG92c19tdXRleCBvciBSQ1UgcmVhZCBsb2NrLiAqLwpAQCAtNzQx LDcgKzc3Niw3IEBAIHN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2ZpbGxfYWN0aW9ucyhjb25zdCBz dHJ1Y3Qgc3dfZmxvdyAqZmxvdywKIC8qIENhbGxlZCB3aXRoIG92c19tdXRleCBvciBSQ1UgcmVh ZCBsb2NrLiAqLwogc3RhdGljIGludCBvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGNvbnN0IHN0cnVj dCBzd19mbG93ICpmbG93LCBpbnQgZHBfaWZpbmRleCwKIAkJCQkgIHN0cnVjdCBza19idWZmICpz a2IsIHUzMiBwb3J0aWQsCi0JCQkJICB1MzIgc2VxLCB1MzIgZmxhZ3MsIHU4IGNtZCkKKwkJCQkg IHUzMiBzZXEsIHUzMiBmbGFncywgdTggY21kLCB1MzIgdWZpZF9mbGFncykKIHsKIAljb25zdCBp bnQgc2tiX29yaWdfbGVuID0gc2tiLT5sZW47CiAJc3RydWN0IG92c19oZWFkZXIgKm92c19oZWFk ZXI7CkBAIC03NTQsMjEgKzc4OSwzMSBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9maWxsX2lu Zm8oY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csIGludCBkcF9pZmluZGV4LAogCiAJb3ZzX2hl YWRlci0+ZHBfaWZpbmRleCA9IGRwX2lmaW5kZXg7CiAKLQllcnIgPSBvdnNfbmxhX3B1dF91bm1h c2tlZF9rZXkoZmxvdywgc2tiKTsKKwllcnIgPSBvdnNfbmxhX3B1dF9pZGVudGlmaWVyKGZsb3cs IHNrYik7CiAJaWYgKGVycikKIAkJZ290byBlcnJvcjsKIAotCWVyciA9IG92c19ubGFfcHV0X21h c2soZmxvdywgc2tiKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycm9yOworCWlmIChzaG91bGRfZmls bF9rZXkoZmxvdy0+aWQsIHVmaWRfZmxhZ3MpKSB7CisJCWVyciA9IG92c19ubGFfcHV0X21hc2tl ZF9rZXkoZmxvdywgc2tiKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyb3I7CisJfQorCisJaWYg KHNob3VsZF9maWxsX21hc2sodWZpZF9mbGFncykpIHsKKwkJZXJyID0gb3ZzX25sYV9wdXRfbWFz ayhmbG93LCBza2IpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcjsKKwl9CiAKIAllcnIgPSBv dnNfZmxvd19jbWRfZmlsbF9zdGF0cyhmbG93LCBza2IpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJy b3I7CiAKLQllcnIgPSBvdnNfZmxvd19jbWRfZmlsbF9hY3Rpb25zKGZsb3csIHNrYiwgc2tiX29y aWdfbGVuKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycm9yOworCWlmIChzaG91bGRfZmlsbF9hY3Rp b25zKHVmaWRfZmxhZ3MpKSB7CisJCWVyciA9IG92c19mbG93X2NtZF9maWxsX2FjdGlvbnMoZmxv dywgc2tiLCBza2Jfb3JpZ19sZW4pOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJvcjsKKwl9CiAK IAlyZXR1cm4gZ2VubG1zZ19lbmQoc2tiLCBvdnNfaGVhZGVyKTsKIApAQCAtNzc5LDE1ICs4MjQs MTkgQEAgZXJyb3I6CiAKIC8qIE1heSBub3QgYmUgY2FsbGVkIHdpdGggUkNVIHJlYWQgbG9jay4g Ki8KIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqb3ZzX2Zsb3dfY21kX2FsbG9jX2luZm8oY29uc3Qg c3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqYWN0cywKKwkJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBz d19mbG93X2lkICpzZmlkLAogCQkJCQkgICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbywKLQkJ CQkJICAgICAgIGJvb2wgYWx3YXlzKQorCQkJCQkgICAgICAgYm9vbCBhbHdheXMsCisJCQkJCSAg ICAgICB1aW50MzJfdCB1ZmlkX2ZsYWdzKQogewogCXN0cnVjdCBza19idWZmICpza2I7CisJc2l6 ZV90IGxlbjsKIAogCWlmICghYWx3YXlzICYmICFvdnNfbXVzdF9ub3RpZnkoJmRwX2Zsb3dfZ2Vu bF9mYW1pbHksIGluZm8sIDApKQogCQlyZXR1cm4gTlVMTDsKIAotCXNrYiA9IGdlbmxtc2dfbmV3 X3VuaWNhc3Qob3ZzX2Zsb3dfY21kX21zZ19zaXplKGFjdHMpLCBpbmZvLCBHRlBfS0VSTkVMKTsK KwlsZW4gPSBvdnNfZmxvd19jbWRfbXNnX3NpemUoYWN0cywgc2ZpZCwgdWZpZF9mbGFncyk7CisJ c2tiID0gZ2VubG1zZ19uZXdfdW5pY2FzdChsZW4sIGluZm8sIEdGUF9LRVJORUwpOwogCWlmICgh c2tiKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIApAQCAtNzk4LDE5ICs4NDcsMTkgQEAg c3RhdGljIHN0cnVjdCBza19idWZmICpvdnNfZmxvd19jbWRfYWxsb2NfaW5mbyhjb25zdCBzdHJ1 Y3Qgc3dfZmxvd19hY3Rpb25zICphY3QKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqb3ZzX2Zsb3df Y21kX2J1aWxkX2luZm8oY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csCiAJCQkJCSAgICAgICBp bnQgZHBfaWZpbmRleCwKIAkJCQkJICAgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8sIHU4IGNt ZCwKLQkJCQkJICAgICAgIGJvb2wgYWx3YXlzKQorCQkJCQkgICAgICAgYm9vbCBhbHdheXMsIHUz MiB1ZmlkX2ZsYWdzKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IHJldHZhbDsKIAot CXNrYiA9IG92c19mbG93X2NtZF9hbGxvY19pbmZvKG92c2xfZGVyZWZlcmVuY2UoZmxvdy0+c2Zf YWN0cyksIGluZm8sCi0JCQkJICAgICAgYWx3YXlzKTsKKwlza2IgPSBvdnNfZmxvd19jbWRfYWxs b2NfaW5mbyhvdnNsX2RlcmVmZXJlbmNlKGZsb3ctPnNmX2FjdHMpLAorCQkJCSAgICAgIGZsb3ct PmlkLCBpbmZvLCBhbHdheXMsIHVmaWRfZmxhZ3MpOwogCWlmIChJU19FUlJfT1JfTlVMTChza2Ip KQogCQlyZXR1cm4gc2tiOwogCiAJcmV0dmFsID0gb3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhmbG93 LCBkcF9pZmluZGV4LCBza2IsCiAJCQkJCWluZm8tPnNuZF9wb3J0aWQsIGluZm8tPnNuZF9zZXEs IDAsCi0JCQkJCWNtZCk7CisJCQkJCWNtZCwgdWZpZF9mbGFncyk7CiAJQlVHX09OKHJldHZhbCA8 IDApOwogCXJldHVybiBza2I7CiB9CkBAIC04MTksMTIgKzg2OCwxNSBAQCBzdGF0aWMgaW50IG92 c19mbG93X2NtZF9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5m bykKIHsKIAlzdHJ1Y3QgbmxhdHRyICoqYSA9IGluZm8tPmF0dHJzOwogCXN0cnVjdCBvdnNfaGVh ZGVyICpvdnNfaGVhZGVyID0gaW5mby0+dXNlcmhkcjsKLQlzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywg Km5ld19mbG93OworCXN0cnVjdCBzd19mbG93ICpmbG93ID0gTlVMTCwgKm5ld19mbG93OwogCXN0 cnVjdCBzd19mbG93X21hc2sgbWFzazsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcmVwbHk7CiAJc3RydWN0 IGRhdGFwYXRoICpkcDsKKwlzdHJ1Y3Qgc3dfZmxvd19rZXkga2V5OworCXN0cnVjdCBzd19mbG93 X2lkICpzZmlkOwogCXN0cnVjdCBzd19mbG93X2FjdGlvbnMgKmFjdHM7CiAJc3RydWN0IHN3X2Zs b3dfbWF0Y2ggbWF0Y2g7CisJdTMyIHVmaWRfZmxhZ3MgPSBvdnNfbmxhX2dldF91ZmlkX2ZsYWdz KGFbT1ZTX0ZMT1dfQVRUUl9VRklEX0ZMQUdTXSk7CiAJaW50IGVycm9yOwogCWJvb2wgbG9nID0g IWFbT1ZTX0ZMT1dfQVRUUl9QUk9CRV07CiAKQEAgLTg0OSwxMyArOTAxLDIxIEBAIHN0YXRpYyBp bnQgb3ZzX2Zsb3dfY21kX25ldyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZv ICppbmZvKQogCX0KIAogCS8qIEV4dHJhY3Qga2V5LiAqLwotCW92c19tYXRjaF9pbml0KCZtYXRj aCwgJm5ld19mbG93LT51bm1hc2tlZF9rZXksICZtYXNrKTsKKwlvdnNfbWF0Y2hfaW5pdCgmbWF0 Y2gsICZrZXksICZtYXNrKTsKIAllcnJvciA9IG92c19ubGFfZ2V0X21hdGNoKCZtYXRjaCwgYVtP VlNfRkxPV19BVFRSX0tFWV0sCiAJCQkJICBhW09WU19GTE9XX0FUVFJfTUFTS10sIGxvZyk7CiAJ aWYgKGVycm9yKQogCQlnb3RvIGVycl9rZnJlZV9mbG93OwogCi0Jb3ZzX2Zsb3dfbWFza19rZXko Jm5ld19mbG93LT5rZXksICZuZXdfZmxvdy0+dW5tYXNrZWRfa2V5LCAmbWFzayk7CisJb3ZzX2Zs b3dfbWFza19rZXkoJm5ld19mbG93LT5rZXksICZrZXksICZtYXNrKTsKKworCS8qIEV4dHJhY3Qg ZmxvdyBpZGVudGlmaWVyLiAqLworCXNmaWQgPSBvdnNfbmxhX2NvcHlfaWRlbnRpZmllcihhW09W U19GTE9XX0FUVFJfVUZJRF0sICZrZXksIGxvZyk7CisJaWYgKElTX0VSUihzZmlkKSkgeworCQll cnJvciA9IFBUUl9FUlIoc2ZpZCk7CisJCWdvdG8gZXJyX2tmcmVlX2Zsb3c7CisJfQorCW5ld19m bG93LT5pZCA9IHNmaWQ7CiAKIAkvKiBWYWxpZGF0ZSBhY3Rpb25zLiAqLwogCWVycm9yID0gb3Zz X25sYV9jb3B5X2FjdGlvbnMoYVtPVlNfRkxPV19BVFRSX0FDVElPTlNdLCAmbmV3X2Zsb3ctPmtl eSwKQEAgLTg2NSw3ICs5MjUsOCBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9uZXcoc3RydWN0 IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJZ290byBlcnJfa2ZyZWVf ZmxvdzsKIAl9CiAKLQlyZXBseSA9IG92c19mbG93X2NtZF9hbGxvY19pbmZvKGFjdHMsIGluZm8s IGZhbHNlKTsKKwlyZXBseSA9IG92c19mbG93X2NtZF9hbGxvY19pbmZvKGFjdHMsIG5ld19mbG93 LT5pZCwgaW5mbywgZmFsc2UsCisJCQkJCXVmaWRfZmxhZ3MpOwogCWlmIChJU19FUlIocmVwbHkp KSB7CiAJCWVycm9yID0gUFRSX0VSUihyZXBseSk7CiAJCWdvdG8gZXJyX2tmcmVlX2FjdHM7CkBA IC04NzcsOCArOTM4LDEyIEBAIHN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX25ldyhzdHJ1Y3Qgc2tf YnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogCQllcnJvciA9IC1FTk9ERVY7CiAJ CWdvdG8gZXJyX3VubG9ja19vdnM7CiAJfQorCiAJLyogQ2hlY2sgaWYgdGhpcyBpcyBhIGR1cGxp Y2F0ZSBmbG93ICovCi0JZmxvdyA9IG92c19mbG93X3RibF9sb29rdXAoJmRwLT50YWJsZSwgJm5l d19mbG93LT51bm1hc2tlZF9rZXkpOworCWlmIChvdnNfaWRlbnRpZmllcl9pc191ZmlkKG5ld19m bG93LT5pZCkpCisJCWZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX3VmaWQoJmRwLT50YWJsZSwg bmV3X2Zsb3ctPmlkKTsKKwlpZiAoIWZsb3cpCisJCWZsb3cgPSBvdnNfZmxvd190YmxfbG9va3Vw KCZkcC0+dGFibGUsICZuZXdfZmxvdy0+a2V5KTsKIAlpZiAobGlrZWx5KCFmbG93KSkgewogCQly Y3VfYXNzaWduX3BvaW50ZXIobmV3X2Zsb3ctPnNmX2FjdHMsIGFjdHMpOwogCkBAIC04OTQsNyAr OTU5LDggQEAgc3RhdGljIGludCBvdnNfZmxvd19jbWRfbmV3KHN0cnVjdCBza19idWZmICpza2Is IHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCQkJCQkgICAgICAgb3ZzX2hlYWRlci0+ZHBfaWZp bmRleCwKIAkJCQkJCSAgICAgICByZXBseSwgaW5mby0+c25kX3BvcnRpZCwKIAkJCQkJCSAgICAg ICBpbmZvLT5zbmRfc2VxLCAwLAotCQkJCQkJICAgICAgIE9WU19GTE9XX0NNRF9ORVcpOworCQkJ CQkJICAgICAgIE9WU19GTE9XX0NNRF9ORVcsCisJCQkJCQkgICAgICAgdWZpZF9mbGFncyk7CiAJ CQlCVUdfT04oZXJyb3IgPCAwKTsKIAkJfQogCQlvdnNfdW5sb2NrKCk7CkBAIC05MTIsMTAgKzk3 OCwxNSBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9uZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwg c3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJCWVycm9yID0gLUVFWElTVDsKIAkJCWdvdG8gZXJy X3VubG9ja19vdnM7CiAJCX0KLQkJLyogVGhlIHVubWFza2VkIGtleSBoYXMgdG8gYmUgdGhlIHNh bWUgZm9yIGZsb3cgdXBkYXRlcy4gKi8KLQkJaWYgKHVubGlrZWx5KCFvdnNfZmxvd19jbXBfdW5t YXNrZWRfa2V5KGZsb3csICZtYXRjaCkpKSB7Ci0JCQkvKiBMb29rIGZvciBhbnkgb3ZlcmxhcHBp bmcgZmxvdy4gKi8KLQkJCWZsb3cgPSBvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KCZkcC0+dGFi bGUsICZtYXRjaCk7CisJCS8qIFRoZSBmbG93IGlkZW50aWZpZXIgaGFzIHRvIGJlIHRoZSBzYW1l IGZvciBmbG93IHVwZGF0ZXMuCisJCSAqIExvb2sgZm9yIGFueSBvdmVybGFwcGluZyBmbG93Lgor CQkgKi8KKwkJaWYgKHVubGlrZWx5KCFvdnNfZmxvd19jbXAoZmxvdywgJm1hdGNoKSkpIHsKKwkJ CWlmIChvdnNfaWRlbnRpZmllcl9pc19rZXkoZmxvdy0+aWQpKQorCQkJCWZsb3cgPSBvdnNfZmxv d190YmxfbG9va3VwX2V4YWN0KCZkcC0+dGFibGUsCisJCQkJCQkJCSAmbWF0Y2gpOworCQkJZWxz ZSAvKiBVRklEIG1hdGNoZXMgYnV0IGtleSBpcyBkaWZmZXJlbnQgKi8KKwkJCQlmbG93ID0gTlVM TDsKIAkJCWlmICghZmxvdykgewogCQkJCWVycm9yID0gLUVOT0VOVDsKIAkJCQlnb3RvIGVycl91 bmxvY2tfb3ZzOwpAQCAtOTMwLDcgKzEwMDEsOCBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9u ZXcoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJCQkJCSAg ICAgICBvdnNfaGVhZGVyLT5kcF9pZmluZGV4LAogCQkJCQkJICAgICAgIHJlcGx5LCBpbmZvLT5z bmRfcG9ydGlkLAogCQkJCQkJICAgICAgIGluZm8tPnNuZF9zZXEsIDAsCi0JCQkJCQkgICAgICAg T1ZTX0ZMT1dfQ01EX05FVyk7CisJCQkJCQkgICAgICAgT1ZTX0ZMT1dfQ01EX05FVywKKwkJCQkJ CSAgICAgICB1ZmlkX2ZsYWdzKTsKIAkJCUJVR19PTihlcnJvciA8IDApOwogCQl9CiAJCW92c191 bmxvY2soKTsKQEAgLTk4Niw2ICsxMDU4LDggQEAgc3RhdGljIGludCBvdnNfZmxvd19jbWRfc2V0 KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJc3RydWN0IGRh dGFwYXRoICpkcDsKIAlzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICpvbGRfYWN0cyA9IE5VTEwsICph Y3RzID0gTlVMTDsKIAlzdHJ1Y3Qgc3dfZmxvd19tYXRjaCBtYXRjaDsKKwlzdHJ1Y3Qgc3dfZmxv d19pZCAqc2ZpZCA9IE5VTEw7CisJdTMyIHVmaWRfZmxhZ3MgPSBvdnNfbmxhX2dldF91ZmlkX2Zs YWdzKGFbT1ZTX0ZMT1dfQVRUUl9VRklEX0ZMQUdTXSk7CiAJaW50IGVycm9yOwogCWJvb2wgbG9n ID0gIWFbT1ZTX0ZMT1dfQVRUUl9QUk9CRV07CiAKQEAgLTEwMDIsMTcgKzEwNzYsMjcgQEAgc3Rh dGljIGludCBvdnNfZmxvd19jbWRfc2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5s X2luZm8gKmluZm8pCiAJaWYgKGVycm9yKQogCQlnb3RvIGVycm9yOwogCisJaWYgKGFbT1ZTX0ZM T1dfQVRUUl9VRklEXSkgeworCQlzZmlkID0gb3ZzX25sYV9jb3B5X2lkZW50aWZpZXIoYVtPVlNf RkxPV19BVFRSX1VGSURdLCAma2V5LAorCQkJCQkgICAgICAgbG9nKTsKKwkJaWYgKElTX0VSUihz ZmlkKSkgeworCQkJZXJyb3IgPSBQVFJfRVJSKHNmaWQpOworCQkJZ290byBlcnJvcjsKKwkJfQor CX0KKwogCS8qIFZhbGlkYXRlIGFjdGlvbnMuICovCiAJaWYgKGFbT1ZTX0ZMT1dfQVRUUl9BQ1RJ T05TXSkgewogCQlhY3RzID0gZ2V0X2Zsb3dfYWN0aW9ucyhhW09WU19GTE9XX0FUVFJfQUNUSU9O U10sICZrZXksICZtYXNrLAogCQkJCQlsb2cpOwogCQlpZiAoSVNfRVJSKGFjdHMpKSB7CiAJCQll cnJvciA9IFBUUl9FUlIoYWN0cyk7Ci0JCQlnb3RvIGVycm9yOworCQkJZ290byBlcnJfa2ZyZWVf aWQ7CiAJCX0KIAogCQkvKiBDYW4gYWxsb2NhdGUgYmVmb3JlIGxvY2tpbmcgaWYgaGF2ZSBhY3Rz LiAqLwotCQlyZXBseSA9IG92c19mbG93X2NtZF9hbGxvY19pbmZvKGFjdHMsIGluZm8sIGZhbHNl KTsKKwkJcmVwbHkgPSBvdnNfZmxvd19jbWRfYWxsb2NfaW5mbyhhY3RzLCBzZmlkLCBpbmZvLCBm YWxzZSwKKwkJCQkJCXVmaWRfZmxhZ3MpOwogCQlpZiAoSVNfRVJSKHJlcGx5KSkgewogCQkJZXJy b3IgPSBQVFJfRVJSKHJlcGx5KTsKIAkJCWdvdG8gZXJyX2tmcmVlX2FjdHM7CkBAIC0xMDI2LDcg KzExMTAsMTAgQEAgc3RhdGljIGludCBvdnNfZmxvd19jbWRfc2V0KHN0cnVjdCBza19idWZmICpz a2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJCWdvdG8gZXJyX3VubG9ja19vdnM7CiAJfQog CS8qIENoZWNrIHRoYXQgdGhlIGZsb3cgZXhpc3RzLiAqLwotCWZsb3cgPSBvdnNfZmxvd190Ymxf bG9va3VwX2V4YWN0KCZkcC0+dGFibGUsICZtYXRjaCk7CisJaWYgKHNmaWQpCisJCWZsb3cgPSBv dnNfZmxvd190YmxfbG9va3VwX3VmaWQoJmRwLT50YWJsZSwgc2ZpZCk7CisJZWxzZQorCQlmbG93 ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdCgmZHAtPnRhYmxlLCAmbWF0Y2gpOwogCWlmICh1 bmxpa2VseSghZmxvdykpIHsKIAkJZXJyb3IgPSAtRU5PRU5UOwogCQlnb3RvIGVycl91bmxvY2tf b3ZzOwpAQCAtMTA0MiwxMyArMTEyOSwxNiBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9zZXQo c3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAkJCQkJCSAgICAg ICBvdnNfaGVhZGVyLT5kcF9pZmluZGV4LAogCQkJCQkJICAgICAgIHJlcGx5LCBpbmZvLT5zbmRf cG9ydGlkLAogCQkJCQkJICAgICAgIGluZm8tPnNuZF9zZXEsIDAsCi0JCQkJCQkgICAgICAgT1ZT X0ZMT1dfQ01EX05FVyk7CisJCQkJCQkgICAgICAgT1ZTX0ZMT1dfQ01EX05FVywKKwkJCQkJCSAg ICAgICB1ZmlkX2ZsYWdzKTsKIAkJCUJVR19PTihlcnJvciA8IDApOwogCQl9CiAJfSBlbHNlIHsK IAkJLyogQ291bGQgbm90IGFsbG9jIHdpdGhvdXQgYWN0cyBiZWZvcmUgbG9ja2luZy4gKi8KIAkJ cmVwbHkgPSBvdnNfZmxvd19jbWRfYnVpbGRfaW5mbyhmbG93LCBvdnNfaGVhZGVyLT5kcF9pZmlu ZGV4LAotCQkJCQkJaW5mbywgT1ZTX0ZMT1dfQ01EX05FVywgZmFsc2UpOworCQkJCQkJaW5mbywg T1ZTX0ZMT1dfQ01EX05FVywgZmFsc2UsCisJCQkJCQl1ZmlkX2ZsYWdzKTsKKwogCQlpZiAodW5s aWtlbHkoSVNfRVJSKHJlcGx5KSkpIHsKIAkJCWVycm9yID0gUFRSX0VSUihyZXBseSk7CiAJCQln b3RvIGVycl91bmxvY2tfb3ZzOwpAQCAtMTA3Miw2ICsxMTYyLDggQEAgZXJyX3VubG9ja19vdnM6 CiAJa2ZyZWVfc2tiKHJlcGx5KTsKIGVycl9rZnJlZV9hY3RzOgogCWtmcmVlKGFjdHMpOworZXJy X2tmcmVlX2lkOgorCWtmcmVlKHNmaWQpOwogZXJyb3I6CiAJcmV0dXJuIGVycm9yOwogfQpAQCAt MTA4NSwxNyArMTE3NywyMiBAQCBzdGF0aWMgaW50IG92c19mbG93X2NtZF9nZXQoc3RydWN0IHNr X2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIAlzdHJ1Y3Qgc3dfZmxvdyAqZmxv dzsKIAlzdHJ1Y3QgZGF0YXBhdGggKmRwOwogCXN0cnVjdCBzd19mbG93X21hdGNoIG1hdGNoOwot CWludCBlcnI7CisJc3RydWN0IHN3X2Zsb3dfaWQgdWZpZDsKKwl1MzIgdWZpZF9mbGFncyA9IG92 c19ubGFfZ2V0X3VmaWRfZmxhZ3MoYVtPVlNfRkxPV19BVFRSX1VGSURfRkxBR1NdKTsKKwlpbnQg ZXJyID0gMDsKIAlib29sIGxvZyA9ICFhW09WU19GTE9XX0FUVFJfUFJPQkVdOworCWJvb2wgdWZp ZF9wcmVzZW50OwogCi0JaWYgKCFhW09WU19GTE9XX0FUVFJfS0VZXSkgeworCXVmaWRfcHJlc2Vu dCA9IG92c19ubGFfZ2V0X3VmaWQoYVtPVlNfRkxPV19BVFRSX1VGSURdLCAmdWZpZCwgbG9nKTsK KwlpZiAoYVtPVlNfRkxPV19BVFRSX0tFWV0pIHsKKwkJb3ZzX21hdGNoX2luaXQoJm1hdGNoLCAm a2V5LCBOVUxMKTsKKwkJZXJyID0gb3ZzX25sYV9nZXRfbWF0Y2goJm1hdGNoLCBhW09WU19GTE9X X0FUVFJfS0VZXSwgTlVMTCwKKwkJCQkJbG9nKTsKKwl9IGVsc2UgaWYgKCF1ZmlkX3ByZXNlbnQp IHsKIAkJT1ZTX05MRVJSKGxvZywKIAkJCSAgIkZsb3cgZ2V0IG1lc3NhZ2UgcmVqZWN0ZWQsIEtl eSBhdHRyaWJ1dGUgbWlzc2luZy4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWVyciA9IC1FSU5W QUw7CiAJfQotCi0Jb3ZzX21hdGNoX2luaXQoJm1hdGNoLCAma2V5LCBOVUxMKTsKLQllcnIgPSBv dnNfbmxhX2dldF9tYXRjaCgmbWF0Y2gsIGFbT1ZTX0ZMT1dfQVRUUl9LRVldLCBOVUxMLCBsb2cp OwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKQEAgLTExMDYsMTQgKzEyMDMsMTcgQEAgc3Rh dGljIGludCBvdnNfZmxvd19jbWRfZ2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5s X2luZm8gKmluZm8pCiAJCWdvdG8gdW5sb2NrOwogCX0KIAotCWZsb3cgPSBvdnNfZmxvd190Ymxf bG9va3VwX2V4YWN0KCZkcC0+dGFibGUsICZtYXRjaCk7CisJaWYgKHVmaWRfcHJlc2VudCkKKwkJ ZmxvdyA9IG92c19mbG93X3RibF9sb29rdXBfdWZpZCgmZHAtPnRhYmxlLCAmdWZpZCk7CisJZWxz ZQorCQlmbG93ID0gb3ZzX2Zsb3dfdGJsX2xvb2t1cF9leGFjdCgmZHAtPnRhYmxlLCAmbWF0Y2gp OwogCWlmICghZmxvdykgewogCQllcnIgPSAtRU5PRU5UOwogCQlnb3RvIHVubG9jazsKIAl9CiAK IAlyZXBseSA9IG92c19mbG93X2NtZF9idWlsZF9pbmZvKGZsb3csIG92c19oZWFkZXItPmRwX2lm aW5kZXgsIGluZm8sCi0JCQkJCU9WU19GTE9XX0NNRF9ORVcsIHRydWUpOworCQkJCQlPVlNfRkxP V19DTURfTkVXLCB0cnVlLCB1ZmlkX2ZsYWdzKTsKIAlpZiAoSVNfRVJSKHJlcGx5KSkgewogCQll cnIgPSBQVFJfRVJSKHJlcGx5KTsKIAkJZ290byB1bmxvY2s7CkBAIC0xMTMyLDEzICsxMjMyLDE3 IEBAIHN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21kX2RlbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1 Y3QgZ2VubF9pbmZvICppbmZvKQogCXN0cnVjdCBvdnNfaGVhZGVyICpvdnNfaGVhZGVyID0gaW5m by0+dXNlcmhkcjsKIAlzdHJ1Y3Qgc3dfZmxvd19rZXkga2V5OwogCXN0cnVjdCBza19idWZmICpy ZXBseTsKLQlzdHJ1Y3Qgc3dfZmxvdyAqZmxvdzsKKwlzdHJ1Y3Qgc3dfZmxvdyAqZmxvdyA9IE5V TEw7CiAJc3RydWN0IGRhdGFwYXRoICpkcDsKIAlzdHJ1Y3Qgc3dfZmxvd19tYXRjaCBtYXRjaDsK KwlzdHJ1Y3Qgc3dfZmxvd19pZCB1ZmlkOworCXUzMiB1ZmlkX2ZsYWdzID0gb3ZzX25sYV9nZXRf dWZpZF9mbGFncyhhW09WU19GTE9XX0FUVFJfVUZJRF9GTEFHU10pOwogCWludCBlcnI7CiAJYm9v bCBsb2cgPSAhYVtPVlNfRkxPV19BVFRSX1BST0JFXTsKKwlib29sIHVmaWRfcHJlc2VudDsKIAot CWlmIChsaWtlbHkoYVtPVlNfRkxPV19BVFRSX0tFWV0pKSB7CisJdWZpZF9wcmVzZW50ID0gb3Zz X25sYV9nZXRfdWZpZChhW09WU19GTE9XX0FUVFJfVUZJRF0sICZ1ZmlkLCBsb2cpOworCWlmIChh W09WU19GTE9XX0FUVFJfS0VZXSkgewogCQlvdnNfbWF0Y2hfaW5pdCgmbWF0Y2gsICZrZXksIE5V TEwpOwogCQllcnIgPSBvdnNfbmxhX2dldF9tYXRjaCgmbWF0Y2gsIGFbT1ZTX0ZMT1dfQVRUUl9L RVldLCBOVUxMLAogCQkJCQlsb2cpOwpAQCAtMTE1MywxMiArMTI1NywxNSBAQCBzdGF0aWMgaW50 IG92c19mbG93X2NtZF9kZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAq aW5mbykKIAkJZ290byB1bmxvY2s7CiAJfQogCi0JaWYgKHVubGlrZWx5KCFhW09WU19GTE9XX0FU VFJfS0VZXSkpIHsKKwlpZiAodW5saWtlbHkoIWFbT1ZTX0ZMT1dfQVRUUl9LRVldICYmICF1Zmlk X3ByZXNlbnQpKSB7CiAJCWVyciA9IG92c19mbG93X3RibF9mbHVzaCgmZHAtPnRhYmxlKTsKIAkJ Z290byB1bmxvY2s7CiAJfQogCi0JZmxvdyA9IG92c19mbG93X3RibF9sb29rdXBfZXhhY3QoJmRw LT50YWJsZSwgJm1hdGNoKTsKKwlpZiAodWZpZF9wcmVzZW50KQorCQlmbG93ID0gb3ZzX2Zsb3df dGJsX2xvb2t1cF91ZmlkKCZkcC0+dGFibGUsICZ1ZmlkKTsKKwllbHNlCisJCWZsb3cgPSBvdnNf Zmxvd190YmxfbG9va3VwX2V4YWN0KCZkcC0+dGFibGUsICZtYXRjaCk7CiAJaWYgKHVubGlrZWx5 KCFmbG93KSkgewogCQllcnIgPSAtRU5PRU5UOwogCQlnb3RvIHVubG9jazsKQEAgLTExNjgsMTQg KzEyNzUsMTUgQEAgc3RhdGljIGludCBvdnNfZmxvd19jbWRfZGVsKHN0cnVjdCBza19idWZmICpz a2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiAJb3ZzX3VubG9jaygpOwogCiAJcmVwbHkgPSBv dnNfZmxvd19jbWRfYWxsb2NfaW5mbygoY29uc3Qgc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyBfX2Zv cmNlICopIGZsb3ctPnNmX2FjdHMsCi0JCQkJCWluZm8sIGZhbHNlKTsKKwkJCQkJZmxvdy0+aWQs IGluZm8sIGZhbHNlLCB1ZmlkX2ZsYWdzKTsKIAlpZiAobGlrZWx5KHJlcGx5KSkgewogCQlpZiAo bGlrZWx5KCFJU19FUlIocmVwbHkpKSkgewogCQkJcmN1X3JlYWRfbG9jaygpOwkvKlRvIGtlZXAg UkNVIGNoZWNrZXIgaGFwcHkuICovCiAJCQllcnIgPSBvdnNfZmxvd19jbWRfZmlsbF9pbmZvKGZs b3csIG92c19oZWFkZXItPmRwX2lmaW5kZXgsCiAJCQkJCQkgICAgIHJlcGx5LCBpbmZvLT5zbmRf cG9ydGlkLAogCQkJCQkJICAgICBpbmZvLT5zbmRfc2VxLCAwLAotCQkJCQkJICAgICBPVlNfRkxP V19DTURfREVMKTsKKwkJCQkJCSAgICAgT1ZTX0ZMT1dfQ01EX0RFTCwKKwkJCQkJCSAgICAgdWZp ZF9mbGFncyk7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCUJVR19PTihlcnIgPCAwKTsKIApA QCAtMTE5NCw5ICsxMzAyLDE4IEBAIHVubG9jazoKIAogc3RhdGljIGludCBvdnNfZmxvd19jbWRf ZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7 CisJc3RydWN0IG5sYXR0ciAqYVtfX09WU19GTE9XX0FUVFJfTUFYXTsKIAlzdHJ1Y3Qgb3ZzX2hl YWRlciAqb3ZzX2hlYWRlciA9IGdlbmxtc2dfZGF0YShubG1zZ19kYXRhKGNiLT5ubGgpKTsKIAlz dHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpOwogCXN0cnVjdCBkYXRhcGF0aCAqZHA7CisJdTMyIHVm aWRfZmxhZ3M7CisJaW50IGVycjsKKworCWVyciA9IGdlbmxtc2dfcGFyc2UoY2ItPm5saCwgJmRw X2Zsb3dfZ2VubF9mYW1pbHksIGEsCisJCQkgICAgT1ZTX0ZMT1dfQVRUUl9NQVgsIGZsb3dfcG9s aWN5KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXVmaWRfZmxhZ3MgPSBvdnNfbmxhX2dl dF91ZmlkX2ZsYWdzKGFbT1ZTX0ZMT1dfQVRUUl9VRklEX0ZMQUdTXSk7CiAKIAlyY3VfcmVhZF9s b2NrKCk7CiAJZHAgPSBnZXRfZHBfcmN1KHNvY2tfbmV0KHNrYi0+c2spLCBvdnNfaGVhZGVyLT5k cF9pZmluZGV4KTsKQEAgLTEyMTksNyArMTMzNiw3IEBAIHN0YXRpYyBpbnQgb3ZzX2Zsb3dfY21k X2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxpbmtfY2FsbGJhY2sgKmNiKQog CQlpZiAob3ZzX2Zsb3dfY21kX2ZpbGxfaW5mbyhmbG93LCBvdnNfaGVhZGVyLT5kcF9pZmluZGV4 LCBza2IsCiAJCQkJCSAgIE5FVExJTktfQ0IoY2ItPnNrYikucG9ydGlkLAogCQkJCQkgICBjYi0+ bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLAotCQkJCQkgICBPVlNfRkxPV19DTURfTkVXKSA8 IDApCisJCQkJCSAgIE9WU19GTE9XX0NNRF9ORVcsIHVmaWRfZmxhZ3MpIDwgMCkKIAkJCWJyZWFr OwogCiAJCWNiLT5hcmdzWzBdID0gYnVja2V0OwpAQCAtMTIzNSw2ICsxMzUyLDggQEAgc3RhdGlj IGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGZsb3dfcG9saWN5W09WU19GTE9XX0FUVFJfTUFYICsg MV0gPSB7CiAJW09WU19GTE9XX0FUVFJfQUNUSU9OU10gPSB7IC50eXBlID0gTkxBX05FU1RFRCB9 LAogCVtPVlNfRkxPV19BVFRSX0NMRUFSXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAogCVtPVlNf RkxPV19BVFRSX1BST0JFXSA9IHsgLnR5cGUgPSBOTEFfRkxBRyB9LAorCVtPVlNfRkxPV19BVFRS X1VGSURdID0geyAudHlwZSA9IE5MQV9VTlNQRUMsIC5sZW4gPSAxIH0sCisJW09WU19GTE9XX0FU VFJfVUZJRF9GTEFHU10gPSB7IC50eXBlID0gTkxBX1UzMiB9LAogfTsKIAogc3RhdGljIGNvbnN0 IHN0cnVjdCBnZW5sX29wcyBkcF9mbG93X2dlbmxfb3BzW10gPSB7CmRpZmYgLS1naXQgYS9uZXQv b3BlbnZzd2l0Y2gvZmxvdy5oIGIvbmV0L29wZW52c3dpdGNoL2Zsb3cuaAppbmRleCBkM2QwYTQw Li44NGYyNTlkIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvdy5oCisrKyBiL25ldC9v cGVudnN3aXRjaC9mbG93LmgKQEAgLTE5Nyw2ICsxOTcsMTYgQEAgc3RydWN0IHN3X2Zsb3dfbWF0 Y2ggewogCXN0cnVjdCBzd19mbG93X21hc2sgKm1hc2s7CiB9OwogCisjZGVmaW5lIE1BWF9VRklE X0xFTkdUSCAxNiAvKiAxMjggYml0cyAqLworCitzdHJ1Y3Qgc3dfZmxvd19pZCB7CisJdTMyIHVm aWRfbGVuOworCXVuaW9uIHsKKwkJdTMyIHVmaWRbTUFYX1VGSURfTEVOR1RIIC8gNF07CisJCXN0 cnVjdCBzd19mbG93X2tleSBmbG93X2tleTsKKwl9OworfTsKKwogc3RydWN0IHN3X2Zsb3dfYWN0 aW9ucyB7CiAJc3RydWN0IHJjdV9oZWFkIHJjdTsKIAl1MzIgYWN0aW9uc19sZW47CkBAIC0yMTMs MTMgKzIyMywxNSBAQCBzdHJ1Y3QgZmxvd19zdGF0cyB7CiAKIHN0cnVjdCBzd19mbG93IHsKIAlz dHJ1Y3QgcmN1X2hlYWQgcmN1OwotCXN0cnVjdCBobGlzdF9ub2RlIGhhc2hfbm9kZVsyXTsKLQl1 MzIgaGFzaDsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlWzJdOworCQl1MzIg aGFzaDsKKwl9IGZsb3dfdGFibGUsIHVmaWRfdGFibGU7CiAJaW50IHN0YXRzX2xhc3Rfd3JpdGVy OwkJLyogTlVNQS1ub2RlIGlkIG9mIHRoZSBsYXN0IHdyaXRlciBvbgogCQkJCQkgKiAnc3RhdHNb MF0nLgogCQkJCQkgKi8KIAlzdHJ1Y3Qgc3dfZmxvd19rZXkga2V5OwotCXN0cnVjdCBzd19mbG93 X2tleSB1bm1hc2tlZF9rZXk7CisJc3RydWN0IHN3X2Zsb3dfaWQgKmlkOwogCXN0cnVjdCBzd19m bG93X21hc2sgKm1hc2s7CiAJc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyBfX3JjdSAqc2ZfYWN0czsK IAlzdHJ1Y3QgZmxvd19zdGF0cyBfX3JjdSAqc3RhdHNbXTsgLyogT25lIGZvciBlYWNoIE5VTUEg bm9kZS4gIEZpcnN0IG9uZQpAQCAtMjQzLDYgKzI1NSwxNiBAQCBzdHJ1Y3QgYXJwX2V0aF9oZWFk ZXIgewogCXVuc2lnbmVkIGNoYXIgICAgICAgYXJfdGlwWzRdOwkJLyogdGFyZ2V0IElQIGFkZHJl c3MgICAgICAgICovCiB9IF9fcGFja2VkOwogCitzdGF0aWMgaW5saW5lIGJvb2wgb3ZzX2lkZW50 aWZpZXJfaXNfdWZpZChjb25zdCBzdHJ1Y3Qgc3dfZmxvd19pZCAqc2ZpZCkKK3sKKwlyZXR1cm4g c2ZpZC0+dWZpZF9sZW47Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBvdnNfaWRlbnRpZmllcl9p c19rZXkoY29uc3Qgc3RydWN0IHN3X2Zsb3dfaWQgKnNmaWQpCit7CisJcmV0dXJuICFvdnNfaWRl bnRpZmllcl9pc191ZmlkKHNmaWQpOworfQorCiB2b2lkIG92c19mbG93X3N0YXRzX3VwZGF0ZShz dHJ1Y3Qgc3dfZmxvdyAqLCBfX2JlMTYgdGNwX2ZsYWdzLAogCQkJICAgY29uc3Qgc3RydWN0IHNr X2J1ZmYgKik7CiB2b2lkIG92c19mbG93X3N0YXRzX2dldChjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAq LCBzdHJ1Y3Qgb3ZzX2Zsb3dfc3RhdHMgKiwKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9m bG93X25ldGxpbmsuYyBiL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYwppbmRleCAzOThm MTEwLi5jZGJhOGViIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMK KysrIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jCkBAIC0xMTgwLDYgKzExODAsNTgg QEAgZnJlZV9uZXdtYXNrOgogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBzaXplX3QgZ2V0X3Vm aWRfbGVuKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIGJvb2wgbG9nKQoreworCXNpemVfdCBs ZW47CisKKwlpZiAoIWF0dHIpCisJCXJldHVybiAwOworCisJbGVuID0gbmxhX2xlbihhdHRyKTsK KwlpZiAobGVuIDwgMSB8fCBsZW4gPiBNQVhfVUZJRF9MRU5HVEgpIHsKKwkJT1ZTX05MRVJSKGxv ZywgIkZsb3cgdWZpZCBzaXplICV1IGJ5dGVzIGlzIG91dHNpZGUgdGhlIHJhbmdlICIKKwkJCSAg ICAgICAiKDEsICVkKSIsIG5sYV9sZW4oYXR0ciksIE1BWF9VRklEX0xFTkdUSCk7CisJCXJldHVy biAwOworCX0KKworCXJldHVybiBsZW47Cit9CisKKy8qIEluaXRpYWxpemVzICdmbG93LT51Zmlk JywgcmV0dXJuaW5nIHRydWUgaWYgJ2F0dHInIGNvbnRhaW5zIGEgdmFsaWQgVUZJRCwKKyAqIG9y IGZhbHNlIG90aGVyd2lzZS4gKi8KK2Jvb2wgb3ZzX25sYV9nZXRfdWZpZChjb25zdCBzdHJ1Y3Qg bmxhdHRyICphdHRyLCBzdHJ1Y3Qgc3dfZmxvd19pZCAqc2ZpZCwKKwkJICAgICAgYm9vbCBsb2cp Cit7CisJc2ZpZC0+dWZpZF9sZW4gPSBnZXRfdWZpZF9sZW4oYXR0ciwgbG9nKTsKKwlpZiAoc2Zp ZC0+dWZpZF9sZW4pCisJCW1lbWNweShzZmlkLT51ZmlkLCBubGFfZGF0YShhdHRyKSwgc2ZpZC0+ dWZpZF9sZW4pOworCisJcmV0dXJuIHNmaWQtPnVmaWRfbGVuOworfQorCitzdHJ1Y3Qgc3dfZmxv d19pZCAqb3ZzX25sYV9jb3B5X2lkZW50aWZpZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAqdWZpZCwK KwkJCQkJICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksCisJCQkJCSAgIGJvb2wgbG9n KQoreworCXN0cnVjdCBzd19mbG93X2lkICpzZmlkOworCisJc2ZpZCA9IGttYWxsb2Moc2l6ZW9m KCpzZmlkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZmlkKQorCQlyZXR1cm4gRVJSX1BUUigtRU5P TUVNKTsKKworCS8qIElmIFVGSUQgd2FzIG5vdCBwcm92aWRlZCwgdXNlIHVubWFza2VkIGtleS4g Ki8KKwlpZiAoIW92c19ubGFfZ2V0X3VmaWQodWZpZCwgc2ZpZCwgbG9nKSkKKwkJbWVtY3B5KCZz ZmlkLT5mbG93X2tleSwga2V5LCBzaXplb2YoKmtleSkpOworCisJcmV0dXJuIHNmaWQ7Cit9CisK KwordTMyIG92c19ubGFfZ2V0X3VmaWRfZmxhZ3MoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cikK K3sKKwlyZXR1cm4gYXR0ciA/IG5sYV9nZXRfdTMyKGF0dHIpIDogMDsKK30KKwogLyoqCiAgKiBv dnNfbmxhX2dldF9mbG93X21ldGFkYXRhIC0gcGFyc2VzIE5ldGxpbmsgYXR0cmlidXRlcyBpbnRv IGEgZmxvdyBrZXkuCiAgKiBAa2V5OiBSZWNlaXZlcyBleHRyYWN0ZWQgaW5fcG9ydCwgcHJpb3Jp dHksIHR1bl9rZXkgYW5kIHNrYl9tYXJrLgpAQCAtMTQ1MCw5ICsxNTAyLDIwIEBAIGludCBvdnNf bmxhX3B1dF9rZXkoY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICpzd2tleSwKIH0KIAogLyogQ2Fs bGVkIHdpdGggb3ZzX211dGV4IG9yIFJDVSByZWFkIGxvY2suICovCi1pbnQgb3ZzX25sYV9wdXRf dW5tYXNrZWRfa2V5KGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LCBzdHJ1Y3Qgc2tfYnVmZiAq c2tiKQoraW50IG92c19ubGFfcHV0X2lkZW50aWZpZXIoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZs b3csIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKG92c19pZGVudGlmaWVyX2lzX3VmaWQo Zmxvdy0+aWQpKQorCQlyZXR1cm4gbmxhX3B1dChza2IsIE9WU19GTE9XX0FUVFJfVUZJRCwgZmxv dy0+aWQtPnVmaWRfbGVuLAorCQkJICAgICAgIGZsb3ctPmlkLT51ZmlkKTsKKworCXJldHVybiBv dnNfbmxhX3B1dF9rZXkoJmZsb3ctPmlkLT5mbG93X2tleSwgJmZsb3ctPmlkLT5mbG93X2tleSwK KwkJCSAgICAgICBPVlNfRkxPV19BVFRSX0tFWSwgZmFsc2UsIHNrYik7Cit9CisKKy8qIENhbGxl ZCB3aXRoIG92c19tdXRleCBvciBSQ1UgcmVhZCBsb2NrLiAqLworaW50IG92c19ubGFfcHV0X21h c2tlZF9rZXkoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csIHN0cnVjdCBza19idWZmICpza2Ip CiB7Ci0JcmV0dXJuIG92c19ubGFfcHV0X2tleSgmZmxvdy0+dW5tYXNrZWRfa2V5LCAmZmxvdy0+ dW5tYXNrZWRfa2V5LAorCXJldHVybiBvdnNfbmxhX3B1dF9rZXkoJmZsb3ctPm1hc2stPmtleSwg JmZsb3ctPmtleSwKIAkJCQlPVlNfRkxPV19BVFRSX0tFWSwgZmFsc2UsIHNrYik7CiB9CiAKZGlm ZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuaCBiL25ldC9vcGVudnN3aXRj aC9mbG93X25ldGxpbmsuaAppbmRleCA5ZWQwOWU2Li4wN2ZjOWI2IDEwMDY0NAotLS0gYS9uZXQv b3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmgKKysrIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0 bGluay5oCkBAIC00OCw3ICs0OCw4IEBAIGludCBvdnNfbmxhX3B1dF9rZXkoY29uc3Qgc3RydWN0 IHN3X2Zsb3dfa2V5ICosIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqLAogaW50IG92c19ubGFf Z2V0X2Zsb3dfbWV0YWRhdGEoY29uc3Qgc3RydWN0IG5sYXR0ciAqLCBzdHJ1Y3Qgc3dfZmxvd19r ZXkgKiwKIAkJCSAgICAgIGJvb2wgbG9nKTsKIAotaW50IG92c19ubGFfcHV0X3VubWFza2VkX2tl eShjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQg b3ZzX25sYV9wdXRfaWRlbnRpZmllcihjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgc3RydWN0 IHNrX2J1ZmYgKnNrYik7CitpbnQgb3ZzX25sYV9wdXRfbWFza2VkX2tleShjb25zdCBzdHJ1Y3Qg c3dfZmxvdyAqZmxvdywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgb3ZzX25sYV9wdXRfbWFz ayhjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKIGlu dCBvdnNfbmxhX2dldF9tYXRjaChzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqLCBjb25zdCBzdHJ1Y3Qg bmxhdHRyICprZXksCkBAIC01Niw2ICs1NywxMiBAQCBpbnQgb3ZzX25sYV9nZXRfbWF0Y2goc3Ry dWN0IHN3X2Zsb3dfbWF0Y2ggKiwgY29uc3Qgc3RydWN0IG5sYXR0ciAqa2V5LAogaW50IG92c19u bGFfcHV0X2VncmVzc190dW5uZWxfa2V5KHN0cnVjdCBza19idWZmICosCiAJCQkJICBjb25zdCBz dHJ1Y3Qgb3ZzX3R1bm5lbF9pbmZvICopOwogCitib29sIG92c19ubGFfZ2V0X3VmaWQoY29uc3Qg c3RydWN0IG5sYXR0ciAqLCBzdHJ1Y3Qgc3dfZmxvd19pZCAqLCBib29sIGxvZyk7CitzdHJ1Y3Qg c3dfZmxvd19pZCAqb3ZzX25sYV9jb3B5X2lkZW50aWZpZXIoY29uc3Qgc3RydWN0IG5sYXR0ciAq dWZpZCwKKwkJCQkJICAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksCisJCQkJCSAgIGJv b2wgbG9nKTsKK3UzMiBvdnNfbmxhX2dldF91ZmlkX2ZsYWdzKGNvbnN0IHN0cnVjdCBubGF0dHIg KmF0dHIpOworCiBpbnQgb3ZzX25sYV9jb3B5X2FjdGlvbnMoY29uc3Qgc3RydWN0IG5sYXR0ciAq YXR0ciwKIAkJCSBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSwKIAkJCSBzdHJ1Y3Qgc3df Zmxvd19hY3Rpb25zICoqc2ZhLCBib29sIGxvZyk7CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0 Y2gvZmxvd190YWJsZS5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuYwppbmRleCA5YTNm NDFmLi42MjNiYmUwIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5jCisr KyBiL25ldC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmMKQEAgLTg1LDYgKzg1LDcgQEAgc3RydWN0 IHN3X2Zsb3cgKm92c19mbG93X2FsbG9jKHZvaWQpCiAKIAlmbG93LT5zZl9hY3RzID0gTlVMTDsK IAlmbG93LT5tYXNrID0gTlVMTDsKKwlmbG93LT5pZCA9IE5VTEw7CiAJZmxvdy0+c3RhdHNfbGFz dF93cml0ZXIgPSBOVU1BX05PX05PREU7CiAKIAkvKiBJbml0aWFsaXplIHRoZSBkZWZhdWx0IHN0 YXQgbm9kZS4gKi8KQEAgLTEzOSw2ICsxNDAsNyBAQCBzdGF0aWMgdm9pZCBmbG93X2ZyZWUoc3Ry dWN0IHN3X2Zsb3cgKmZsb3cpCiB7CiAJaW50IG5vZGU7CiAKKwlrZnJlZShmbG93LT5pZCk7CiAJ a2ZyZWUoKHN0cnVjdCBzd19mbG93X2FjdGlvbnMgX19mb3JjZSAqKWZsb3ctPnNmX2FjdHMpOwog CWZvcl9lYWNoX25vZGUobm9kZSkKIAkJaWYgKGZsb3ctPnN0YXRzW25vZGVdKQpAQCAtMjAwLDE4 ICsyMDIsMjggQEAgc3RhdGljIHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGFibGVfaW5zdGFuY2Vf YWxsb2MoaW50IG5ld19zaXplKQogCiBpbnQgb3ZzX2Zsb3dfdGJsX2luaXQoc3RydWN0IGZsb3df dGFibGUgKnRhYmxlKQogewotCXN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGk7CisJc3RydWN0IHRh YmxlX2luc3RhbmNlICp0aSwgKnVmaWRfdGk7CiAKIAl0aSA9IHRhYmxlX2luc3RhbmNlX2FsbG9j KFRCTF9NSU5fQlVDS0VUUyk7CiAKIAlpZiAoIXRpKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCXVm aWRfdGkgPSB0YWJsZV9pbnN0YW5jZV9hbGxvYyhUQkxfTUlOX0JVQ0tFVFMpOworCWlmICghdWZp ZF90aSkKKwkJZ290byBmcmVlX3RpOworCiAJcmN1X2Fzc2lnbl9wb2ludGVyKHRhYmxlLT50aSwg dGkpOworCXJjdV9hc3NpZ25fcG9pbnRlcih0YWJsZS0+dWZpZF90aSwgdWZpZF90aSk7CiAJSU5J VF9MSVNUX0hFQUQoJnRhYmxlLT5tYXNrX2xpc3QpOwogCXRhYmxlLT5sYXN0X3JlaGFzaCA9IGpp ZmZpZXM7CiAJdGFibGUtPmNvdW50ID0gMDsKKwl0YWJsZS0+dWZpZF9jb3VudCA9IDA7CiAJcmV0 dXJuIDA7CisKK2ZyZWVfdGk6CisJX190YWJsZV9pbnN0YW5jZV9kZXN0cm95KHRpKTsKKwlyZXR1 cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHZvaWQgZmxvd190YmxfZGVzdHJveV9yY3VfY2Ioc3Ry dWN0IHJjdV9oZWFkICpyY3UpCkBAIC0yMjEsMTMgKzIzMywxNiBAQCBzdGF0aWMgdm9pZCBmbG93 X3RibF9kZXN0cm95X3JjdV9jYihzdHJ1Y3QgcmN1X2hlYWQgKnJjdSkKIAlfX3RhYmxlX2luc3Rh bmNlX2Rlc3Ryb3kodGkpOwogfQogCi1zdGF0aWMgdm9pZCB0YWJsZV9pbnN0YW5jZV9kZXN0cm95 KHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGksIGJvb2wgZGVmZXJyZWQpCitzdGF0aWMgdm9pZCB0 YWJsZV9pbnN0YW5jZV9kZXN0cm95KHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGksCisJCQkJICAg c3RydWN0IHRhYmxlX2luc3RhbmNlICp1ZmlkX3RpLAorCQkJCSAgIGJvb2wgZGVmZXJyZWQpCiB7 CiAJaW50IGk7CiAKIAlpZiAoIXRpKQogCQlyZXR1cm47CiAKKwlCVUdfT04oIXVmaWRfdGkpOwog CWlmICh0aS0+a2VlcF9mbG93cykKIAkJZ290byBza2lwX2Zsb3dzOwogCkBAIC0yMzYsMTggKzI1 MSwyNCBAQCBzdGF0aWMgdm9pZCB0YWJsZV9pbnN0YW5jZV9kZXN0cm95KHN0cnVjdCB0YWJsZV9p bnN0YW5jZSAqdGksIGJvb2wgZGVmZXJyZWQpCiAJCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0g ZmxleF9hcnJheV9nZXQodGktPmJ1Y2tldHMsIGkpOwogCQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsK IAkJaW50IHZlciA9IHRpLT5ub2RlX3ZlcjsKKwkJaW50IHVmaWRfdmVyID0gdWZpZF90aS0+bm9k ZV92ZXI7CiAKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmbG93LCBuLCBoZWFkLCBoYXNo X25vZGVbdmVyXSkgewotCQkJaGxpc3RfZGVsX3JjdSgmZmxvdy0+aGFzaF9ub2RlW3Zlcl0pOwor CQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZsb3csIG4sIGhlYWQsIGZsb3dfdGFibGUubm9k ZVt2ZXJdKSB7CisJCQlobGlzdF9kZWxfcmN1KCZmbG93LT5mbG93X3RhYmxlLm5vZGVbdmVyXSk7 CisJCQlpZiAob3ZzX2lkZW50aWZpZXJfaXNfdWZpZChmbG93LT5pZCkpCisJCQkJaGxpc3RfZGVs X3JjdSgmZmxvdy0+dWZpZF90YWJsZS5ub2RlW3VmaWRfdmVyXSk7CiAJCQlvdnNfZmxvd19mcmVl KGZsb3csIGRlZmVycmVkKTsKIAkJfQogCX0KIAogc2tpcF9mbG93czoKLQlpZiAoZGVmZXJyZWQp CisJaWYgKGRlZmVycmVkKSB7CiAJCWNhbGxfcmN1KCZ0aS0+cmN1LCBmbG93X3RibF9kZXN0cm95 X3JjdV9jYik7Ci0JZWxzZQorCQljYWxsX3JjdSgmdWZpZF90aS0+cmN1LCBmbG93X3RibF9kZXN0 cm95X3JjdV9jYik7CisJfSBlbHNlIHsKIAkJX190YWJsZV9pbnN0YW5jZV9kZXN0cm95KHRpKTsK KwkJX190YWJsZV9pbnN0YW5jZV9kZXN0cm95KHVmaWRfdGkpOworCX0KIH0KIAogLyogTm8gbmVl ZCBmb3IgbG9ja2luZyB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIFJDVSBjYWxsYmFjayBv cgpAQCAtMjU2LDggKzI3Nyw5IEBAIHNraXBfZmxvd3M6CiB2b2lkIG92c19mbG93X3RibF9kZXN0 cm95KHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSkKIHsKIAlzdHJ1Y3QgdGFibGVfaW5zdGFuY2Ug KnRpID0gcmN1X2RlcmVmZXJlbmNlX3Jhdyh0YWJsZS0+dGkpOworCXN0cnVjdCB0YWJsZV9pbnN0 YW5jZSAqdWZpZF90aSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcodGFibGUtPnVmaWRfdGkpOwogCi0J dGFibGVfaW5zdGFuY2VfZGVzdHJveSh0aSwgZmFsc2UpOworCXRhYmxlX2luc3RhbmNlX2Rlc3Ry b3kodGksIHVmaWRfdGksIGZhbHNlKTsKIH0KIAogc3RydWN0IHN3X2Zsb3cgKm92c19mbG93X3Ri bF9kdW1wX25leHQoc3RydWN0IHRhYmxlX2luc3RhbmNlICp0aSwKQEAgLTI3Miw3ICsyOTQsNyBA QCBzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2R1bXBfbmV4dChzdHJ1Y3QgdGFibGVfaW5z dGFuY2UgKnRpLAogCXdoaWxlICgqYnVja2V0IDwgdGktPm5fYnVja2V0cykgewogCQlpID0gMDsK IAkJaGVhZCA9IGZsZXhfYXJyYXlfZ2V0KHRpLT5idWNrZXRzLCAqYnVja2V0KTsKLQkJaGxpc3Rf Zm9yX2VhY2hfZW50cnlfcmN1KGZsb3csIGhlYWQsIGhhc2hfbm9kZVt2ZXJdKSB7CisJCWhsaXN0 X2Zvcl9lYWNoX2VudHJ5X3JjdShmbG93LCBoZWFkLCBmbG93X3RhYmxlLm5vZGVbdmVyXSkgewog CQkJaWYgKGkgPCAqbGFzdCkgewogCQkJCWkrKzsKIAkJCQljb250aW51ZTsKQEAgLTI5NCwxNiAr MzE2LDI2IEBAIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqZmluZF9idWNrZXQoc3RydWN0IHRh YmxlX2luc3RhbmNlICp0aSwgdTMyIGhhc2gpCiAJCQkJKGhhc2ggJiAodGktPm5fYnVja2V0cyAt IDEpKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHRhYmxlX2luc3RhbmNlX2luc2VydChzdHJ1Y3QgdGFi bGVfaW5zdGFuY2UgKnRpLCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdykKK3N0YXRpYyB2b2lkIHRhYmxl X2luc3RhbmNlX2luc2VydChzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpLAorCQkJCSAgc3RydWN0 IHN3X2Zsb3cgKmZsb3cpCiB7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAKLQloZWFkID0g ZmluZF9idWNrZXQodGksIGZsb3ctPmhhc2gpOwotCWhsaXN0X2FkZF9oZWFkX3JjdSgmZmxvdy0+ aGFzaF9ub2RlW3RpLT5ub2RlX3Zlcl0sIGhlYWQpOworCWhlYWQgPSBmaW5kX2J1Y2tldCh0aSwg Zmxvdy0+Zmxvd190YWJsZS5oYXNoKTsKKwlobGlzdF9hZGRfaGVhZF9yY3UoJmZsb3ctPmZsb3df dGFibGUubm9kZVt0aS0+bm9kZV92ZXJdLCBoZWFkKTsKK30KKworc3RhdGljIHZvaWQgdWZpZF90 YWJsZV9pbnN0YW5jZV9pbnNlcnQoc3RydWN0IHRhYmxlX2luc3RhbmNlICp0aSwKKwkJCQkgICAg ICAgc3RydWN0IHN3X2Zsb3cgKmZsb3cpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisK KwloZWFkID0gZmluZF9idWNrZXQodGksIGZsb3ctPnVmaWRfdGFibGUuaGFzaCk7CisJaGxpc3Rf YWRkX2hlYWRfcmN1KCZmbG93LT51ZmlkX3RhYmxlLm5vZGVbdGktPm5vZGVfdmVyXSwgaGVhZCk7 CiB9CiAKIHN0YXRpYyB2b2lkIGZsb3dfdGFibGVfY29weV9mbG93cyhzdHJ1Y3QgdGFibGVfaW5z dGFuY2UgKm9sZCwKLQkJCQkgIHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqbmV3KQorCQkJCSAgc3Ry dWN0IHRhYmxlX2luc3RhbmNlICpuZXcsIGJvb2wgdWZpZCkKIHsKIAlpbnQgb2xkX3ZlcjsKIAlp bnQgaTsKQEAgLTMxOCwxNSArMzUwLDIxIEBAIHN0YXRpYyB2b2lkIGZsb3dfdGFibGVfY29weV9m bG93cyhzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKm9sZCwKIAogCQloZWFkID0gZmxleF9hcnJheV9n ZXQob2xkLT5idWNrZXRzLCBpKTsKIAotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShmbG93LCBoZWFk LCBoYXNoX25vZGVbb2xkX3Zlcl0pCi0JCQl0YWJsZV9pbnN0YW5jZV9pbnNlcnQobmV3LCBmbG93 KTsKKwkJaWYgKHVmaWQpCisJCQlobGlzdF9mb3JfZWFjaF9lbnRyeShmbG93LCBoZWFkLAorCQkJ CQkgICAgIHVmaWRfdGFibGUubm9kZVtvbGRfdmVyXSkKKwkJCQl1ZmlkX3RhYmxlX2luc3RhbmNl X2luc2VydChuZXcsIGZsb3cpOworCQllbHNlCisJCQlobGlzdF9mb3JfZWFjaF9lbnRyeShmbG93 LCBoZWFkLAorCQkJCQkgICAgIGZsb3dfdGFibGUubm9kZVtvbGRfdmVyXSkKKwkJCQl0YWJsZV9p bnN0YW5jZV9pbnNlcnQobmV3LCBmbG93KTsKIAl9CiAKIAlvbGQtPmtlZXBfZmxvd3MgPSB0cnVl OwogfQogCiBzdGF0aWMgc3RydWN0IHRhYmxlX2luc3RhbmNlICp0YWJsZV9pbnN0YW5jZV9yZWhh c2goc3RydWN0IHRhYmxlX2luc3RhbmNlICp0aSwKLQkJCQkJICAgIGludCBuX2J1Y2tldHMpCisJ CQkJCQkgICAgaW50IG5fYnVja2V0cywgYm9vbCB1ZmlkKQogewogCXN0cnVjdCB0YWJsZV9pbnN0 YW5jZSAqbmV3X3RpOwogCkBAIC0zMzQsMjcgKzM3MiwzOCBAQCBzdGF0aWMgc3RydWN0IHRhYmxl X2luc3RhbmNlICp0YWJsZV9pbnN0YW5jZV9yZWhhc2goc3RydWN0IHRhYmxlX2luc3RhbmNlICp0 aSwKIAlpZiAoIW5ld190aSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlmbG93X3RhYmxlX2NvcHlfZmxv d3ModGksIG5ld190aSk7CisJZmxvd190YWJsZV9jb3B5X2Zsb3dzKHRpLCBuZXdfdGksIHVmaWQp OwogCiAJcmV0dXJuIG5ld190aTsKIH0KIAogaW50IG92c19mbG93X3RibF9mbHVzaChzdHJ1Y3Qg Zmxvd190YWJsZSAqZmxvd190YWJsZSkKIHsKLQlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKm9sZF90 aTsKLQlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKm5ld190aTsKKwlzdHJ1Y3QgdGFibGVfaW5zdGFu Y2UgKm9sZF90aSwgKm5ld190aTsKKwlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKm9sZF91ZmlkX3Rp LCAqbmV3X3VmaWRfdGk7CiAKLQlvbGRfdGkgPSBvdnNsX2RlcmVmZXJlbmNlKGZsb3dfdGFibGUt PnRpKTsKIAluZXdfdGkgPSB0YWJsZV9pbnN0YW5jZV9hbGxvYyhUQkxfTUlOX0JVQ0tFVFMpOwog CWlmICghbmV3X3RpKQogCQlyZXR1cm4gLUVOT01FTTsKKwluZXdfdWZpZF90aSA9IHRhYmxlX2lu c3RhbmNlX2FsbG9jKFRCTF9NSU5fQlVDS0VUUyk7CisJaWYgKCFuZXdfdWZpZF90aSkKKwkJZ290 byBlcnJfZnJlZV90aTsKKworCW9sZF90aSA9IG92c2xfZGVyZWZlcmVuY2UoZmxvd190YWJsZS0+ dGkpOworCW9sZF91ZmlkX3RpID0gb3ZzbF9kZXJlZmVyZW5jZShmbG93X3RhYmxlLT51ZmlkX3Rp KTsKIAogCXJjdV9hc3NpZ25fcG9pbnRlcihmbG93X3RhYmxlLT50aSwgbmV3X3RpKTsKKwlyY3Vf YXNzaWduX3BvaW50ZXIoZmxvd190YWJsZS0+dWZpZF90aSwgbmV3X3VmaWRfdGkpOwogCWZsb3df dGFibGUtPmxhc3RfcmVoYXNoID0gamlmZmllczsKIAlmbG93X3RhYmxlLT5jb3VudCA9IDA7CisJ Zmxvd190YWJsZS0+dWZpZF9jb3VudCA9IDA7CiAKLQl0YWJsZV9pbnN0YW5jZV9kZXN0cm95KG9s ZF90aSwgdHJ1ZSk7CisJdGFibGVfaW5zdGFuY2VfZGVzdHJveShvbGRfdGksIG9sZF91ZmlkX3Rp LCB0cnVlKTsKIAlyZXR1cm4gMDsKKworZXJyX2ZyZWVfdGk6CisJX190YWJsZV9pbnN0YW5jZV9k ZXN0cm95KG5ld190aSk7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyB1MzIgZmxvd19o YXNoKGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LApAQCAtNDAyLDE0ICs0NTEsMTUgQEAg c3RhdGljIGJvb2wgZmxvd19jbXBfbWFza2VkX2tleShjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxv dywKIAlyZXR1cm4gY21wX2tleSgmZmxvdy0+a2V5LCBrZXksIHJhbmdlLT5zdGFydCwgcmFuZ2Ut PmVuZCk7CiB9CiAKLWJvb2wgb3ZzX2Zsb3dfY21wX3VubWFza2VkX2tleShjb25zdCBzdHJ1Y3Qg c3dfZmxvdyAqZmxvdywKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0 Y2gpCitzdGF0aWMgYm9vbCBvdnNfZmxvd19jbXBfdW5tYXNrZWRfa2V5KGNvbnN0IHN0cnVjdCBz d19mbG93ICpmbG93LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X21hdGNoICptYXRj aCkKIHsKIAlzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSA9IG1hdGNoLT5rZXk7CiAJaW50IGtleV9z dGFydCA9IGZsb3dfa2V5X3N0YXJ0KGtleSk7CiAJaW50IGtleV9lbmQgPSBtYXRjaC0+cmFuZ2Uu ZW5kOwogCi0JcmV0dXJuIGNtcF9rZXkoJmZsb3ctPnVubWFza2VkX2tleSwga2V5LCBrZXlfc3Rh cnQsIGtleV9lbmQpOworCUJVR19PTihvdnNfaWRlbnRpZmllcl9pc191ZmlkKGZsb3ctPmlkKSk7 CisJcmV0dXJuIGNtcF9rZXkoJmZsb3ctPmlkLT5mbG93X2tleSwga2V5LCBrZXlfc3RhcnQsIGtl eV9lbmQpOwogfQogCiBzdGF0aWMgc3RydWN0IHN3X2Zsb3cgKm1hc2tlZF9mbG93X2xvb2t1cChz dHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpLApAQCAtNDI0LDggKzQ3NCw4IEBAIHN0YXRpYyBzdHJ1 Y3Qgc3dfZmxvdyAqbWFza2VkX2Zsb3dfbG9va3VwKHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAqdGks CiAJb3ZzX2Zsb3dfbWFza19rZXkoJm1hc2tlZF9rZXksIHVubWFza2VkLCBtYXNrKTsKIAloYXNo ID0gZmxvd19oYXNoKCZtYXNrZWRfa2V5LCAmbWFzay0+cmFuZ2UpOwogCWhlYWQgPSBmaW5kX2J1 Y2tldCh0aSwgaGFzaCk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGZsb3csIGhlYWQsIGhh c2hfbm9kZVt0aS0+bm9kZV92ZXJdKSB7Ci0JCWlmIChmbG93LT5tYXNrID09IG1hc2sgJiYgZmxv dy0+aGFzaCA9PSBoYXNoICYmCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGZsb3csIGhlYWQs IGZsb3dfdGFibGUubm9kZVt0aS0+bm9kZV92ZXJdKSB7CisJCWlmIChmbG93LT5tYXNrID09IG1h c2sgJiYgZmxvdy0+Zmxvd190YWJsZS5oYXNoID09IGhhc2ggJiYKIAkJICAgIGZsb3dfY21wX21h c2tlZF9rZXkoZmxvdywgJm1hc2tlZF9rZXksICZtYXNrLT5yYW5nZSkpCiAJCQlyZXR1cm4gZmxv dzsKIAl9CkBAIC00NjgsNyArNTE4LDQ4IEBAIHN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190Ymxf bG9va3VwX2V4YWN0KHN0cnVjdCBmbG93X3RhYmxlICp0YmwsCiAJLyogQWx3YXlzIGNhbGxlZCB1 bmRlciBvdnMtbXV0ZXguICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShtYXNrLCAmdGJsLT5tYXNr X2xpc3QsIGxpc3QpIHsKIAkJZmxvdyA9IG1hc2tlZF9mbG93X2xvb2t1cCh0aSwgbWF0Y2gtPmtl eSwgbWFzayk7Ci0JCWlmIChmbG93ICYmIG92c19mbG93X2NtcF91bm1hc2tlZF9rZXkoZmxvdywg bWF0Y2gpKSAgLyogRm91bmQgKi8KKwkJaWYgKGZsb3cgJiYgb3ZzX2lkZW50aWZpZXJfaXNfa2V5 KGZsb3ctPmlkKSAmJgorCQkgICAgb3ZzX2Zsb3dfY21wX3VubWFza2VkX2tleShmbG93LCBtYXRj aCkpCisJCQlyZXR1cm4gZmxvdzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB1MzIg dWZpZF9oYXNoKGNvbnN0IHN0cnVjdCBzd19mbG93X2lkICpzZmlkKQoreworCXJldHVybiBqaGFz aChzZmlkLT51ZmlkLCBzZmlkLT51ZmlkX2xlbiwgMCk7Cit9CisKK3N0YXRpYyBib29sIG92c19m bG93X2NtcF91ZmlkKGNvbnN0IHN0cnVjdCBzd19mbG93ICpmbG93LAorCQkJICAgICAgY29uc3Qg c3RydWN0IHN3X2Zsb3dfaWQgKnNmaWQpCit7CisJaWYgKGZsb3ctPmlkLT51ZmlkX2xlbiAhPSBz ZmlkLT51ZmlkX2xlbikKKwkJcmV0dXJuIGZhbHNlOworCisJcmV0dXJuICFtZW1jbXAoZmxvdy0+ aWQtPnVmaWQsIHNmaWQtPnVmaWQsIHNmaWQtPnVmaWRfbGVuKTsKK30KKworYm9vbCBvdnNfZmxv d19jbXAoY29uc3Qgc3RydWN0IHN3X2Zsb3cgKmZsb3csIGNvbnN0IHN0cnVjdCBzd19mbG93X21h dGNoICptYXRjaCkKK3sKKwlpZiAob3ZzX2lkZW50aWZpZXJfaXNfdWZpZChmbG93LT5pZCkpCisJ CXJldHVybiBmbG93X2NtcF9tYXNrZWRfa2V5KGZsb3csIG1hdGNoLT5rZXksICZtYXRjaC0+cmFu Z2UpOworCisJcmV0dXJuIG92c19mbG93X2NtcF91bm1hc2tlZF9rZXkoZmxvdywgbWF0Y2gpOwor fQorCitzdHJ1Y3Qgc3dfZmxvdyAqb3ZzX2Zsb3dfdGJsX2xvb2t1cF91ZmlkKHN0cnVjdCBmbG93 X3RhYmxlICp0YmwsCisJCQkJCSBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19pZCAqdWZpZCkKK3sKKwlz dHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpID0gcmN1X2RlcmVmZXJlbmNlX292c2wodGJsLT51Zmlk X3RpKTsKKwlzdHJ1Y3Qgc3dfZmxvdyAqZmxvdzsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsK Kwl1MzIgaGFzaDsKKworCWhhc2ggPSB1ZmlkX2hhc2godWZpZCk7CisJaGVhZCA9IGZpbmRfYnVj a2V0KHRpLCBoYXNoKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZmxvdywgaGVhZCwgdWZp ZF90YWJsZS5ub2RlW3RpLT5ub2RlX3Zlcl0pIHsKKwkJaWYgKGZsb3ctPnVmaWRfdGFibGUuaGFz aCA9PSBoYXNoICYmCisJCSAgICBvdnNfZmxvd19jbXBfdWZpZChmbG93LCB1ZmlkKSkKIAkJCXJl dHVybiBmbG93OwogCX0KIAlyZXR1cm4gTlVMTDsKQEAgLTQ4NSw5ICs1NzYsMTAgQEAgaW50IG92 c19mbG93X3RibF9udW1fbWFza3MoY29uc3Qgc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlKQogCXJl dHVybiBudW07CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRhYmxlX2luc3Rh bmNlX2V4cGFuZChzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpKQorc3RhdGljIHN0cnVjdCB0YWJs ZV9pbnN0YW5jZSAqdGFibGVfaW5zdGFuY2VfZXhwYW5kKHN0cnVjdCB0YWJsZV9pbnN0YW5jZSAq dGksCisJCQkJCQkgICAgYm9vbCB1ZmlkKQogewotCXJldHVybiB0YWJsZV9pbnN0YW5jZV9yZWhh c2godGksIHRpLT5uX2J1Y2tldHMgKiAyKTsKKwlyZXR1cm4gdGFibGVfaW5zdGFuY2VfcmVoYXNo KHRpLCB0aS0+bl9idWNrZXRzICogMiwgdWZpZCk7CiB9CiAKIC8qIFJlbW92ZSAnbWFzaycgZnJv bSB0aGUgbWFzayBsaXN0LCBpZiBpdCBpcyBub3QgbmVlZGVkIGFueSBtb3JlLiAqLwpAQCAtNTEy LDEwICs2MDQsMTUgQEAgc3RhdGljIHZvaWQgZmxvd19tYXNrX3JlbW92ZShzdHJ1Y3QgZmxvd190 YWJsZSAqdGJsLCBzdHJ1Y3Qgc3dfZmxvd19tYXNrICptYXNrKQogdm9pZCBvdnNfZmxvd190Ymxf cmVtb3ZlKHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSwgc3RydWN0IHN3X2Zsb3cgKmZsb3cpCiB7 CiAJc3RydWN0IHRhYmxlX2luc3RhbmNlICp0aSA9IG92c2xfZGVyZWZlcmVuY2UodGFibGUtPnRp KTsKKwlzdHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnVmaWRfdGkgPSBvdnNsX2RlcmVmZXJlbmNlKHRh YmxlLT51ZmlkX3RpKTsKIAogCUJVR19PTih0YWJsZS0+Y291bnQgPT0gMCk7Ci0JaGxpc3RfZGVs X3JjdSgmZmxvdy0+aGFzaF9ub2RlW3RpLT5ub2RlX3Zlcl0pOworCWhsaXN0X2RlbF9yY3UoJmZs b3ctPmZsb3dfdGFibGUubm9kZVt0aS0+bm9kZV92ZXJdKTsKIAl0YWJsZS0+Y291bnQtLTsKKwlp ZiAob3ZzX2lkZW50aWZpZXJfaXNfdWZpZChmbG93LT5pZCkpIHsKKwkJaGxpc3RfZGVsX3JjdSgm Zmxvdy0+dWZpZF90YWJsZS5ub2RlW3VmaWRfdGktPm5vZGVfdmVyXSk7CisJCXRhYmxlLT51Zmlk X2NvdW50LS07CisJfQogCiAJLyogUkNVIGRlbGV0ZSB0aGUgbWFzay4gJ2Zsb3ctPm1hc2snIGlz IG5vdCBOVUxMZWQsIGFzIGl0IHNob3VsZCBiZQogCSAqIGFjY2Vzc2libGUgYXMgbG9uZyBhcyB0 aGUgUkNVIHJlYWQgbG9jayBpcyBoZWxkLgpAQCAtNTg5LDI1ICs2ODYsNDcgQEAgc3RhdGljIHZv aWQgZmxvd19rZXlfaW5zZXJ0KHN0cnVjdCBmbG93X3RhYmxlICp0YWJsZSwgc3RydWN0IHN3X2Zs b3cgKmZsb3cpCiAJc3RydWN0IHRhYmxlX2luc3RhbmNlICpuZXdfdGkgPSBOVUxMOwogCXN0cnVj dCB0YWJsZV9pbnN0YW5jZSAqdGk7CiAKLQlmbG93LT5oYXNoID0gZmxvd19oYXNoKCZmbG93LT5r ZXksICZmbG93LT5tYXNrLT5yYW5nZSk7CisJZmxvdy0+Zmxvd190YWJsZS5oYXNoID0gZmxvd19o YXNoKCZmbG93LT5rZXksICZmbG93LT5tYXNrLT5yYW5nZSk7CiAJdGkgPSBvdnNsX2RlcmVmZXJl bmNlKHRhYmxlLT50aSk7CiAJdGFibGVfaW5zdGFuY2VfaW5zZXJ0KHRpLCBmbG93KTsKIAl0YWJs ZS0+Y291bnQrKzsKIAogCS8qIEV4cGFuZCB0YWJsZSwgaWYgbmVjZXNzYXJ5LCB0byBtYWtlIHJv b20uICovCiAJaWYgKHRhYmxlLT5jb3VudCA+IHRpLT5uX2J1Y2tldHMpCi0JCW5ld190aSA9IHRh YmxlX2luc3RhbmNlX2V4cGFuZCh0aSk7CisJCW5ld190aSA9IHRhYmxlX2luc3RhbmNlX2V4cGFu ZCh0aSwgZmFsc2UpOwogCWVsc2UgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGFibGUtPmxhc3Rf cmVoYXNoICsgUkVIQVNIX0lOVEVSVkFMKSkKLQkJbmV3X3RpID0gdGFibGVfaW5zdGFuY2VfcmVo YXNoKHRpLCB0aS0+bl9idWNrZXRzKTsKKwkJbmV3X3RpID0gdGFibGVfaW5zdGFuY2VfcmVoYXNo KHRpLCB0aS0+bl9idWNrZXRzLCBmYWxzZSk7CiAKIAlpZiAobmV3X3RpKSB7CiAJCXJjdV9hc3Np Z25fcG9pbnRlcih0YWJsZS0+dGksIG5ld190aSk7Ci0JCXRhYmxlX2luc3RhbmNlX2Rlc3Ryb3ko dGksIHRydWUpOworCQljYWxsX3JjdSgmdGktPnJjdSwgZmxvd190YmxfZGVzdHJveV9yY3VfY2Ip OwogCQl0YWJsZS0+bGFzdF9yZWhhc2ggPSBqaWZmaWVzOwogCX0KIH0KIAogLyogTXVzdCBiZSBj YWxsZWQgd2l0aCBPVlMgbXV0ZXggaGVsZC4gKi8KK3N0YXRpYyB2b2lkIGZsb3dfdWZpZF9pbnNl cnQoc3RydWN0IGZsb3dfdGFibGUgKnRhYmxlLCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdykKK3sKKwlz dHJ1Y3QgdGFibGVfaW5zdGFuY2UgKnRpOworCisJZmxvdy0+dWZpZF90YWJsZS5oYXNoID0gdWZp ZF9oYXNoKGZsb3ctPmlkKTsKKwl0aSA9IG92c2xfZGVyZWZlcmVuY2UodGFibGUtPnVmaWRfdGkp OworCXVmaWRfdGFibGVfaW5zdGFuY2VfaW5zZXJ0KHRpLCBmbG93KTsKKwl0YWJsZS0+dWZpZF9j b3VudCsrOworCisJLyogRXhwYW5kIHRhYmxlLCBpZiBuZWNlc3NhcnksIHRvIG1ha2Ugcm9vbS4g Ki8KKwlpZiAodGFibGUtPnVmaWRfY291bnQgPiB0aS0+bl9idWNrZXRzKSB7CisJCXN0cnVjdCB0 YWJsZV9pbnN0YW5jZSAqbmV3X3RpOworCisJCW5ld190aSA9IHRhYmxlX2luc3RhbmNlX2V4cGFu ZCh0aSwgdHJ1ZSk7CisJCWlmIChuZXdfdGkpIHsKKwkJCXJjdV9hc3NpZ25fcG9pbnRlcih0YWJs ZS0+dWZpZF90aSwgbmV3X3RpKTsKKwkJCWNhbGxfcmN1KCZ0aS0+cmN1LCBmbG93X3RibF9kZXN0 cm95X3JjdV9jYik7CisJCX0KKwl9Cit9CisKKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggT1ZTIG11 dGV4IGhlbGQuICovCiBpbnQgb3ZzX2Zsb3dfdGJsX2luc2VydChzdHJ1Y3QgZmxvd190YWJsZSAq dGFibGUsIHN0cnVjdCBzd19mbG93ICpmbG93LAogCQkJY29uc3Qgc3RydWN0IHN3X2Zsb3dfbWFz ayAqbWFzaykKIHsKQEAgLTYxNyw2ICs3MzYsOCBAQCBpbnQgb3ZzX2Zsb3dfdGJsX2luc2VydChz dHJ1Y3QgZmxvd190YWJsZSAqdGFibGUsIHN0cnVjdCBzd19mbG93ICpmbG93LAogCWlmIChlcnIp CiAJCXJldHVybiBlcnI7CiAJZmxvd19rZXlfaW5zZXJ0KHRhYmxlLCBmbG93KTsKKwlpZiAob3Zz X2lkZW50aWZpZXJfaXNfdWZpZChmbG93LT5pZCkpCisJCWZsb3dfdWZpZF9pbnNlcnQodGFibGUs IGZsb3cpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxv d190YWJsZS5oIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfdGFibGUuaAppbmRleCAzMDlmYTY0Li42 MTZlZGExIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd190YWJsZS5oCisrKyBiL25l dC9vcGVudnN3aXRjaC9mbG93X3RhYmxlLmgKQEAgLTQ3LDkgKzQ3LDExIEBAIHN0cnVjdCB0YWJs ZV9pbnN0YW5jZSB7CiAKIHN0cnVjdCBmbG93X3RhYmxlIHsKIAlzdHJ1Y3QgdGFibGVfaW5zdGFu Y2UgX19yY3UgKnRpOworCXN0cnVjdCB0YWJsZV9pbnN0YW5jZSBfX3JjdSAqdWZpZF90aTsKIAlz dHJ1Y3QgbGlzdF9oZWFkIG1hc2tfbGlzdDsKIAl1bnNpZ25lZCBsb25nIGxhc3RfcmVoYXNoOwog CXVuc2lnbmVkIGludCBjb3VudDsKKwl1bnNpZ25lZCBpbnQgdWZpZF9jb3VudDsKIH07CiAKIGV4 dGVybiBzdHJ1Y3Qga21lbV9jYWNoZSAqZmxvd19zdGF0c19jYWNoZTsKQEAgLTc4LDggKzgwLDEw IEBAIHN0cnVjdCBzd19mbG93ICpvdnNfZmxvd190YmxfbG9va3VwKHN0cnVjdCBmbG93X3RhYmxl ICosCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqKTsKIHN0cnVjdCBzd19mbG93 ICpvdnNfZmxvd190YmxfbG9va3VwX2V4YWN0KHN0cnVjdCBmbG93X3RhYmxlICp0YmwsCiAJCQkJ CSAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfbWF0Y2ggKm1hdGNoKTsKLWJvb2wgb3ZzX2Zsb3dfY21w X3VubWFza2VkX2tleShjb25zdCBzdHJ1Y3Qgc3dfZmxvdyAqZmxvdywKLQkJCSAgICAgICBjb25z dCBzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gpOworc3RydWN0IHN3X2Zsb3cgKm92c19mbG93 X3RibF9sb29rdXBfdWZpZChzdHJ1Y3QgZmxvd190YWJsZSAqLAorCQkJCQkgY29uc3Qgc3RydWN0 IHN3X2Zsb3dfaWQgKik7CisKK2Jvb2wgb3ZzX2Zsb3dfY21wKGNvbnN0IHN0cnVjdCBzd19mbG93 ICosIGNvbnN0IHN0cnVjdCBzd19mbG93X21hdGNoICopOwogCiB2b2lkIG92c19mbG93X21hc2tf a2V5KHN0cnVjdCBzd19mbG93X2tleSAqZHN0LCBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKnNy YywKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBzd19mbG93X21hc2sgKm1hc2spOwotLSAKMS43LjEw LjQKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRldiBt YWlsaW5nIGxpc3QKZGV2QG9wZW52c3dpdGNoLm9yZwpodHRwOi8vb3BlbnZzd2l0Y2gub3JnL21h aWxtYW4vbGlzdGluZm8vZGV2Cg==