From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jarno Rajahalme Subject: [PATCH net-next v4 8/8] openvswitch: Interface with NAT. Date: Tue, 8 Dec 2015 17:01:10 -0800 Message-ID: <1449622870-48944-9-git-send-email-jarno@ovn.org> References: <1449622870-48944-1-git-send-email-jarno@ovn.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: dev-yBygre7rU0TnMu66kgdUjQ@public.gmane.org, netfilter-devel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org To: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Return-path: In-Reply-To: <1449622870-48944-1-git-send-email-jarno-LZ6Gd1LRuIk@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 RXh0ZW5kIE9WUyBjb25udHJhY2sgaW50ZXJmYWNlIHRvIGNvdmVyIE5BVC4gIE5ldyBuZXN0ZWQK T1ZTX0NUX0FUVFJfTkFUIGF0dHJpYnV0ZSBtYXkgYmUgdXNlZCB0byBpbmNsdWRlIE5BVCB3aXRo IGEgQ1QgYWN0aW9uLgpBIGJhcmUgT1ZTX0NUX0FUVFJfTkFUIG9ubHkgbWFuZ2xlcyBleGlzdGlu ZyBhbmQgZXhwZWN0ZWQgY29ubmVjdGlvbnMuCklmIE9WU19OQVRfQVRUUl9TUkMgb3IgT1ZTX05B VF9BVFRSX0RTVCBpcyBpbmNsdWRlZCB3aXRoaW4gdGhlIG5lc3RlZAphdHRyaWJ1dGVzLCBuZXcg KG5vbi1jb21taXR0ZWQvbm9uLWNvbmZpcm1lZCkgY29ubmVjdGlvbnMgYXJlIG1hbmdsZWQKYWNj b3JkaW5nIHRvIHRoZSByZXN0IG9mIHRoZSBuZXN0ZWQgYXR0cmlidXRlcy4KClRoZSBjb3JyZXNw b25kaW5nIE9WUyB1c2Vyc3BhY2UgcGF0Y2ggc2VyaWVzIGluY2x1ZGVzIHRlc3QgY2FzZXMgKGlu CnRlc3RzL3N5c3RlbS10cmFmZmljLmF0KSB0aGF0IGFsc28gc2VydmUgYXMgZXhhbXBsZSB1c2Vz LgoKVGhpcyB3b3JrIGV4dGVuZHMgb24gYSBicmFuY2ggYnkgVGhvbWFzIEdyYWYgYXQKaHR0cHM6 Ly9naXRodWIuY29tL3RncmFmL292cy90cmVlL25hdC4KClNpZ25lZC1vZmYtYnk6IEphcm5vIFJh amFoYWxtZSA8amFybm9Ab3ZuLm9yZz4KLS0tCiBpbmNsdWRlL3VhcGkvbGludXgvb3BlbnZzd2l0 Y2guaCB8ICA0NyArKysrCiBuZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgICAgICB8IDUyMCAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0KIG5ldC9vcGVudnN3aXRjaC9j b25udHJhY2suaCAgICAgIHwgICAzICstCiAzIGZpbGVzIGNoYW5nZWQsIDU0NCBpbnNlcnRpb25z KCspLCAyNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvb3Bl bnZzd2l0Y2guaCBiL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCmluZGV4IDI4Y2Nl ZGQuLjFhNGJiZGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5o CisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9vcGVudnN3aXRjaC5oCkBAIC00NTQsNiArNDU0LDEy IEBAIHN0cnVjdCBvdnNfa2V5X2N0X2xhYmVscyB7CiAjZGVmaW5lIE9WU19DU19GX1JFUExZX0RJ UiAgICAgICAgIDB4MDggLyogRmxvdyBpcyBpbiB0aGUgcmVwbHkgZGlyZWN0aW9uLiAqLwogI2Rl ZmluZSBPVlNfQ1NfRl9JTlZBTElEICAgICAgICAgICAweDEwIC8qIENvdWxkIG5vdCB0cmFjayBj b25uZWN0aW9uLiAqLwogI2RlZmluZSBPVlNfQ1NfRl9UUkFDS0VEICAgICAgICAgICAweDIwIC8q IENvbm50cmFjayBoYXMgb2NjdXJyZWQuICovCisjZGVmaW5lIE9WU19DU19GX1NSQ19OQVQgICAg ICAgICAgIDB4NDAgLyogUGFja2V0J3Mgc291cmNlIGFkZHJlc3MvcG9ydCB3YXMKKwkJCQkJICAg bWFuZ2xlZCBieSBOQVQuICovCisjZGVmaW5lIE9WU19DU19GX0RTVF9OQVQgICAgICAgICAgIDB4 ODAgLyogUGFja2V0J3MgZGVzdGluYXRpb24gYWRkcmVzcy9wb3J0CisJCQkJCSAgIHdhcyBtYW5n bGVkIGJ5IE5BVC4gKi8KKworI2RlZmluZSBPVlNfQ1NfRl9OQVRfTUFTSyAoT1ZTX0NTX0ZfU1JD X05BVCB8IE9WU19DU19GX0RTVF9OQVQpCiAKIC8qKgogICogZW51bSBvdnNfZmxvd19hdHRyIC0g YXR0cmlidXRlcyBmb3IgJU9WU19GTE9XXyogY29tbWFuZHMuCkBAIC02MzIsNiArNjM4LDggQEAg c3RydWN0IG92c19hY3Rpb25faGFzaCB7CiAgKiBtYXNrLiBGb3IgZWFjaCBiaXQgc2V0IGluIHRo ZSBtYXNrLCB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gdGhlIHZhbHVlIGlzCiAgKiBjb3BpZWQg dG8gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgbGFiZWwgZmllbGQgaW4gdGhlIGNvbm5lY3Rpb24u CiAgKiBAT1ZTX0NUX0FUVFJfSEVMUEVSOiB2YXJpYWJsZSBsZW5ndGggc3RyaW5nIGRlZmluaW5n IGNvbm50cmFjayBBTEcuCisgKiBAT1ZTX0NUX0FUVFJfTkFUOiBOZXN0ZWQgT1ZTX05BVF9BVFRS XyogZm9yIHBlcmZvcm1pbmcgTDMgbmV0d29yayBhZGRyZXNzCisgKiB0cmFuc2xhdGlvbiAoTkFU KSBvbiB0aGUgcGFja2V0LgogICovCiBlbnVtIG92c19jdF9hdHRyIHsKIAlPVlNfQ1RfQVRUUl9V TlNQRUMsCkBAIC02NDEsMTIgKzY0OSw1MSBAQCBlbnVtIG92c19jdF9hdHRyIHsKIAlPVlNfQ1Rf QVRUUl9MQUJFTFMsICAgICAvKiBsYWJlbHMgdG8gYXNzb2NpYXRlIHdpdGggdGhpcyBjb25uZWN0 aW9uLiAqLwogCU9WU19DVF9BVFRSX0hFTFBFUiwgICAgIC8qIG5ldGxpbmsgaGVscGVyIHRvIGFz c2lzdCBkZXRlY3Rpb24gb2YKIAkJCQkgICByZWxhdGVkIGNvbm5lY3Rpb25zLiAqLworCU9WU19D VF9BVFRSX05BVCwgICAgICAgIC8qIE5lc3RlZCBPVlNfTkFUX0FUVFJfKiAqLwogCV9fT1ZTX0NU X0FUVFJfTUFYCiB9OwogCiAjZGVmaW5lIE9WU19DVF9BVFRSX01BWCAoX19PVlNfQ1RfQVRUUl9N QVggLSAxKQogCiAvKioKKyAqIGVudW0gb3ZzX25hdF9hdHRyIC0gQXR0cmlidXRlcyBmb3IgJU9W U19DVF9BVFRSX05BVC4KKyAqCisgKiBAT1ZTX05BVF9BVFRSX1NSQzogRmxhZyBmb3IgU291cmNl IE5BVCAobWFuZ2xlIHNvdXJjZSBhZGRyZXNzL3BvcnQpLgorICogQE9WU19OQVRfQVRUUl9EU1Q6 IEZsYWcgZm9yIERlc3RpbmF0aW9uIE5BVCAobWFuZ2xlIGRlc3RpbmF0aW9uCisgKiBhZGRyZXNz L3BvcnQpLiAgT25seSBvbmUgb2YgKEBPVlNfTkFUX0FUVFJfU1JDLCBAT1ZTX05BVF9BVFRSX0RT VCkgbWF5IGJlCisgKiBzcGVjaWZpZWQuICBFZmZlY3RpdmUgb25seSBmb3IgcGFja2V0cyBmb3Ig Y3Rfc3RhdGUgTkVXIGNvbm5lY3Rpb25zLgorICogUGFja2V0cyBvZiBjb21taXR0ZWQgY29ubmVj dGlvbnMgYXJlIG1hbmdsZWQgYnkgdGhlIE5BVCBhY3Rpb24gYWNjb3JkaW5nIHRvCisgKiB0aGUg Y29tbWl0dGVkIE5BVCB0eXBlIHJlZ2FyZGxlc3Mgb2YgdGhlIGZsYWdzIHNwZWNpZmllZC4gIEFz IGEgY29yb2xsYXJ5LCBhCisgKiBOQVQgYWN0aW9uIHdpdGhvdXQgYSBOQVQgdHlwZSBmbGFnIHdp bGwgb25seSBtYW5nbGUgcGFja2V0cyBvZiBjb21taXR0ZWQKKyAqIGNvbm5lY3Rpb25zLiAgVGhl IGZvbGxvd2luZyBOQVQgYXR0cmlidXRlcyBvbmx5IGFwcGx5IGZvciBORVcKKyAqIChub24tY29t bWl0dGVkKSBjb25uZWN0aW9ucywgYW5kIHRoZXkgbWF5IGJlIGluY2x1ZGVkIG9ubHkgd2hlbiB0 aGUgQ1QKKyAqIGFjdGlvbiBoYXMgdGhlIEBPVlNfQ1RfQVRUUl9DT01NSVQgZmxhZyBhbmQgZWl0 aGVyIEBPVlNfTkFUX0FUVFJfU1JDIG9yCisgKiBAT1ZTX05BVF9BVFRSX0RTVCBpcyBhbHNvIGlu Y2x1ZGVkLgorICogQE9WU19OQVRfQVRUUl9JUF9NSU46IHN0cnVjdCBpbl9hZGRyIG9yIHN0cnVj dCBpbjZfYWRkcgorICogQE9WU19OQVRfQVRUUl9JUF9NQVg6IHN0cnVjdCBpbl9hZGRyIG9yIHN0 cnVjdCBpbjZfYWRkcgorICogQE9WU19OQVRfQVRUUl9QUk9UT19NSU46IHUxNiBMNCBwcm90b2Nv bCBzcGVjaWZpYyBsb3dlciBib3VuZGFyeSAocG9ydCkKKyAqIEBPVlNfTkFUX0FUVFJfUFJPVE9f TUFYOiB1MTYgTDQgcHJvdG9jb2wgc3BlY2lmaWMgdXBwZXIgYm91bmRhcnkgKHBvcnQpCisgKiBA T1ZTX05BVF9BVFRSX1BFUlNJU1RFTlQ6IEZsYWcgZm9yIHBlcnNpc3RlbnQgSVAgbWFwcGluZyBh Y3Jvc3MgcmVib290cworICogQE9WU19OQVRfQVRUUl9QUk9UT19IQVNIOiBGbGFnIGZvciBwc2V1 ZG8gcmFuZG9tIEw0IHBvcnQgbWFwcGluZyAoTUQ1KQorICogQE9WU19OQVRfQVRUUl9QUk9UT19S QU5ET006IEZsYWcgZm9yIGZ1bGx5IHJhbmRvbWl6ZWQgTDQgcG9ydCBtYXBwaW5nCisgKi8KK2Vu dW0gb3ZzX25hdF9hdHRyIHsKKwlPVlNfTkFUX0FUVFJfVU5TUEVDLAorCU9WU19OQVRfQVRUUl9T UkMsCisJT1ZTX05BVF9BVFRSX0RTVCwKKwlPVlNfTkFUX0FUVFJfSVBfTUlOLAorCU9WU19OQVRf QVRUUl9JUF9NQVgsCisJT1ZTX05BVF9BVFRSX1BST1RPX01JTiwKKwlPVlNfTkFUX0FUVFJfUFJP VE9fTUFYLAorCU9WU19OQVRfQVRUUl9QRVJTSVNURU5ULAorCU9WU19OQVRfQVRUUl9QUk9UT19I QVNILAorCU9WU19OQVRfQVRUUl9QUk9UT19SQU5ET00sCisJX19PVlNfTkFUX0FUVFJfTUFYLAor fTsKKworI2RlZmluZSBPVlNfTkFUX0FUVFJfTUFYIChfX09WU19OQVRfQVRUUl9NQVggLSAxKQor CisvKioKICAqIGVudW0gb3ZzX2FjdGlvbl9hdHRyIC0gQWN0aW9uIHR5cGVzLgogICoKICAqIEBP VlNfQUNUSU9OX0FUVFJfT1VUUFVUOiBPdXRwdXQgcGFja2V0IHRvIHBvcnQuCmRpZmYgLS1naXQg YS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmMgYi9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNr LmMKaW5kZXggYmE0NDI4Ny4uYjFmMThhZSAxMDA2NDQKLS0tIGEvbmV0L29wZW52c3dpdGNoL2Nv bm50cmFjay5jCisrKyBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suYwpAQCAtMjAsNiArMjAs MTYgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja196b25lcy5oPgogI2lu Y2x1ZGUgPG5ldC9uZXRmaWx0ZXIvaXB2Ni9uZl9kZWZyYWdfaXB2Ni5oPgogCisjaWZkZWYgQ09O RklHX05GX05BVF9ORUVERUQKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfbmF0Lmg+Cisj aW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRm aWx0ZXIvbmZfbmF0X2wzcHJvdG8uaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50 cmFja19zZXFhZGouaD4KKyNpbmNsdWRlIDxsaW51eC9zY3RwLmg+CisjaW5jbHVkZSA8bGludXgv dGNwLmg+CisjaW5jbHVkZSA8bGludXgvdWRwLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgImRhdGFw YXRoLmgiCiAjaW5jbHVkZSAiY29ubnRyYWNrLmgiCiAjaW5jbHVkZSAiZmxvdy5oIgpAQCAtNDIs MTUgKzUyLDI5IEBAIHN0cnVjdCBtZF9sYWJlbHMgewogCXN0cnVjdCBvdnNfa2V5X2N0X2xhYmVs cyBtYXNrOwogfTsKIAorI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECitlbnVtIG92c19jdF9u YXQgeworCU9WU19DVF9OQVQgPSAxIDw8IDAsICAgICAvKiBOQVQgZm9yIGNvbW1pdHRlZCBjb25u ZWN0aW9ucyBvbmx5LiAqLworCU9WU19DVF9TUkNfTkFUID0gMSA8PCAxLCAvKiBTb3VyY2UgTkFU IGZvciBORVcgY29ubmVjdGlvbnMuICovCisJT1ZTX0NUX0RTVF9OQVQgPSAxIDw8IDIsIC8qIERl c3RpbmF0aW9uIE5BVCBmb3IgTkVXIGNvbm5lY3Rpb25zLiAqLworfTsKKyNlbmRpZgorCiAvKiBD b25udHJhY2sgYWN0aW9uIGNvbnRleHQgZm9yIGV4ZWN1dGlvbi4gKi8KIHN0cnVjdCBvdnNfY29u bnRyYWNrX2luZm8gewogCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7CiAJc3Ry dWN0IG5mX2Nvbm50cmFja196b25lIHpvbmU7CiAJc3RydWN0IG5mX2Nvbm4gKmN0OwogCXU4IGNv bW1pdCA6IDE7CisjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKKwl1OCBuYXQgOiAzOyAgICAg ICAgICAgICAgICAgLyogZW51bSBvdnNfY3RfbmF0ICovCisjZW5kaWYKIAl1MTYgZmFtaWx5Owog CXN0cnVjdCBtZF9tYXJrIG1hcms7CiAJc3RydWN0IG1kX2xhYmVscyBsYWJlbHM7CisjaWZkZWYg Q09ORklHX05GX05BVF9ORUVERUQKKwlzdHJ1Y3QgbmZfbmF0X3JhbmdlIHJhbmdlOyAgLyogT25s eSBwcmVzZW50IGZvciBTUkMgTkFUIGFuZCBEU1QgTkFULiAqLworI2VuZGlmCiB9OwogCiBzdGF0 aWMgdTE2IGtleV90b19uZnByb3RvKGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5KQpAQCAt MTM1LDExICsxNTksMTQgQEAgc3RhdGljIHZvaWQgX19vdnNfY3RfdXBkYXRlX2tleShzdHJ1Y3Qg c3dfZmxvd19rZXkgKmtleSwgdTggc3RhdGUsCiAJb3ZzX2N0X2dldF9sYWJlbHMoY3QsICZrZXkt PmN0LmxhYmVscyk7CiB9CiAKLS8qIFVwZGF0ZSAna2V5JyBiYXNlZCBvbiBza2ItPm5mY3QuIElm ICdwb3N0X2N0JyBpcyB0cnVlLCB0aGVuIE9WUyBoYXMKLSAqIHByZXZpb3VzbHkgc2VudCB0aGUg cGFja2V0IHRvIGNvbm50cmFjayB2aWEgdGhlIGN0IGFjdGlvbi4KKy8qIFVwZGF0ZSAna2V5JyBi YXNlZCBvbiBza2ItPm5mY3QuICBJZiAncG9zdF9jdCcgaXMgdHJ1ZSwgdGhlbiBPVlMgaGFzCisg KiBwcmV2aW91c2x5IHNlbnQgdGhlIHBhY2tldCB0byBjb25udHJhY2sgdmlhIHRoZSBjdCBhY3Rp b24uICBJZgorICogJ2tlZXBfbmF0X2ZsYWdzJyBpcyB0cnVlLCB0aGUgZXhpc3RpbmcgTkFUIGZs YWdzIHJldGFpbmVkLCBlbHNlIHRoZXkgYXJlCisgKiBpbml0aWFsaXplZCBmcm9tIHRoZSBjb25u ZWN0aW9uIHN0YXR1cy4KICAqLwogc3RhdGljIHZvaWQgb3ZzX2N0X3VwZGF0ZV9rZXkoY29uc3Qg c3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgICAgIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LCBi b29sIHBvc3RfY3QpCisJCQkgICAgICBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSwgYm9vbCBwb3N0 X2N0LAorCQkJICAgICAgYm9vbCBrZWVwX25hdF9mbGFncykKIHsKIAljb25zdCBzdHJ1Y3QgbmZf Y29ubnRyYWNrX3pvbmUgKnpvbmUgPSAmbmZfY3Rfem9uZV9kZmx0OwogCWVudW0gaXBfY29ubnRy YWNrX2luZm8gY3RpbmZvOwpAQCAtMTQ5LDEwICsxNzYsMjQgQEAgc3RhdGljIHZvaWQgb3ZzX2N0 X3VwZGF0ZV9rZXkoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAljdCA9IG5mX2N0X2dldChz a2IsICZjdGluZm8pOwogCWlmIChjdCkgewogCQlzdGF0ZSA9IG92c19jdF9nZXRfc3RhdGUoY3Rp bmZvKTsKKwkJLyogQWxsIHVuY29uZmlybWVkIGVudHJpZXMgYXJlIE5FVyBjb25uZWN0aW9ucy4g Ki8KIAkJaWYgKCFuZl9jdF9pc19jb25maXJtZWQoY3QpKQogCQkJc3RhdGUgfD0gT1ZTX0NTX0Zf TkVXOworCQkvKiBPVlMgcGVyc2lzdHMgdGhlIHJlbGF0ZWQgZmxhZyBmb3IgdGhlIGR1cmF0aW9u IG9mIHRoZQorCQkgKiBjb25uZWN0aW9uLgorCQkgKi8KIAkJaWYgKGN0LT5tYXN0ZXIpCiAJCQlz dGF0ZSB8PSBPVlNfQ1NfRl9SRUxBVEVEOworI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECisJ CWlmIChrZWVwX25hdF9mbGFncykKKwkJCXN0YXRlIHw9IGtleS0+Y3Quc3RhdGUgJiBPVlNfQ1Nf Rl9OQVRfTUFTSzsKKwkJZWxzZSB7CisJCQlpZiAoY3QtPnN0YXR1cyAmIElQU19TUkNfTkFUKQor CQkJCXN0YXRlIHw9IE9WU19DU19GX1NSQ19OQVQ7CisJCQlpZiAoY3QtPnN0YXR1cyAmIElQU19E U1RfTkFUKQorCQkJCXN0YXRlIHw9IE9WU19DU19GX0RTVF9OQVQ7CisJCX0KKyNlbmRpZgogCQl6 b25lID0gbmZfY3Rfem9uZShjdCk7CiAJfSBlbHNlIGlmIChwb3N0X2N0KSB7CiAJCXN0YXRlID0g T1ZTX0NTX0ZfVFJBQ0tFRCB8IE9WU19DU19GX0lOVkFMSUQ7CkBAIC0xNjAsOSArMjAxLDExIEBA IHN0YXRpYyB2b2lkIG92c19jdF91cGRhdGVfa2V5KGNvbnN0IHN0cnVjdCBza19idWZmICpza2Is CiAJX19vdnNfY3RfdXBkYXRlX2tleShrZXksIHN0YXRlLCB6b25lLCBjdCk7CiB9CiAKKy8qIFRo aXMgaXMgY2FsbGVkIHRvIGluaXRpYWxpemUgQ1Qga2V5IGZpZWxkcyBwb3NzaWJseSBjb21pbmcg aW4gZnJvbSB0aGUgbG9jYWwKKyAqIHN0YWNrLiAqLwogdm9pZCBvdnNfY3RfZmlsbF9rZXkoY29u c3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXkpCiB7Ci0Jb3Zz X2N0X3VwZGF0ZV9rZXkoc2tiLCBrZXksIGZhbHNlKTsKKwlvdnNfY3RfdXBkYXRlX2tleShza2Is IGtleSwgZmFsc2UsIGZhbHNlKTsKIH0KIAogaW50IG92c19jdF9wdXRfa2V5KGNvbnN0IHN0cnVj dCBzd19mbG93X2tleSAqa2V5LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQpAQCAtMjUxLDYgKzI5NCw3 IEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2hlbHBlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgcHJv dG8pCiAJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CiAJdW5zaWduZWQgaW50IHByb3Rv ZmY7CiAJc3RydWN0IG5mX2Nvbm4gKmN0OworCWludCBlcnI7CiAKIAljdCA9IG5mX2N0X2dldChz a2IsICZjdGluZm8pOwogCWlmICghY3QgfHwgY3RpbmZvID09IElQX0NUX1JFTEFURURfUkVQTFkp CkBAIC0yODcsNyArMzMxLDIwIEBAIHN0YXRpYyBpbnQgb3ZzX2N0X2hlbHBlcihzdHJ1Y3Qgc2tf YnVmZiAqc2tiLCB1MTYgcHJvdG8pCiAJCXJldHVybiBORl9EUk9QOwogCX0KIAotCXJldHVybiBo ZWxwZXItPmhlbHAoc2tiLCBwcm90b2ZmLCBjdCwgY3RpbmZvKTsKKwllcnIgPSBoZWxwZXItPmhl bHAoc2tiLCBwcm90b2ZmLCBjdCwgY3RpbmZvKTsKKwlpZiAoZXJyICE9IE5GX0FDQ0VQVCkKKwkJ cmV0dXJuIGVycjsKKworI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECisJLyogQWRqdXN0IHNl cXMgYWZ0ZXIgaGVscGVyLiAgVGhpcyBpcyBuZWVkZWQgZHVlIHRvIHNvbWUgaGVscGVycyAoZS5n LiwKKwkgKiBGVFAgd2l0aCBOQVQpIGFkdXN0aW5nIHRoZSBUQ1AgcGF5bG9hZCBzaXplIHdoZW4g bWFuZ2xpbmcgSVAKKwkgKiBhZGRyZXNzZXMgYW5kL29yIHBvcnQgbnVtYmVycyBpbiB0aGUgdGV4 dC1iYXNlZCBjb250cm9sIGNvbm5lY3Rpb24uCisJICovCisJaWYgKHRlc3RfYml0KElQU19TRVFf QURKVVNUX0JJVCwgJmN0LT5zdGF0dXMpCisJICAgICYmICFuZl9jdF9zZXFfYWRqdXN0KHNrYiwg Y3QsIGN0aW5mbywgcHJvdG9mZikpCisJCXJldHVybiBORl9EUk9QOworI2VuZGlmCisJcmV0dXJu IE5GX0FDQ0VQVDsKIH0KIAogLyogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FSU5QUk9HUkVTUyBp ZiAnc2tiJyBpcyBzdG9sZW4sIG9yIG90aGVyIG5vbnplcm8KQEAgLTQ1NSw2ICs1MTIsMTg5IEBA IHN0YXRpYyBib29sIHNrYl9uZmN0X2NhY2hlZChzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIHRy dWU7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAorLyogTW9kZWxlZCBhZnRlciBu Zl9uYXRfaXB2WzQ2XV9mbigpLgorICogcmFuZ2UgaXMgb25seSB1c2VkIGZvciBuZXcsIHVuaW5p dGlhbGl6ZWQgTkFUIHN0YXRlLgorICogUmV0dXJucyBlaXRoZXIgTkZfQUNDRVBUIG9yIE5GX0RS T1AuICovCitzdGF0aWMgaW50IG92c19jdF9uYXRfZXhlY3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0 aW5mbywKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAorCQkJICAg ICAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUpCit7CisJaW50IGhvb2tudW0sIG5o X29mZiwgZXJyID0gTkZfQUNDRVBUOworCisJbmhfb2ZmID0gc2tiX25ldHdvcmtfb2Zmc2V0KHNr Yik7CisJc2tiX3B1bGwoc2tiLCBuaF9vZmYpOworCisJLyogU2VlIEhPT0syTUFOSVAoKS4gKi8K KwlpZiAobWFuaXB0eXBlID09IE5GX05BVF9NQU5JUF9TUkMpCisJCWhvb2tudW0gPSBORl9JTkVU X0xPQ0FMX0lOOyAvKiBTb3VyY2UgTkFUICovCisJZWxzZQorCQlob29rbnVtID0gTkZfSU5FVF9M T0NBTF9PVVQ7IC8qIERlc3RpbmF0aW9uIE5BVCAqLworCisJc3dpdGNoIChjdGluZm8pIHsKKwlj YXNlIElQX0NUX1JFTEFURUQ6CisJY2FzZSBJUF9DVF9SRUxBVEVEX1JFUExZOgorCQlpZiAoc2ti LT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkKKwkJICAgICYmIGlwX2hkcihza2IpLT5wcm90 b2NvbCA9PSBJUFBST1RPX0lDTVApIHsKKwkJCWlmICghbmZfbmF0X2ljbXBfcmVwbHlfdHJhbnNs YXRpb24oc2tiLCBjdCwgY3RpbmZvLAorCQkJCQkJCSAgIGhvb2tudW0pKQorCQkJCWVyciA9IE5G X0RST1A7CisJCQlnb3RvIHB1c2g7CisJCX0gZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9u cyhFVEhfUF9JUFY2KSkgeworCQkJX19iZTE2IGZyYWdfb2ZmOworCQkJdTggbmV4dGhkciA9IGlw djZfaGRyKHNrYiktPm5leHRoZHI7CisJCQlpbnQgaGRybGVuID0gaXB2Nl9za2lwX2V4dGhkcihz a2IsCisJCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpLAorCQkJCQkJICAgICAgJm5l eHRoZHIsICZmcmFnX29mZik7CisKKwkJCWlmIChoZHJsZW4gPj0gMCAmJiBuZXh0aGRyID09IElQ UFJPVE9fSUNNUFY2KSB7CisJCQkJaWYgKCFuZl9uYXRfaWNtcHY2X3JlcGx5X3RyYW5zbGF0aW9u KHNrYiwgY3QsCisJCQkJCQkJCSAgICAgY3RpbmZvLAorCQkJCQkJCQkgICAgIGhvb2tudW0sCisJ CQkJCQkJCSAgICAgaGRybGVuKSkKKwkJCQkJZXJyID0gTkZfRFJPUDsKKwkJCQlnb3RvIHB1c2g7 CisJCQl9CisJCX0KKwkJLyogTm9uLUlDTVAsIGZhbGwgdGhydSB0byBpbml0aWFsaXplIGlmIG5l ZWRlZC4gKi8KKwljYXNlIElQX0NUX05FVzoKKwkJLyogU2VlbiBpdCBiZWZvcmU/ICBUaGlzIGNh biBoYXBwZW4gZm9yIGxvb3BiYWNrLCByZXRyYW5zLAorCQkgKiBvciBsb2NhbCBwYWNrZXRzLgor CQkgKi8KKwkJaWYgKCFuZl9uYXRfaW5pdGlhbGl6ZWQoY3QsIG1hbmlwdHlwZSkpIHsKKwkJCS8q IEluaXRpYWxpemUgYWNjb3JkaW5nIHRvIHRoZSBOQVQgYWN0aW9uLiAqLworCQkJZXJyID0gKHJh bmdlICYmIHJhbmdlLT5mbGFncyAmIE5GX05BVF9SQU5HRV9NQVBfSVBTKQorCQkJCS8qIEFjdGlv biBpcyBzZXQgdXAgdG8gZXN0YWJsaXNoIGEgbmV3CisJCQkJICogbWFwcGluZyAqLworCQkJCT8g bmZfbmF0X3NldHVwX2luZm8oY3QsIHJhbmdlLCBtYW5pcHR5cGUpCisJCQkJOiBuZl9uYXRfYWxs b2NfbnVsbF9iaW5kaW5nKGN0LCBob29rbnVtKTsKKwkJCWlmIChlcnIgIT0gTkZfQUNDRVBUKQor CQkJCWdvdG8gcHVzaDsKKwkJfQorCQlicmVhazsKKworCWNhc2UgSVBfQ1RfRVNUQUJMSVNIRUQ6 CisJY2FzZSBJUF9DVF9FU1RBQkxJU0hFRF9SRVBMWToKKwkJYnJlYWs7CisKKwlkZWZhdWx0Ogor CQllcnIgPSBORl9EUk9QOworCQlnb3RvIHB1c2g7CisJfQorCisJZXJyID0gbmZfbmF0X3BhY2tl dChjdCwgY3RpbmZvLCBob29rbnVtLCBza2IpOworcHVzaDoKKwlza2JfcHVzaChza2IsIG5oX29m Zik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBvdnNfbmF0X3VwZGF0ZV9rZXko c3RydWN0IHN3X2Zsb3dfa2V5ICprZXksCisJCQkgICAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYg KnNrYiwKKwkJCSAgICAgICBlbnVtIG5mX25hdF9tYW5pcF90eXBlIG1hbmlwdHlwZSkKK3sKKwlp ZiAobWFuaXB0eXBlID09IE5GX05BVF9NQU5JUF9TUkMpIHsKKwkJX19iZTE2IHNyYzsKKworCQlr ZXktPmN0LnN0YXRlIHw9IE9WU19DU19GX1NSQ19OQVQ7CisJCWlmIChrZXktPmV0aC50eXBlID09 IGh0b25zKEVUSF9QX0lQKSkKKwkJCWtleS0+aXB2NC5hZGRyLnNyYyA9IGlwX2hkcihza2IpLT5z YWRkcjsKKwkJZWxzZSBpZiAoa2V5LT5ldGgudHlwZSA9PSBodG9ucyhFVEhfUF9JUFY2KSkKKwkJ CW1lbWNweSgma2V5LT5pcHY2LmFkZHIuc3JjLCAmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsCisJCQkg ICAgICAgc2l6ZW9mKGtleS0+aXB2Ni5hZGRyLnNyYykpOworCQllbHNlCisJCQlyZXR1cm47CisK KwkJaWYgKGtleS0+aXAucHJvdG8gPT0gSVBQUk9UT19VRFApCisJCQlzcmMgPSB1ZHBfaGRyKHNr YiktPnNvdXJjZTsKKwkJZWxzZSBpZiAoa2V5LT5pcC5wcm90byA9PSBJUFBST1RPX1RDUCkKKwkJ CXNyYyA9IHRjcF9oZHIoc2tiKS0+c291cmNlOworCQllbHNlIGlmIChrZXktPmlwLnByb3RvID09 IElQUFJPVE9fU0NUUCkKKwkJCXNyYyA9IHNjdHBfaGRyKHNrYiktPnNvdXJjZTsKKwkJZWxzZQor CQkJcmV0dXJuOworCisJCWtleS0+dHAuc3JjID0gc3JjOworCX0gZWxzZSB7CisJCV9fYmUxNiBk c3Q7CisKKwkJa2V5LT5jdC5zdGF0ZSB8PSBPVlNfQ1NfRl9EU1RfTkFUOworCQlpZiAoa2V5LT5l dGgudHlwZSA9PSBodG9ucyhFVEhfUF9JUCkpCisJCQlrZXktPmlwdjQuYWRkci5kc3QgPSBpcF9o ZHIoc2tiKS0+ZGFkZHI7CisJCWVsc2UgaWYgKGtleS0+ZXRoLnR5cGUgPT0gaHRvbnMoRVRIX1Bf SVBWNikpCisJCQltZW1jcHkoJmtleS0+aXB2Ni5hZGRyLmRzdCwgJmlwdjZfaGRyKHNrYiktPmRh ZGRyLAorCQkJICAgICAgIHNpemVvZihrZXktPmlwdjYuYWRkci5kc3QpKTsKKwkJZWxzZQorCQkJ cmV0dXJuOworCisJCWlmIChrZXktPmlwLnByb3RvID09IElQUFJPVE9fVURQKQorCQkJZHN0ID0g dWRwX2hkcihza2IpLT5kZXN0OworCQllbHNlIGlmIChrZXktPmlwLnByb3RvID09IElQUFJPVE9f VENQKQorCQkJZHN0ID0gdGNwX2hkcihza2IpLT5kZXN0OworCQllbHNlIGlmIChrZXktPmlwLnBy b3RvID09IElQUFJPVE9fU0NUUCkKKwkJCWRzdCA9IHNjdHBfaGRyKHNrYiktPmRlc3Q7CisJCWVs c2UKKwkJCXJldHVybjsKKworCQlrZXktPnRwLmRzdCA9IGRzdDsKKwl9Cit9CisKKy8qIFJldHVy bnMgTkZfRFJPUCBpZiB0aGUgcGFja2V0IHNob3VsZCBiZSBkcm9wcGVkLCBORl9BQ0NFUFQgb3Ro ZXJ3aXNlLiAqLworc3RhdGljIGludCBvdnNfY3RfbmF0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0 IHN3X2Zsb3dfa2V5ICprZXksCisJCSAgICAgIGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNrX2lu Zm8gKmluZm8sCisJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZl9jb25uICpj dCwKKwkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pCit7CisJZW51bSBuZl9u YXRfbWFuaXBfdHlwZSBtYW5pcHR5cGU7CisJaW50IGVycjsKKworCWlmIChuZl9jdF9pc191bnRy YWNrZWQoY3QpKSB7CisJCS8qIEEgTkFUIGFjdGlvbiBtYXkgb25seSBiZSBwZXJmb3JtZWQgb24g dHJhY2tlZCBwYWNrZXRzLiAqLworCQlyZXR1cm4gTkZfQUNDRVBUOworCX0KKworCS8qIEFkZCBO QVQgZXh0ZW5zaW9uIGlmIG5vdCBjb25maXJtZWQgeWV0LiAqLworCWlmICghbmZfY3RfaXNfY29u ZmlybWVkKGN0KSAmJiAhbmZfY3RfbmF0X2V4dF9hZGQoY3QpKQorCQlyZXR1cm4gTkZfQUNDRVBU OyAgIC8qIENhbid0IE5BVC4gKi8KKworCS8qIERldGVybWluZSBOQVQgdHlwZS4KKwkgKiBDaGVj ayBpZiB0aGUgTkFUIHR5cGUgY2FuIGJlIGRlZHVjZWQgZnJvbSB0aGUgdHJhY2tlZCBjb25uZWN0 aW9uLgorCSAqIE1ha2Ugc3VyZSBleHBlY3RlZCB0cmFmZmljIGlzIE5BVHRlZCBvbmx5IHdoZW4g Y29tbWl0aW5nLgorCSAqLworCWlmIChpbmZvLT5uYXQgJiBPVlNfQ1RfTkFUICYmIGN0aW5mbyAh PSBJUF9DVF9ORVcKKwkgICAgJiYgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSworCSAgICAmJiAo IShjdC0+c3RhdHVzICYgSVBTX0VYUEVDVEVEX0JJVCkgfHwgaW5mby0+Y29tbWl0KSkgeworCQkv KiBOQVQgYW4gZXN0YWJsaXNoZWQgb3IgcmVsYXRlZCBjb25uZWN0aW9uIGxpa2UgYmVmb3JlLiAq LworCQlpZiAoQ1RJTkZPMkRJUihjdGluZm8pID09IElQX0NUX0RJUl9SRVBMWSkKKwkJCS8qIFRo aXMgaXMgdGhlIFJFUExZIGRpcmVjdGlvbiBmb3IgYSBjb25uZWN0aW9uCisJCQkgKiBmb3Igd2hp Y2ggTkFUIHdhcyBhcHBsaWVkIGluIHRoZSBmb3J3YXJkCisJCQkgKiBkaXJlY3Rpb24uICBEbyB0 aGUgcmV2ZXJzZSBOQVQuCisJCQkgKi8KKwkJCW1hbmlwdHlwZSA9IGN0LT5zdGF0dXMgJiBJUFNf U1JDX05BVAorCQkJCT8gTkZfTkFUX01BTklQX0RTVCA6IE5GX05BVF9NQU5JUF9TUkM7CisJCWVs c2UKKwkJCW1hbmlwdHlwZSA9IGN0LT5zdGF0dXMgJiBJUFNfU1JDX05BVAorCQkJCT8gTkZfTkFU X01BTklQX1NSQyA6IE5GX05BVF9NQU5JUF9EU1Q7CisJfQorCWVsc2UgaWYgKGluZm8tPm5hdCAm IE9WU19DVF9TUkNfTkFUKQorCQltYW5pcHR5cGUgPSBORl9OQVRfTUFOSVBfU1JDOworCWVsc2Ug aWYgKGluZm8tPm5hdCAmIE9WU19DVF9EU1RfTkFUKQorCQltYW5pcHR5cGUgPSBORl9OQVRfTUFO SVBfRFNUOworCWVsc2UKKwkJcmV0dXJuIE5GX0FDQ0VQVDsgLyogQ29ubmVjdGlvbiBpcyBub3Qg TkFUZWQuICovCisKKwllcnIgPSBvdnNfY3RfbmF0X2V4ZWN1dGUoc2tiLCBjdCwgY3RpbmZvLCAm aW5mby0+cmFuZ2UsIG1hbmlwdHlwZSk7CisKKwkvKiBNYXJrIE5BVCBkb25lIGlmIHN1Y2Nlc3Nm dWwgYW5kIHVwZGF0ZSB0aGUgZmxvdyBrZXkuICovCisJaWYgKGVyciA9PSBORl9BQ0NFUFQpCisJ CW92c19uYXRfdXBkYXRlX2tleShrZXksIHNrYiwgbWFuaXB0eXBlKTsKKworCXJldHVybiBlcnI7 Cit9CisjZW5kaWYKKwogLyogUGFzcyAnc2tiJyB0aHJvdWdoIGNvbm50cmFjayBpbiAnbmV0Jywg dXNpbmcgem9uZSBjb25maWd1cmVkIGluICdpbmZvJywgaWYKICAqIG5vdCBkb25lIGFscmVhZHku ICBVcGRhdGUga2V5IHdpdGggbmV3IENUIHN0YXRlIGFmdGVyIHBhc3NpbmcgdGhlIHBhY2tldAog ICogdGhyb3VnaCBjb25udHJhY2suCkBAIC00OTUsMTcgKzczNSw0NSBAQCBzdGF0aWMgaW50IF9f b3ZzX2N0X2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzd19mbG93X2tleSAqa2V5LAog CQlpZiAoZXJyICE9IE5GX0FDQ0VQVCkKIAkJCXJldHVybiAtRU5PRU5UOwogCi0JCW92c19jdF91 cGRhdGVfa2V5KHNrYiwga2V5LCB0cnVlKTsKKwkJLyogQ2xlYXIgQ1Qgc3RhdGUgTkFUIGZsYWdz IHRvIG1hcmsgdGhhdCB3ZSBoYXZlIG5vdCB5ZXQgZG9uZQorCQkgKiBOQVQgYWZ0ZXIgdGhlIG5m X2Nvbm50cmFja19pbigpIGNhbGwuICBXZSBjYW4gYWN0dWFsbHkgY2xlYXIKKwkJICogdGhlIHdo b2xlIHN0YXRlLCBhcyBpdCB3aWxsIGJlIHJlLWluaXRpYWxpemVkIGJlbG93LgorCQkgKi8KKwkJ a2V5LT5jdC5zdGF0ZSA9IDA7CisKKwkJLyogVXBkYXRlIHRoZSBrZXksIGJ1dCBrZWVwIHRoZSBO QVQgZmxhZ3MuICovCisJCW92c19jdF91cGRhdGVfa2V5KHNrYiwga2V5LCB0cnVlLCB0cnVlKTsK IAl9CiAKLQkvKiBDYWxsIHRoZSBoZWxwZXIgcmlnaHQgYWZ0ZXIgbmZfY29ubnRyYWNrX2luKCkg Zm9yIGNvbmZpcm1lZAotCSAqIGNvbm5lY3Rpb25zLCBidXQgb25seSB3aGVuIGNvbW1pdGluZyBm b3IgdW5jb25maXJtZWQgY29ubmVjdGlvbnMuCi0JICovCiAJY3QgPSBuZl9jdF9nZXQoc2tiLCAm Y3RpbmZvKTsKLQlpZiAoY3QgJiYgKG5mX2N0X2lzX2NvbmZpcm1lZChjdCkgPyAhY2FjaGVkIDog aW5mby0+Y29tbWl0KQotCSAgICAmJiBvdnNfY3RfaGVscGVyKHNrYiwgaW5mby0+ZmFtaWx5KSAh PSBORl9BQ0NFUFQpIHsKLQkJV0FSTl9PTkNFKDEsICJoZWxwZXIgcmVqZWN0ZWQgcGFja2V0Iik7 Ci0JCXJldHVybiAtRUlOVkFMOworCWlmIChjdCkgeworI2lmZGVmIENPTkZJR19ORl9OQVRfTkVF REVECisJCS8qIFBhY2tldHMgc3RhcnRpbmcgYSBuZXcgY29ubmVjdGlvbiBtdXN0IGJlIE5BVHRl ZCBiZWZvcmUgdGhlCisJCSAqIGhlbHBlciwgc28gdGhhdCB0aGUgaGVscGVyIGtub3dzIGFib3V0 IHRoZSBOQVQuICBXZSBlbmZvcmNlCisJCSAqIHRoaXMgYnkgZGVsYXlpbmcgYm90aCBOQVQgYW5k IGhlbHBlciBjYWxscyBmb3IgdW5jb25maXJtZWQKKwkJICogY29ubmVjdGlvbnMgdW50aWwgdGhl IGNvbW1pdGluZyBDVCBhY3Rpb24uICBGb3IgbGF0ZXIKKwkJICogcGFja2V0cyBOQVQgYW5kIEhl bHBlciBtYXkgYmUgY2FsbGVkIGluIGVpdGhlciBvcmRlci4KKwkJICoKKwkJICogTkFUIHdpbGwg YmUgZG9uZSBvbmx5IGlmIHRoZSBDVCBhY3Rpb24gaGFzIE5BVCwgYW5kIG9ubHkKKwkJICogb25j ZSBwZXIgcGFja2V0IChwZXIgem9uZSksIGFzIGd1YXJkZWQgYnkgdGhlIE5BVCBiaXRzIGluCisJ CSAqIHRoZSBrZXktPmN0LnN0YXRlLgorCQkgKi8KKwkJaWYgKGluZm8tPm5hdCAmJiAhKGtleS0+ Y3Quc3RhdGUgJiBPVlNfQ1NfRl9OQVRfTUFTSykgJiYKKwkJICAgIChuZl9jdF9pc19jb25maXJt ZWQoY3QpIHx8IGluZm8tPmNvbW1pdCkgJiYKKwkJICAgIG92c19jdF9uYXQobmV0LCBrZXksIGlu Zm8sIHNrYiwgY3QsIGN0aW5mbykgIT0gTkZfQUNDRVBUKSB7CisJCQlXQVJOX09OQ0UoMSwgIk5B VCByZWplY3RlZCBwYWNrZXQiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisjZW5kaWYKKwkJ LyogQ2FsbCB0aGUgaGVscGVyIHdoZW5ldmVyIG5mX2Nvbm50cmFja19pbigpIHdhcyBjYWxsZWQg Zm9yCisJCSAqIGNvbmZpcm1lZCBjb25uZWN0aW9ucywgYnV0IG9ubHkgd2hlbiBjb21taXRpbmcg Zm9yCisJCSAqIHVuY29uZmlybWVkIGNvbm5lY3Rpb25zLgorCQkgKi8KKwkJaWYgKChuZl9jdF9p c19jb25maXJtZWQoY3QpID8gIWNhY2hlZCA6IGluZm8tPmNvbW1pdCkKKwkJICAgICYmIG92c19j dF9oZWxwZXIoc2tiLCBpbmZvLT5mYW1pbHkpICE9IE5GX0FDQ0VQVCkgeworCQkJV0FSTl9PTkNF KDEsICJoZWxwZXIgcmVqZWN0ZWQgcGFja2V0Iik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQog CX0KIAogCXJldHVybiAwOwpAQCAtNTI5LDE1ICs3OTcsMTMgQEAgc3RhdGljIGludCBvdnNfY3Rf bG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksCiAJaWYgKGV4 cCkgewogCQl1OCBzdGF0ZTsKIAorCQkvKiBOT1RFOiBOZXcgY29ubmVjdGlvbnMgYXJlIE5BVHRl ZCBhbmQgSGVscGVkIG9ubHkgd2hlbgorCQkgKiBjb21taXRlZCwgc28gd2UgYXJlIG5vdCBjYWxs aW5nIGludG8gTkFUIGhlcmUuCisJCSAqLwogCQlzdGF0ZSA9IE9WU19DU19GX1RSQUNLRUQgfCBP VlNfQ1NfRl9ORVcgfCBPVlNfQ1NfRl9SRUxBVEVEOwogCQlfX292c19jdF91cGRhdGVfa2V5KGtl eSwgc3RhdGUsICZpbmZvLT56b25lLCBleHAtPm1hc3Rlcik7Ci0JfSBlbHNlIHsKLQkJaW50IGVy cjsKLQotCQllcnIgPSBfX292c19jdF9sb29rdXAobmV0LCBrZXksIGluZm8sIHNrYik7Ci0JCWlm IChlcnIpCi0JCQlyZXR1cm4gZXJyOwotCX0KKwl9IGVsc2UKKwkJcmV0dXJuIF9fb3ZzX2N0X2xv b2t1cChuZXQsIGtleSwgaW5mbywgc2tiKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjM3LDYgKzkw MywxMzEgQEAgc3RhdGljIGludCBvdnNfY3RfYWRkX2hlbHBlcihzdHJ1Y3Qgb3ZzX2Nvbm50cmFj a19pbmZvICppbmZvLCBjb25zdCBjaGFyICpuYW1lLAogCXJldHVybiAwOwogfQogCisjaWZkZWYg Q09ORklHX05GX05BVF9ORUVERUQKK3N0YXRpYyBpbnQgcGFyc2VfbmF0KGNvbnN0IHN0cnVjdCBu bGF0dHIgKmF0dHIsCisJCSAgICAgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbywgYm9v bCBsb2cpCit7CisJc3RydWN0IG5sYXR0ciAqYTsKKwlpbnQgcmVtOworCWJvb2wgaGF2ZV9pcF9t YXggPSBmYWxzZTsKKwlib29sIGhhdmVfcHJvdG9fbWF4ID0gZmFsc2U7CisJYm9vbCBpcF92ZXJz ID0gKGluZm8tPmZhbWlseSA9PSBORlBST1RPX0lQVjYpOworCisJbmxhX2Zvcl9lYWNoX25lc3Rl ZChhLCBhdHRyLCByZW0pIHsKKwkJc3RhdGljIGNvbnN0IHUxNiBvdnNfbmF0X2F0dHJfbGVuc1tP VlNfTkFUX0FUVFJfTUFYICsgMV1bMl0gPSB7CisJCQlbT1ZTX05BVF9BVFRSX1NSQ10gPSB7MCwg MH0sCisJCQlbT1ZTX05BVF9BVFRSX0RTVF0gPSB7MCwgMH0sCisJCQlbT1ZTX05BVF9BVFRSX0lQ X01JTl0gPSB7c2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSwKKwkJCQkJCSBzaXplb2Yoc3RydWN0IGlu Nl9hZGRyKX0sCisJCQlbT1ZTX05BVF9BVFRSX0lQX01BWF0gPSB7c2l6ZW9mKHN0cnVjdCBpbl9h ZGRyKSwKKwkJCQkJCSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKX0sCisJCQlbT1ZTX05BVF9BVFRS X1BST1RPX01JTl0gPSB7c2l6ZW9mKHUxNiksc2l6ZW9mKHUxNil9LAorCQkJW09WU19OQVRfQVRU Ul9QUk9UT19NQVhdID0ge3NpemVvZih1MTYpLHNpemVvZih1MTYpfSwKKwkJCVtPVlNfTkFUX0FU VFJfUEVSU0lTVEVOVF0gPSB7MCwgMH0sCisJCQlbT1ZTX05BVF9BVFRSX1BST1RPX0hBU0hdID0g ezAsIDB9LAorCQkJW09WU19OQVRfQVRUUl9QUk9UT19SQU5ET01dID0gezAsIDB9LAorCQl9Owor CQlpbnQgdHlwZSA9IG5sYV90eXBlKGEpOworCisJCWlmICh0eXBlID4gT1ZTX05BVF9BVFRSX01B WCkgeworCQkJT1ZTX05MRVJSKGxvZywgIlVua25vd24gbmF0IGF0dHJpYnV0ZSAodHlwZT0lZCwg bWF4PSVkKS5cbiIsCisJCQl0eXBlLCBPVlNfTkFUX0FUVFJfTUFYKTsKKwkJCXJldHVybiAtRUlO VkFMOworCQl9CisKKwkJaWYgKG92c19uYXRfYXR0cl9sZW5zW3R5cGVdW2lwX3ZlcnNdICE9IG5s YV9sZW4oYSkpIHsKKwkJCU9WU19OTEVSUihsb2csICJOQVQgYXR0cmlidXRlIHR5cGUgaGFzIHVu ZXhwZWN0ZWQgIgorCQkJCSAgIiBsZW5ndGggKHR5cGU9JWQsIGxlbmd0aD0lZCwgZXhwZWN0ZWQ9 JWQpLlxuIiwKKwkJCQkgIHR5cGUsIG5sYV9sZW4oYSksCisJCQkJICBvdnNfbmF0X2F0dHJfbGVu c1t0eXBlXVtpcF92ZXJzXSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXN3aXRjaCAo dHlwZSkgeworCQljYXNlIE9WU19OQVRfQVRUUl9TUkM6CisJCWNhc2UgT1ZTX05BVF9BVFRSX0RT VDoKKwkJCWlmIChpbmZvLT5uYXQpIHsKKwkJCQlPVlNfTkxFUlIobG9nLCAiT25seSBvbmUgdHlw ZSBvZiBOQVQgbWF5IGJlICIKKwkJCQkJICAic3BlY2lmaWVkLlxuIik7CisJCQkJcmV0dXJuIC1F UkFOR0U7CisJCQl9CisJCQlpbmZvLT5uYXQgfD0gT1ZTX0NUX05BVDsKKwkJCWluZm8tPm5hdCB8 PSAoKHR5cGUgPT0gT1ZTX05BVF9BVFRSX1NSQykKKwkJCQkJPyBPVlNfQ1RfU1JDX05BVCA6IE9W U19DVF9EU1RfTkFUKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT1ZTX05BVF9BVFRSX0lQX01JTjoK KwkJCW5sYV9tZW1jcHkoJmluZm8tPnJhbmdlLm1pbl9hZGRyLCBhLCBubGFfbGVuKGEpKTsKKwkJ CWluZm8tPnJhbmdlLmZsYWdzIHw9IE5GX05BVF9SQU5HRV9NQVBfSVBTOworCQkJYnJlYWs7CisK KwkJY2FzZSBPVlNfTkFUX0FUVFJfSVBfTUFYOgorCQkJaGF2ZV9pcF9tYXggPSB0cnVlOworCQkJ bmxhX21lbWNweSgmaW5mby0+cmFuZ2UubWF4X2FkZHIsIGEsCisJCQkJICAgc2l6ZW9mKGluZm8t PnJhbmdlLm1heF9hZGRyKSk7CisJCQlpbmZvLT5yYW5nZS5mbGFncyB8PSBORl9OQVRfUkFOR0Vf TUFQX0lQUzsKKwkJCWJyZWFrOworCisJCWNhc2UgT1ZTX05BVF9BVFRSX1BST1RPX01JTjoKKwkJ CWluZm8tPnJhbmdlLm1pbl9wcm90by5hbGwgPSBodG9ucyhubGFfZ2V0X3UxNihhKSk7CisJCQlp bmZvLT5yYW5nZS5mbGFncyB8PSBORl9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEOworCQkJYnJl YWs7CisKKwkJY2FzZSBPVlNfTkFUX0FUVFJfUFJPVE9fTUFYOgorCQkJaGF2ZV9wcm90b19tYXgg PSB0cnVlOworCQkJaW5mby0+cmFuZ2UubWF4X3Byb3RvLmFsbCA9IGh0b25zKG5sYV9nZXRfdTE2 KGEpKTsKKwkJCWluZm8tPnJhbmdlLmZsYWdzIHw9IE5GX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJ RUQ7CisJCQlicmVhazsKKworCQljYXNlIE9WU19OQVRfQVRUUl9QRVJTSVNURU5UOgorCQkJaW5m by0+cmFuZ2UuZmxhZ3MgfD0gTkZfTkFUX1JBTkdFX1BFUlNJU1RFTlQ7CisJCQlicmVhazsKKwor CQljYXNlIE9WU19OQVRfQVRUUl9QUk9UT19IQVNIOgorCQkJaW5mby0+cmFuZ2UuZmxhZ3MgfD0g TkZfTkFUX1JBTkdFX1BST1RPX1JBTkRPTTsKKwkJCWJyZWFrOworCisJCWNhc2UgT1ZTX05BVF9B VFRSX1BST1RPX1JBTkRPTToKKwkJCWluZm8tPnJhbmdlLmZsYWdzIHw9IE5GX05BVF9SQU5HRV9Q Uk9UT19SQU5ET01fRlVMTFk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJT1ZTX05MRVJS KGxvZywgIlVua25vd24gbmF0IGF0dHJpYnV0ZSAoJWQpLlxuIiwgdHlwZSk7CisJCQlyZXR1cm4g LUVJTlZBTDsKKwkJfQorCX0KKworCWlmIChyZW0gPiAwKSB7CisJCU9WU19OTEVSUihsb2csICJO QVQgYXR0cmlidXRlIGhhcyAlZCB1bmtub3duIGJ5dGVzLlxuIiwgcmVtKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCWlmICghaW5mby0+bmF0KSB7CisJCS8qIERvIG5vdCBhbGxvdyBmbGFncyBp ZiBubyB0eXBlIGlzIGdpdmVuLiAqLworCQlpZiAoaW5mby0+cmFuZ2UuZmxhZ3MpIHsKKwkJCU9W U19OTEVSUihsb2csICJOQVQgZmxhZ3MgbWF5IGJlIGdpdmVuIG9ubHkgd2hlbiBOQVQgIgorCQkJ CSAgInJhbmdlIChTUkMgb3IgRFNUKSBpcyBhbHNvIHNwZWNpZmllZC5cbiIpOworCQkJcmV0dXJu IC1FSU5WQUw7CisJCX0KKwkJaW5mby0+bmF0ID0gT1ZTX0NUX05BVDsgICAvKiBOQVQgZXhpc3Rp bmcgY29ubmVjdGlvbnMuICovCisJfSBlbHNlIGlmICghaW5mby0+Y29tbWl0KSB7CisJCU9WU19O TEVSUihsb2csICJOQVQgYXR0cmlidXRlcyBtYXkgYmUgc3BlY2lmaWVkIG9ubHkgIgorCQkJICAi d2hlbiBDVCBDT01NSVQgZmxhZyBpcyBhbHNvIHNwZWNpZmllZC5cbiIpOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisJLyogQWxsb3cgbWlzc2luZyBJUF9NQVguICovCisJaWYgKGluZm8tPnJhbmdl LmZsYWdzICYgTkZfTkFUX1JBTkdFX01BUF9JUFMgJiYgIWhhdmVfaXBfbWF4KSB7CisJCW1lbWNw eSgmaW5mby0+cmFuZ2UubWF4X2FkZHIsICZpbmZvLT5yYW5nZS5taW5fYWRkciwKKwkJICAgICAg IHNpemVvZihpbmZvLT5yYW5nZS5tYXhfYWRkcikpOworCX0KKwkvKiBBbGxvdyBtaXNzaW5nIFBS T1RPX01BWC4gKi8KKwlpZiAoaW5mby0+cmFuZ2UuZmxhZ3MgJiBORl9OQVRfUkFOR0VfUFJPVE9f U1BFQ0lGSUVECisJICAgICYmICFoYXZlX3Byb3RvX21heCkgeworCQlpbmZvLT5yYW5nZS5tYXhf cHJvdG8uYWxsID0gaW5mby0+cmFuZ2UubWluX3Byb3RvLmFsbDsKKwl9CisJcmV0dXJuIDA7Cit9 CisjZW5kaWYKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBvdnNfY3RfbGVuX3RibCBvdnNfY3RfYXR0 cl9sZW5zW09WU19DVF9BVFRSX01BWCArIDFdID0gewogCVtPVlNfQ1RfQVRUUl9DT01NSVRdCT0g eyAubWlubGVuID0gMCwgLm1heGxlbiA9IDAgfSwKIAlbT1ZTX0NUX0FUVFJfWk9ORV0JPSB7IC5t aW5sZW4gPSBzaXplb2YodTE2KSwKQEAgLTY0Niw3ICsxMDM3LDExIEBAIHN0YXRpYyBjb25zdCBz dHJ1Y3Qgb3ZzX2N0X2xlbl90Ymwgb3ZzX2N0X2F0dHJfbGVuc1tPVlNfQ1RfQVRUUl9NQVggKyAx XSA9IHsKIAlbT1ZTX0NUX0FUVFJfTEFCRUxTXQk9IHsgLm1pbmxlbiA9IHNpemVvZihzdHJ1Y3Qg bWRfbGFiZWxzKSwKIAkJCQkgICAgLm1heGxlbiA9IHNpemVvZihzdHJ1Y3QgbWRfbGFiZWxzKSB9 LAogCVtPVlNfQ1RfQVRUUl9IRUxQRVJdCT0geyAubWlubGVuID0gMSwKLQkJCQkgICAgLm1heGxl biA9IE5GX0NUX0hFTFBFUl9OQU1FX0xFTiB9CisJCQkJICAgIC5tYXhsZW4gPSBORl9DVF9IRUxQ RVJfTkFNRV9MRU4gfSwKKyNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAorCS8qIE5BVCBsZW5n dGggaXMgY2hlY2tlZCB3aGVuIHBhcnNpbmcgdGhlIG5lc3RlZCBhdHRyaWJ1dGVzLiAqLworCVtP VlNfQ1RfQVRUUl9OQVRdCT0geyAubWlubGVuID0gMCwgLm1heGxlbiA9IFNJWkVfTUFYIH0sCisj ZW5kaWYKIH07CiAKIHN0YXRpYyBpbnQgcGFyc2VfY3QoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0 ciwgc3RydWN0IG92c19jb25udHJhY2tfaW5mbyAqaW5mbywKQEAgLTY1Nyw4ICsxMDUyLDggQEAg c3RhdGljIGludCBwYXJzZV9jdChjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCBzdHJ1Y3Qgb3Zz X2Nvbm50cmFja19pbmZvICppbmZvLAogCiAJbmxhX2Zvcl9lYWNoX25lc3RlZChhLCBhdHRyLCBy ZW0pIHsKIAkJaW50IHR5cGUgPSBubGFfdHlwZShhKTsKLQkJaW50IG1heGxlbiA9IG92c19jdF9h dHRyX2xlbnNbdHlwZV0ubWF4bGVuOwotCQlpbnQgbWlubGVuID0gb3ZzX2N0X2F0dHJfbGVuc1t0 eXBlXS5taW5sZW47CisJCXNpemVfdCBtYXhsZW4gPSBvdnNfY3RfYXR0cl9sZW5zW3R5cGVdLm1h eGxlbjsKKwkJc2l6ZV90IG1pbmxlbiA9IG92c19jdF9hdHRyX2xlbnNbdHlwZV0ubWlubGVuOwog CiAJCWlmICh0eXBlID4gT1ZTX0NUX0FUVFJfTUFYKSB7CiAJCQlPVlNfTkxFUlIobG9nLApAQCAt NjY4LDcgKzEwNjMsNyBAQCBzdGF0aWMgaW50IHBhcnNlX2N0KGNvbnN0IHN0cnVjdCBubGF0dHIg KmF0dHIsIHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8sCiAJCX0KIAkJaWYgKG5sYV9s ZW4oYSkgPCBtaW5sZW4gfHwgbmxhX2xlbihhKSA+IG1heGxlbikgewogCQkJT1ZTX05MRVJSKGxv ZywKLQkJCQkgICJDb25udHJhY2sgYXR0ciB0eXBlIGhhcyB1bmV4cGVjdGVkIGxlbmd0aCAodHlw ZT0lZCwgbGVuZ3RoPSVkLCBleHBlY3RlZD0lZCkiLAorCQkJCSAgIkNvbm50cmFjayBhdHRyIHR5 cGUgaGFzIHVuZXhwZWN0ZWQgbGVuZ3RoICh0eXBlPSVkLCBsZW5ndGg9JWQsIGV4cGVjdGVkPSVs dSkiLAogCQkJCSAgdHlwZSwgbmxhX2xlbihhKSwgbWF4bGVuKTsKIAkJCXJldHVybiAtRUlOVkFM OwogCQl9CkBAIC03MTMsNiArMTEwOCwxNCBAQCBzdGF0aWMgaW50IHBhcnNlX2N0KGNvbnN0IHN0 cnVjdCBubGF0dHIgKmF0dHIsIHN0cnVjdCBvdnNfY29ubnRyYWNrX2luZm8gKmluZm8sCiAJCQkJ cmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfTkZfTkFUX05F RURFRAorCQljYXNlIE9WU19DVF9BVFRSX05BVDogeworCQkJaW50IGVyciA9IHBhcnNlX25hdChh LCBpbmZvLCBsb2cpOworCQkJaWYgKGVycikKKwkJCQlyZXR1cm4gZXJyOworCQkJYnJlYWs7CisJ CX0KKyNlbmRpZgogCQlkZWZhdWx0OgogCQkJT1ZTX05MRVJSKGxvZywgIlVua25vd24gY29ubnRy YWNrIGF0dHIgKCVkKSIsCiAJCQkJICB0eXBlKTsKQEAgLTc5OCw2ICsxMjAxLDcwIEBAIGVycl9m cmVlX2N0OgogCXJldHVybiBlcnI7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAor c3RhdGljIGJvb2wgb3ZzX2N0X25hdF90b19hdHRyKGNvbnN0IHN0cnVjdCBvdnNfY29ubnRyYWNr X2luZm8gKmluZm8sCisJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qg bmxhdHRyICpzdGFydDsKKworCXN0YXJ0ID0gbmxhX25lc3Rfc3RhcnQoc2tiLCBPVlNfQ1RfQVRU Ul9OQVQpOworCWlmICghc3RhcnQpCisJCXJldHVybiBmYWxzZTsKKworCWlmIChpbmZvLT5uYXQg JiBPVlNfQ1RfU1JDX05BVCkgeworCQlpZiAobmxhX3B1dF9mbGFnKHNrYiwgT1ZTX05BVF9BVFRS X1NSQykpCisJCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIGlmIChpbmZvLT5uYXQgJiBPVlNfQ1Rf RFNUX05BVCkgeworCQlpZiAobmxhX3B1dF9mbGFnKHNrYiwgT1ZTX05BVF9BVFRSX0RTVCkpCisJ CQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGluZm8t PnJhbmdlLmZsYWdzICYgTkZfTkFUX1JBTkdFX01BUF9JUFMpIHsKKwkJaWYgKGluZm8tPmZhbWls eSA9PSBORlBST1RPX0lQVjQpIHsKKwkJCWlmIChubGFfcHV0X2luX2FkZHIoc2tiLCBPVlNfTkFU X0FUVFJfSVBfTUlOLAorCQkJCQlpbmZvLT5yYW5nZS5taW5fYWRkci5pcCkgfHwKKwkJCSAgICAo aW5mby0+cmFuZ2UubWF4X2FkZHIuaXAgIT0gaW5mby0+cmFuZ2UubWluX2FkZHIuaXAKKwkJCSAg ICAgJiYgKG5sYV9wdXRfaW5fYWRkcihza2IsIE9WU19OQVRfQVRUUl9JUF9NQVgsCisJCQkJCQkg aW5mby0+cmFuZ2UubWF4X2FkZHIuaXApKSkpCisJCQkJcmV0dXJuIGZhbHNlOworCQl9IGVsc2Ug aWYgKGluZm8tPmZhbWlseSA9PSBORlBST1RPX0lQVjYpIHsKKwkJCWlmIChubGFfcHV0X2luNl9h ZGRyKHNrYiwgT1ZTX05BVF9BVFRSX0lQX01JTiwKKwkJCQkJICAgICAmaW5mby0+cmFuZ2UubWlu X2FkZHIuaW42KSB8fAorCQkJICAgIChtZW1jbXAoJmluZm8tPnJhbmdlLm1heF9hZGRyLmluNiwK KwkJCQkgICAgJmluZm8tPnJhbmdlLm1pbl9hZGRyLmluNiwKKwkJCQkgICAgc2l6ZW9mIGluZm8t PnJhbmdlLm1heF9hZGRyLmluNikKKwkJCSAgICAgJiYgKG5sYV9wdXRfaW42X2FkZHIoc2tiLCBP VlNfTkFUX0FUVFJfSVBfTUFYLAorCQkJCQkJICAmaW5mby0+cmFuZ2UubWF4X2FkZHIuaW42KSkp KQorCQkJCXJldHVybiBmYWxzZTsKKwkJfSBlbHNlCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCWlm IChpbmZvLT5yYW5nZS5mbGFncyAmIE5GX05BVF9SQU5HRV9QUk9UT19TUEVDSUZJRUQgJiYKKwkg ICAgKG5sYV9wdXRfdTE2KHNrYiwgT1ZTX05BVF9BVFRSX1BST1RPX01JTiwKKwkJCSBudG9ocyhp bmZvLT5yYW5nZS5taW5fcHJvdG8uYWxsKSkKKwkgICAgIHx8IChpbmZvLT5yYW5nZS5tYXhfcHJv dG8uYWxsICE9IGluZm8tPnJhbmdlLm1pbl9wcm90by5hbGwKKwkJICYmIG5sYV9wdXRfdTE2KHNr YiwgT1ZTX05BVF9BVFRSX1BST1RPX01BWCwKKwkJCQludG9ocyhpbmZvLT5yYW5nZS5tYXhfcHJv dG8uYWxsKSkpKSkKKwkJcmV0dXJuIGZhbHNlOworCisJaWYgKGluZm8tPnJhbmdlLmZsYWdzICYg TkZfTkFUX1JBTkdFX1BFUlNJU1RFTlQgJiYKKwkgICAgbmxhX3B1dF9mbGFnKHNrYiwgT1ZTX05B VF9BVFRSX1BFUlNJU1RFTlQpKQorCQlyZXR1cm4gZmFsc2U7CisJaWYgKGluZm8tPnJhbmdlLmZs YWdzICYgTkZfTkFUX1JBTkdFX1BST1RPX1JBTkRPTSAmJgorCSAgICBubGFfcHV0X2ZsYWcoc2ti LCBPVlNfTkFUX0FUVFJfUFJPVE9fSEFTSCkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoaW5mby0+ cmFuZ2UuZmxhZ3MgJiBORl9OQVRfUkFOR0VfUFJPVE9fUkFORE9NX0ZVTExZICYmCisJICAgIG5s YV9wdXRfZmxhZyhza2IsIE9WU19OQVRfQVRUUl9QUk9UT19SQU5ET00pKQorCQlyZXR1cm4gZmFs c2U7CitvdXQ6CisJbmxhX25lc3RfZW5kKHNrYiwgc3RhcnQpOworCisJcmV0dXJuIHRydWU7Cit9 CisjZW5kaWYKKwogaW50IG92c19jdF9hY3Rpb25fdG9fYXR0cihjb25zdCBzdHJ1Y3Qgb3ZzX2Nv bm50cmFja19pbmZvICpjdF9pbmZvLAogCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAt ODI2LDcgKzEyOTMsMTAgQEAgaW50IG92c19jdF9hY3Rpb25fdG9fYXR0cihjb25zdCBzdHJ1Y3Qg b3ZzX2Nvbm50cmFja19pbmZvICpjdF9pbmZvLAogCQkJCSAgIGN0X2luZm8tPmhlbHBlci0+bmFt ZSkpCiAJCQlyZXR1cm4gLUVNU0dTSVpFOwogCX0KLQorI2lmZGVmIENPTkZJR19ORl9OQVRfTkVF REVECisJaWYgKGN0X2luZm8tPm5hdCAmJiAhb3ZzX2N0X25hdF90b19hdHRyKGN0X2luZm8sIHNr YikpCisJCXJldHVybiAtRU1TR1NJWkU7CisjZW5kaWYKIAlubGFfbmVzdF9lbmQoc2tiLCBzdGFy dCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2su aCBiL25ldC9vcGVudnN3aXRjaC9jb25udHJhY2suaAppbmRleCBhNzU0NGY0Li44ZjYyMzBiIDEw MDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvY29ubnRyYWNrLmgKKysrIGIvbmV0L29wZW52c3dp dGNoL2Nvbm50cmFjay5oCkBAIC0zNyw3ICszNyw4IEBAIHZvaWQgb3ZzX2N0X2ZyZWVfYWN0aW9u KGNvbnN0IHN0cnVjdCBubGF0dHIgKmEpOwogCiAjZGVmaW5lIENUX1NVUFBPUlRFRF9NQVNLIChP VlNfQ1NfRl9ORVcgfCBPVlNfQ1NfRl9FU1RBQkxJU0hFRCB8IFwKIAkJCSAgIE9WU19DU19GX1JF TEFURUQgfCBPVlNfQ1NfRl9SRVBMWV9ESVIgfCBcCi0JCQkgICBPVlNfQ1NfRl9JTlZBTElEIHwg T1ZTX0NTX0ZfVFJBQ0tFRCkKKwkJCSAgIE9WU19DU19GX0lOVkFMSUQgfCBPVlNfQ1NfRl9UUkFD S0VEIHwgXAorCQkJICAgT1ZTX0NTX0ZfU1JDX05BVCB8IE9WU19DU19GX0RTVF9OQVQpCiAjZWxz ZQogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAKLS0gCjIuMS40CgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkZXYgbWFpbGluZyBsaXN0CmRldkBvcGVu dnN3aXRjaC5vcmcKaHR0cDovL29wZW52c3dpdGNoLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Rldgo=