From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from tyo202.gate.nec.co.jp ([202.32.8.206]) by canuck.infradead.org with esmtp (Exim 4.62 #1 (Red Hat Linux)) id 1Fpc1P-00054M-9H for linux-mtd@lists.infradead.org; Sun, 11 Jun 2006 22:19:52 -0400 Message-ID: <448CCEC8.2080903@ak.jp.nec.com> Date: Mon, 12 Jun 2006 11:17:44 +0900 From: KaiGai Kohei MIME-Version: 1.0 To: David Woodhouse Subject: Re: JFFS2/xattr problems. References: <1148150486.3875.251.camel@pmac.infradead.org> <44704CA9.8010604@ak.jp.nec.com> In-Reply-To: <44704CA9.8010604@ak.jp.nec.com> Content-Type: multipart/mixed; boundary="------------050906050702040100070209" Cc: linux-mtd@lists.infradead.org, KaiGai Kohei List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , This is a multi-part message in MIME format. --------------050906050702040100070209 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Hi, David. I fixed the problem when xdatum/xref was removed, and so on. [1/2] jffs2-xattr-v6-01-delete_marker.patch [2/2] jffs2-xattr-v6-02-fix_posixacl_bug.patch This correction uses 'delete marker' instead of filling an existing node by 0xff. It is written when we remvoe xdatum/xref. Any nodes indicates xdatum/xref includes 'delete marker' are chained with xd->node or ref->node. # In the previous implementation, xd->node and ref->node have # only one node. Then the garbage collector tries to remove those nodes except the latest one. If the latest one is delete marker and any other nodes are not chained this list, the garbage collector remove the delete marker and in-memory object (xattr_datum, xattr_ref). # In previous implementation, deletion of nodes and in-memory objects # are done immediately - A xdatum with 'version' equals 0xffffffff means delete marker. - A xref with odd-numbered 'xseqno' means delete marker. It increases 4-byte additional consumption per xref. :( And the second patch fixes posix-acl bug when we try to replace null-xattr by null-acl. Those have been commited into jffs2-xattr-2.6.git. Thanks, KaiGai Kohei wrote: > Hello, David. > > David Woodhouse wrote: >> I created a user xattr on JFFS2, then attempted to remove it. On NAND >> flash I get the following BUG(): >> >> jffs2_flash_writev(): Non-contiguous write to 004ca000 >> wbuf was previously 004ca000-004ca040 >> ------------[ cut here ]------------ >> kernel BUG at /root/jffs2/wbuf.c:672! >> >> Call Trace: >> [] jffs2_flash_writev+0x616/0x6ac [jffs2] >> [] nand_read_ecc+0x29/0x2f [nand] [] nand_read_ecc+0x29/0x2f [nand] >> [] jffs2_flash_read+0x8a/0x22b [jffs2] [] jffs2_flash_write+0x48/0x51 [jffs2] >> [] delete_xattr_datum_node+0xcc/0x144 [jffs2] [] delete_xattr_datum+0x2c/0x3c [jffs2] >> [] delete_xattr_ref+0x32/0x3b [jffs2] [] do_jffs2_setxattr+0x1a9/0x5aa [jffs2] >> [] _atomic_dec_and_lock+0x22/0x2c [] jffs2_user_setxattr+0x3c/0x47 [jffs2] >> [] generic_removexattr+0x37/0x3d [] vfs_removexattr+0x78/0xc8 >> >> What is delete_xattr_datum_node() trying to do? It seems to be writing >> for a second time to an area of flash which has _already_ been written. >> You can't do that. > > delete_xattr_datum_node() try to write invalid data to ensure the target > node was already deleted. I was worried about that a xdatum already removed > may be reused as a effective xdatum on next mounting. > But it's purely design problem that should be changed. > > Alternatively, I plan to write a delete marker on new node allocated by > jffs2_reserve_space() when xdatum is removed. > I intend to be dealt with a xdatum with 0xffffffff of version number > as a delete marker for xdatum. This node will be ignored on next mounting. > > There is a same issue on deletion of xattr_ref, I also plan to implement > with same method. > > Some days will be necessary to change it. > Would you wait for a while? > >> Also, just 'cp -av /lib/libc.so.6 /mnt/jffs2' is failing to set the >> POSIX ACL, with -EINVAL. This happens because posix_acl_equiv_mode() >> returns zero, because the ACL is entirely equivalent to normal modes. So >> the 'value' passed to do_jffs2_setxattr() is NULL, which should _delete_ >> the corresponding xattr. >> >> But because the xattr is not found, the code returns -EINVAL. Shouldn't >> that error be -ENOATTR? And shouldn't the ACL code then convert it to a >> more appropriate return value? > > I agree, I'll fix it. > > Thanks, -- Open Source Software Promotion Center, NEC KaiGai Kohei --------------050906050702040100070209 Content-Type: text/plain; name="jffs2-xattr-v6-01-delete_marker.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="jffs2-xattr-v6-01-delete_marker.patch" ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamZmczIuaCBiL2luY2x1ZGUvbGludXgvamZm czIuaAppbmRleCBjNmY3MDY2Li5jOWM3NjA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4 L2pmZnMyLmgKKysrIGIvaW5jbHVkZS9saW51eC9qZmZzMi5oCkBAIC0xODYsNiArMTg2LDcg QEAgc3RydWN0IGpmZnMyX3Jhd194cmVmCiAJamludDMyX3QgaGRyX2NyYzsKIAlqaW50MzJf dCBpbm87CQkvKiBpbm9kZSBudW1iZXIgKi8KIAlqaW50MzJfdCB4aWQ7CQkvKiBYQVRUUiBp ZGVudGlmaWVyIG51bWJlciAqLworCWppbnQzMl90IHhzZXFubzsJLyogeHJlZiBzZXF1ZW5j aWFsIG51bWJlciAqLwogCWppbnQzMl90IG5vZGVfY3JjOwogfSBfX2F0dHJpYnV0ZV9fKChw YWNrZWQpKTsKIApkaWZmIC0tZ2l0IGEvZnMvamZmczIvYWNsLmMgYi9mcy9qZmZzMi9hY2wu YwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvZXJhc2UuYyBiL2ZzL2pmZnMyL2VyYXNlLmMKaW5k ZXggMTg2MmU4Yi4uMTY0NGUzNCAxMDA2NDQKLS0tIGEvZnMvamZmczIvZXJhc2UuYworKysg Yi9mcy9qZmZzMi9lcmFzZS5jCkBAIC0yMzAsNyArMjMwLDYgQEAgc3RhdGljIGlubGluZSB2 b2lkIGpmZnMyX3JlbW92ZV9ub2RlX3JlZgogCQkJICAgYXQgdGhlIGVuZCBvZiB0aGUgbGlu a2VkIGxpc3QuIFN0YXNoIGl0IGFuZCBjb250aW51ZQogCQkJICAgZnJvbSB0aGUgYmVnaW5u aW5nIG9mIHRoZSBsaXN0ICovCiAJCQlpYyA9IChzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUg KikoKnByZXYpOwotCQkJQlVHX09OKGljLT5jbGFzcyAhPSBSQVdOT0RFX0NMQVNTX0lOT0RF X0NBQ0hFKTsKIAkJCXByZXYgPSAmaWMtPm5vZGVzOwogCQkJY29udGludWU7CiAJCX0KQEAg LTI1NCw3ICsyNTMsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgamZmczJfcmVtb3ZlX25vZGVf cmVmCiAKIAkvKiBQQVJBTk9JQSAqLwogCWlmICghaWMpIHsKLQkJcHJpbnRrKEtFUk5fV0FS TklORyAiaW5vZGVfY2FjaGUgbm90IGZvdW5kIGluIHJlbW92ZV9ub2RlX3JlZnMoKSEhXG4i KTsKKwkJSkZGUzJfV0FSTklORygiaW5vZGVfY2FjaGUveGF0dHJfZGF0dW0veGF0dHJfcmVm IgorCQkJICAgICAgIiBub3QgZm91bmQgaW4gcmVtb3ZlX25vZGVfcmVmcygpISFcbiIpOwog CQlyZXR1cm47CiAJfQogCkBAIC0yNzksOCArMjc5LDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9p ZCBqZmZzMl9yZW1vdmVfbm9kZV9yZWYKIAkJcHJpbnRrKCJcbiIpOwogCX0pOwogCi0JaWYg KGljLT5ub2RlcyA9PSAodm9pZCAqKWljICYmIGljLT5ubGluayA9PSAwKQotCQlqZmZzMl9k ZWxfaW5vX2NhY2hlKGMsIGljKTsKKwlzd2l0Y2ggKGljLT5jbGFzcykgeworI2lmZGVmIENP TkZJR19KRkZTMl9GU19YQVRUUgorCQljYXNlIFJBV05PREVfQ0xBU1NfWEFUVFJfREFUVU06 CisJCQlqZmZzMl9yZWxlYXNlX3hhdHRyX2RhdHVtKGMsIChzdHJ1Y3QgamZmczJfeGF0dHJf ZGF0dW0gKilpYyk7CisJCQlicmVhazsKKwkJY2FzZSBSQVdOT0RFX0NMQVNTX1hBVFRSX1JF RjoKKwkJCWpmZnMyX3JlbGVhc2VfeGF0dHJfcmVmKGMsIChzdHJ1Y3QgamZmczJfeGF0dHJf cmVmICopaWMpOworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCWlmIChpYy0+ bm9kZXMgPT0gKHZvaWQgKilpYyAmJiBpYy0+bmxpbmsgPT0gMCkKKwkJCQlqZmZzMl9kZWxf aW5vX2NhY2hlKGMsIGljKTsKKwl9CiB9CiAKIHZvaWQgamZmczJfZnJlZV9qZWJfbm9kZV9y ZWZzKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAq amViKQpkaWZmIC0tZ2l0IGEvZnMvamZmczIvZ2MuYyBiL2ZzL2pmZnMyL2djLmMKaW5kZXgg NDc3YzUyNi4uZjU5YjE0NyAxMDA2NDQKLS0tIGEvZnMvamZmczIvZ2MuYworKysgYi9mcy9q ZmZzMi9nYy5jCkBAIC0yNzUsMTMgKzI3NSwxMiBAQCAjaWZkZWYgQ09ORklHX0pGRlMyX0ZT X1hBVFRSCiAJICogV2UgY2FuIGRlY2lkZSB3aGV0aGVyIHRoaXMgbm9kZSBpcyBpbm9kZSBv ciB4YXR0ciBieSBpYy0+Y2xhc3MuICAgICAqLwogCWlmIChpYy0+Y2xhc3MgPT0gUkFXTk9E RV9DTEFTU19YQVRUUl9EQVRVTQogCSAgICB8fCBpYy0+Y2xhc3MgPT0gUkFXTk9ERV9DTEFT U19YQVRUUl9SRUYpIHsKLQkJQlVHX09OKHJhdy0+bmV4dF9pbl9pbm8gIT0gKHZvaWQgKilp Yyk7CiAJCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwogCiAJCWlm IChpYy0+Y2xhc3MgPT0gUkFXTk9ERV9DTEFTU19YQVRUUl9EQVRVTSkgewotCQkJcmV0ID0g amZmczJfZ2FyYmFnZV9jb2xsZWN0X3hhdHRyX2RhdHVtKGMsIChzdHJ1Y3QgamZmczJfeGF0 dHJfZGF0dW0gKilpYyk7CisJCQlyZXQgPSBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfeGF0dHJf ZGF0dW0oYywgKHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqKWljLCByYXcpOwogCQl9IGVs c2UgewotCQkJcmV0ID0gamZmczJfZ2FyYmFnZV9jb2xsZWN0X3hhdHRyX3JlZihjLCAoc3Ry dWN0IGpmZnMyX3hhdHRyX3JlZiAqKWljKTsKKwkJCXJldCA9IGpmZnMyX2dhcmJhZ2VfY29s bGVjdF94YXR0cl9yZWYoYywgKHN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKilpYywgcmF3KTsK IAkJfQogCQlnb3RvIHJlbGVhc2Vfc2VtOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2pm ZnMyX2ZzX3NiLmggYi9mcy9qZmZzMi9qZmZzMl9mc19zYi5oCmluZGV4IDkzNWZlYzEuLmI5 ODU5NDkgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2pmZnMyX2ZzX3NiLmgKKysrIGIvZnMvamZm czIvamZmczJfZnNfc2IuaApAQCAtMTE5LDggKzExOSwxMSBAQCAjZW5kaWYKICNpZmRlZiBD T05GSUdfSkZGUzJfRlNfWEFUVFIKICNkZWZpbmUgWEFUVFJJTkRFWF9IQVNIU0laRQkoNTcp CiAJdWludDMyX3QgaGlnaGVzdF94aWQ7CisJdWludDMyX3QgaGlnaGVzdF94c2Vxbm87CiAJ c3RydWN0IGxpc3RfaGVhZCB4YXR0cmluZGV4W1hBVFRSSU5ERVhfSEFTSFNJWkVdOwogCXN0 cnVjdCBsaXN0X2hlYWQgeGF0dHJfdW5jaGVja2VkOworCXN0cnVjdCBsaXN0X2hlYWQgeGF0 dHJfZGVhZF9saXN0OworCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnhyZWZfZGVhZF9saXN0 OwogCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnhyZWZfdGVtcDsKIAlzdHJ1Y3Qgcndfc2Vt YXBob3JlIHhhdHRyX3NlbTsKIAl1aW50MzJfdCB4ZGF0dW1fbWVtX3VzYWdlOwpkaWZmIC0t Z2l0IGEvZnMvamZmczIvbWFsbG9jLmMgYi9mcy9qZmZzMi9tYWxsb2MuYwppbmRleCA0ODg5 ZDA3Li44MzEwYzk1IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9tYWxsb2MuYworKysgYi9mcy9q ZmZzMi9tYWxsb2MuYwpAQCAtMjkxLDYgKzI5MSw3IEBAIHN0cnVjdCBqZmZzMl94YXR0cl9k YXR1bSAqamZmczJfYWxsb2NfeGEKIAogCW1lbXNldCh4ZCwgMCwgc2l6ZW9mKHN0cnVjdCBq ZmZzMl94YXR0cl9kYXR1bSkpOwogCXhkLT5jbGFzcyA9IFJBV05PREVfQ0xBU1NfWEFUVFJf REFUVU07CisJeGQtPm5vZGUgPSAodm9pZCAqKXhkOwogCUlOSVRfTElTVF9IRUFEKCZ4ZC0+ eGluZGV4KTsKIAlyZXR1cm4geGQ7CiB9CkBAIC0zMDksNiArMzEwLDcgQEAgc3RydWN0IGpm ZnMyX3hhdHRyX3JlZiAqamZmczJfYWxsb2NfeGF0dAogCiAJbWVtc2V0KHJlZiwgMCwgc2l6 ZW9mKHN0cnVjdCBqZmZzMl94YXR0cl9yZWYpKTsKIAlyZWYtPmNsYXNzID0gUkFXTk9ERV9D TEFTU19YQVRUUl9SRUY7CisJcmVmLT5ub2RlID0gKHZvaWQgKilyZWY7CiAJcmV0dXJuIHJl ZjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvamZmczIvbm9kZW1nbXQuYyBiL2ZzL2pmZnMyL25v ZGVtZ210LmMKaW5kZXggNzFkMTYzMC4uZDgyMmJlYSAxMDA2NDQKLS0tIGEvZnMvamZmczIv bm9kZW1nbXQuYworKysgYi9mcy9qZmZzMi9ub2RlbWdtdC5jCkBAIC02NjYsMTkgKzY2Niwy NiBAQCB2b2lkIGpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZShzdHJ1Y3QgamZmCiAJCXNwaW5f bG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKIAogCQlpYyA9IGpmZnMyX3Jhd19y ZWZfdG9faWMocmVmKTsKLQkJLyogSXQgc2VlbXMgd2Ugc2hvdWxkIG5ldmVyIGNhbGwgamZm czJfbWFya19ub2RlX29ic29sZXRlKCkgZm9yCi0JCSAgIFhBVFRSIG5vZGVzLi4uLiB5ZXQu IE1ha2Ugc3VyZSB3ZSBub3RpY2UgaWYvd2hlbiB3ZSBjaGFuZ2UKLQkJICAgdGhhdCA6KSAq LwotCQlCVUdfT04oaWMtPmNsYXNzICE9IFJBV05PREVfQ0xBU1NfSU5PREVfQ0FDSEUpOwog CQlmb3IgKHAgPSAmaWMtPm5vZGVzOyAoKnApICE9IHJlZjsgcCA9ICYoKCpwKS0+bmV4dF9p bl9pbm8pKQogCQkJOwogCiAJCSpwID0gcmVmLT5uZXh0X2luX2lubzsKIAkJcmVmLT5uZXh0 X2luX2lubyA9IE5VTEw7CiAKLQkJaWYgKGljLT5ub2RlcyA9PSAodm9pZCAqKWljICYmIGlj LT5ubGluayA9PSAwKQotCQkJamZmczJfZGVsX2lub19jYWNoZShjLCBpYyk7Ci0KKwkJc3dp dGNoIChpYy0+Y2xhc3MpIHsKKyNpZmRlZiBDT05GSUdfSkZGUzJfRlNfWEFUVFIKKwkJCWNh c2UgUkFXTk9ERV9DTEFTU19YQVRUUl9EQVRVTToKKwkJCQlqZmZzMl9yZWxlYXNlX3hhdHRy X2RhdHVtKGMsIChzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKilpYyk7CisJCQkJYnJlYWs7 CisJCQljYXNlIFJBV05PREVfQ0xBU1NfWEFUVFJfUkVGOgorCQkJCWpmZnMyX3JlbGVhc2Vf eGF0dHJfcmVmKGMsIChzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICopaWMpOworCQkJCWJyZWFr OworI2VuZGlmCisJCQlkZWZhdWx0OgorCQkJCWlmIChpYy0+bm9kZXMgPT0gKHZvaWQgKilp YyAmJiBpYy0+bmxpbmsgPT0gMCkKKwkJCQkJamZmczJfZGVsX2lub19jYWNoZShjLCBpYyk7 CisJCQkJYnJlYWs7CisJCX0KIAkJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25f bG9jayk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9zY2FuLmMgYi9mcy9qZmZzMi9z Y2FuLmMKaW5kZXggNjE2MTgwOC4uNzk2MzhmNSAxMDA2NDQKLS0tIGEvZnMvamZmczIvc2Nh bi5jCisrKyBiL2ZzL2pmZnMyL3NjYW4uYwpAQCAtMzE3LDIwICszMTcsMjUgQEAgc3RhdGlj IGludCBqZmZzMl9zY2FuX3hhdHRyX25vZGUoc3RydWN0IAogCQkJCSBzdHJ1Y3QgamZmczJf c3VtbWFyeSAqcykKIHsKIAlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkOwotCXVpbnQz Ml90IHRvdGxlbiwgY3JjOworCXVpbnQzMl90IHhpZCwgdmVyc2lvbiwgdG90bGVuLCBjcmM7 CiAJaW50IGVycjsKIAogCWNyYyA9IGNyYzMyKDAsIHJ4LCBzaXplb2Yoc3RydWN0IGpmZnMy X3Jhd194YXR0cikgLSA0KTsKIAlpZiAoY3JjICE9IGplMzJfdG9fY3B1KHJ4LT5ub2RlX2Ny YykpIHsKLQkJaWYgKGplMzJfdG9fY3B1KHJ4LT5ub2RlX2NyYykgIT0gMHhmZmZmZmZmZikK LQkJCUpGRlMyX1dBUk5JTkcoIm5vZGUgQ1JDIGZhaWxlZCBhdCAlIzA4eCwgcmVhZD0lIzA4 eCwgY2FsYz0lIzA4eFxuIiwKLQkJCQkgICAgICBvZnMsIGplMzJfdG9fY3B1KHJ4LT5ub2Rl X2NyYyksIGNyYyk7CisJCUpGRlMyX1dBUk5JTkcoIm5vZGUgQ1JDIGZhaWxlZCBhdCAlIzA4 eCwgcmVhZD0lIzA4eCwgY2FsYz0lIzA4eFxuIiwKKwkJCSAgICAgIG9mcywgamUzMl90b19j cHUocngtPm5vZGVfY3JjKSwgY3JjKTsKIAkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5 X3NwYWNlKGMsIGplYiwgamUzMl90b19jcHUocngtPnRvdGxlbikpKSkKIAkJCXJldHVybiBl cnI7CiAJCXJldHVybiAwOwogCX0KIAotCXRvdGxlbiA9IFBBRChzaXplb2YoKnJ4KSArIHJ4 LT5uYW1lX2xlbiArIDEgKyBqZTE2X3RvX2NwdShyeC0+dmFsdWVfbGVuKSk7CisJeGlkID0g amUzMl90b19jcHUocngtPnhpZCk7CisJdmVyc2lvbiA9IGplMzJfdG9fY3B1KHJ4LT52ZXJz aW9uKTsKKworCXRvdGxlbiA9IHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X3hhdHRyKTsKKwlp ZiAodmVyc2lvbiAhPSBYREFUVU1fREVMRVRFX01BUktFUikKKwkJdG90bGVuICs9IHJ4LT5u YW1lX2xlbiArIDEgKyBqZTE2X3RvX2NwdShyeC0+dmFsdWVfbGVuKTsKKwl0b3RsZW4gPSBQ QUQodG90bGVuKTsKIAlpZiAodG90bGVuICE9IGplMzJfdG9fY3B1KHJ4LT50b3RsZW4pKSB7 CiAJCUpGRlMyX1dBUk5JTkcoIm5vZGUgbGVuZ3RoIG1pc21hdGNoIGF0ICUjMDh4LCByZWFk PSV1LCBjYWxjPSV1XG4iLAogCQkJICAgICAgb2ZzLCBqZTMyX3RvX2NwdShyeC0+dG90bGVu KSwgdG90bGVuKTsKQEAgLTMzOSwyMiArMzQ0LDI0IEBAIHN0YXRpYyBpbnQgamZmczJfc2Nh bl94YXR0cl9ub2RlKHN0cnVjdCAKIAkJcmV0dXJuIDA7CiAJfQogCi0JeGQgPSBqZmZzMl9z ZXR1cF94YXR0cl9kYXR1bShjLCBqZTMyX3RvX2NwdShyeC0+eGlkKSwgamUzMl90b19jcHUo cngtPnZlcnNpb24pKTsKLQlpZiAoSVNfRVJSKHhkKSkgewotCQlpZiAoUFRSX0VSUih4ZCkg PT0gLUVFWElTVCkgewotCQkJaWYgKChlcnIgPSBqZmZzMl9zY2FuX2RpcnR5X3NwYWNlKGMs IGplYiwgUEFEKGplMzJfdG9fY3B1KHJ4LT50b3RsZW4pKSkpKQotCQkJCXJldHVybiBlcnI7 Ci0JCQlyZXR1cm4gMDsKLQkJfQorCXhkID0gamZmczJfc2V0dXBfeGF0dHJfZGF0dW0oYywg eGlkLCB2ZXJzaW9uKTsKKwlpZiAoSVNfRVJSKHhkKSkKIAkJcmV0dXJuIFBUUl9FUlIoeGQp OwotCX0KLQl4ZC0+eHByZWZpeCA9IHJ4LT54cHJlZml4OwotCXhkLT5uYW1lX2xlbiA9IHJ4 LT5uYW1lX2xlbjsKLQl4ZC0+dmFsdWVfbGVuID0gamUxNl90b19jcHUocngtPnZhbHVlX2xl bik7Ci0JeGQtPmRhdGFfY3JjID0gamUzMl90b19jcHUocngtPmRhdGFfY3JjKTsKIAotCXhk LT5ub2RlID0gamZmczJfbGlua19ub2RlX3JlZihjLCBqZWIsIG9mcyB8IFJFRl9QUklTVElO RSwgdG90bGVuLCBOVUxMKTsKLQkvKiBGSVhNRSAqLyB4ZC0+bm9kZS0+bmV4dF9pbl9pbm8g PSAodm9pZCAqKXhkOworCWlmICh4ZC0+dmVyc2lvbiA+IHZlcnNpb24pIHsKKwkJc3RydWN0 IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmF3CisJCQk9IGpmZnMyX2xpbmtfbm9kZV9yZWYoYywg amViLCBvZnMgfCBSRUZfUFJJU1RJTkUsIHRvdGxlbiwgTlVMTCk7CisJCXJhdy0+bmV4dF9p bl9pbm8gPSB4ZC0+bm9kZS0+bmV4dF9pbl9pbm87CisJCXhkLT5ub2RlLT5uZXh0X2luX2lu byA9IHJhdzsKKwl9IGVsc2UgeworCQl4ZC0+dmVyc2lvbiA9IHZlcnNpb247CisJCXhkLT54 cHJlZml4ID0gcngtPnhwcmVmaXg7CisJCXhkLT5uYW1lX2xlbiA9IHJ4LT5uYW1lX2xlbjsK KwkJeGQtPnZhbHVlX2xlbiA9IGplMTZfdG9fY3B1KHJ4LT52YWx1ZV9sZW4pOworCQl4ZC0+ ZGF0YV9jcmMgPSBqZTMyX3RvX2NwdShyeC0+ZGF0YV9jcmMpOworCisJCWpmZnMyX2xpbmtf bm9kZV9yZWYoYywgamViLCBvZnMgfCBSRUZfUFJJU1RJTkUsIHRvdGxlbiwgKHZvaWQgKil4 ZCk7CisJfQogCiAJaWYgKGpmZnMyX3N1bV9hY3RpdmUoKSkKIAkJamZmczJfc3VtX2FkZF94 YXR0cl9tZW0ocywgcngsIG9mcyAtIGplYi0+b2Zmc2V0KTsKQEAgLTM3Myw5ICszODAsOCBA QCBzdGF0aWMgaW50IGpmZnMyX3NjYW5feHJlZl9ub2RlKHN0cnVjdCBqCiAKIAljcmMgPSBj cmMzMigwLCByciwgc2l6ZW9mKCpycikgLSA0KTsKIAlpZiAoY3JjICE9IGplMzJfdG9fY3B1 KHJyLT5ub2RlX2NyYykpIHsKLQkJaWYgKGplMzJfdG9fY3B1KHJyLT5ub2RlX2NyYykgIT0g MHhmZmZmZmZmZikKLQkJCUpGRlMyX1dBUk5JTkcoIm5vZGUgQ1JDIGZhaWxlZCBhdCAlIzA4 eCwgcmVhZD0lIzA4eCwgY2FsYz0lIzA4eFxuIiwKLQkJCQkgICAgICBvZnMsIGplMzJfdG9f Y3B1KHJyLT5ub2RlX2NyYyksIGNyYyk7CisJCUpGRlMyX1dBUk5JTkcoIm5vZGUgQ1JDIGZh aWxlZCBhdCAlIzA4eCwgcmVhZD0lIzA4eCwgY2FsYz0lIzA4eFxuIiwKKwkJCSAgICAgIG9m cywgamUzMl90b19jcHUocnItPm5vZGVfY3JjKSwgY3JjKTsKIAkJaWYgKChlcnIgPSBqZmZz Ml9zY2FuX2RpcnR5X3NwYWNlKGMsIGplYiwgUEFEKGplMzJfdG9fY3B1KHJyLT50b3RsZW4p KSkpKQogCQkJcmV0dXJuIGVycjsKIAkJcmV0dXJuIDA7CkBAIC0zOTUsNiArNDAxLDcgQEAg c3RhdGljIGludCBqZmZzMl9zY2FuX3hyZWZfbm9kZShzdHJ1Y3QgagogCQlyZXR1cm4gLUVO T01FTTsKIAogCS8qIEJFRk9SRSBqZmZzMl9idWlsZF94YXR0cl9zdWJzeXN0ZW0oKSBjYWxs ZWQsIAorCSAqIGFuZCBBRlRFUiB4YXR0cl9yZWYgaXMgbWFya2VkIGFzIGEgZGVhZCB4cmVm LAogCSAqIHJlZi0+eGlkIGlzIHVzZWQgdG8gc3RvcmUgMzJiaXQgeGlkLCB4ZCBpcyBub3Qg dXNlZAogCSAqIHJlZi0+aW5vIGlzIHVzZWQgdG8gc3RvcmUgMzJiaXQgaW5vZGUtbnVtYmVy LCBpYyBpcyBub3QgdXNlZAogCSAqIFRob2VzIHZhcmlhYmxlcyBhcmUgZGVjbGFyZWQgYXMg dW5pb24sIHRodXMgdXNpbmcgdGhvc2UKQEAgLTQwNCwxMSArNDExLDEzIEBAIHN0YXRpYyBp bnQgamZmczJfc2Nhbl94cmVmX25vZGUoc3RydWN0IGoKIAkgKi8KIAlyZWYtPmlubyA9IGpl MzJfdG9fY3B1KHJyLT5pbm8pOwogCXJlZi0+eGlkID0gamUzMl90b19jcHUocnItPnhpZCk7 CisJcmVmLT54c2Vxbm8gPSBqZTMyX3RvX2NwdShyci0+eHNlcW5vKTsKKwlpZiAocmVmLT54 c2Vxbm8gPiBjLT5oaWdoZXN0X3hzZXFubykKKwkJYy0+aGlnaGVzdF94c2Vxbm8gPSAocmVm LT54c2Vxbm8gJiB+WFJFRl9ERUxFVEVfTUFSS0VSKTsKIAlyZWYtPm5leHQgPSBjLT54cmVm X3RlbXA7CiAJYy0+eHJlZl90ZW1wID0gcmVmOwogCi0JcmVmLT5ub2RlID0gamZmczJfbGlu a19ub2RlX3JlZihjLCBqZWIsIG9mcyB8IFJFRl9QUklTVElORSwgUEFEKGplMzJfdG9fY3B1 KHJyLT50b3RsZW4pKSwgTlVMTCk7Ci0JLyogRklYTUUgKi8gcmVmLT5ub2RlLT5uZXh0X2lu X2lubyA9ICh2b2lkICopcmVmOworCWpmZnMyX2xpbmtfbm9kZV9yZWYoYywgamViLCBvZnMg fCBSRUZfUFJJU1RJTkUsIFBBRChqZTMyX3RvX2NwdShyci0+dG90bGVuKSksICh2b2lkICop cmVmKTsKIAogCWlmIChqZmZzMl9zdW1fYWN0aXZlKCkpCiAJCWpmZnMyX3N1bV9hZGRfeHJl Zl9tZW0ocywgcnIsIG9mcyAtIGplYi0+b2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMy L3N1bW1hcnkuYyBiL2ZzL2pmZnMyL3N1bW1hcnkuYwppbmRleCA1MWJmMTY1Li5kNjA3ODRh IDEwMDY0NAotLS0gYS9mcy9qZmZzMi9zdW1tYXJ5LmMKKysrIGIvZnMvamZmczIvc3VtbWFy eS5jCkBAIC0zMTAsOCArMzEwLDYgQEAgaW50IGpmZnMyX3N1bV9hZGRfa3ZlYyhzdHJ1Y3Qg amZmczJfc2JfaQogI2lmZGVmIENPTkZJR19KRkZTMl9GU19YQVRUUgogCQljYXNlIEpGRlMy X05PREVUWVBFX1hBVFRSOiB7CiAJCQlzdHJ1Y3QgamZmczJfc3VtX3hhdHRyX21lbSAqdGVt cDsKLQkJCWlmIChqZTMyX3RvX2NwdShub2RlLT54LnZlcnNpb24pID09IDB4ZmZmZmZmZmYp Ci0JCQkJcmV0dXJuIDA7CiAJCQl0ZW1wID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGpmZnMy X3N1bV94YXR0cl9tZW0pLCBHRlBfS0VSTkVMKTsKIAkJCWlmICghdGVtcCkKIAkJCQlnb3Rv IG5vX21lbTsKQEAgLTMyNywxMCArMzI1LDYgQEAgI2lmZGVmIENPTkZJR19KRkZTMl9GU19Y QVRUUgogCQl9CiAJCWNhc2UgSkZGUzJfTk9ERVRZUEVfWFJFRjogewogCQkJc3RydWN0IGpm ZnMyX3N1bV94cmVmX21lbSAqdGVtcDsKLQotCQkJaWYgKGplMzJfdG9fY3B1KG5vZGUtPnIu aW5vKSA9PSAweGZmZmZmZmZmCi0JCQkgICAgJiYgamUzMl90b19jcHUobm9kZS0+ci54aWQp ID09IDB4ZmZmZmZmZmYpCi0JCQkJcmV0dXJuIDA7CiAJCQl0ZW1wID0ga21hbGxvYyhzaXpl b2Yoc3RydWN0IGpmZnMyX3N1bV94cmVmX21lbSksIEdGUF9LRVJORUwpOwogCQkJaWYgKCF0 ZW1wKQogCQkJCWdvdG8gbm9fbWVtOwpAQCAtNDgzLDIyICs0NzcsMjAgQEAgI2lmZGVmIENP TkZJR19KRkZTMl9GU19YQVRUUgogCiAJCQkJeGQgPSBqZmZzMl9zZXR1cF94YXR0cl9kYXR1 bShjLCBqZTMyX3RvX2NwdShzcHgtPnhpZCksCiAJCQkJCQkJCWplMzJfdG9fY3B1KHNweC0+ dmVyc2lvbikpOwotCQkJCWlmIChJU19FUlIoeGQpKSB7Ci0JCQkJCWlmIChQVFJfRVJSKHhk KSA9PSAtRUVYSVNUKSB7Ci0JCQkJCQkvKiBhIG5ld2VyIHZlcnNpb24gb2YgeGQgZXhpc3Rz ICovCi0JCQkJCQlpZiAoKGVyciA9IGpmZnMyX3NjYW5fZGlydHlfc3BhY2UoYywgamViLCBq ZTMyX3RvX2NwdShzcHgtPnRvdGxlbikpKSkKLQkJCQkJCQlyZXR1cm4gZXJyOwotCQkJCQkJ c3AgKz0gSkZGUzJfU1VNTUFSWV9YQVRUUl9TSVpFOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0K LQkJCQkJSkZGUzJfTk9USUNFKCJhbGxvY2F0aW9uIG9mIHhhdHRyX2RhdHVtIGZhaWxlZFxu Iik7CisJCQkJaWYgKElTX0VSUih4ZCkpCiAJCQkJCXJldHVybiBQVFJfRVJSKHhkKTsKKwkJ CQlpZiAoeGQtPnZlcnNpb24gPiBqZTMyX3RvX2NwdShzcHgtPnZlcnNpb24pKSB7CisJCQkJ CS8qIG5vZGUgaXMgbm90IHRoZSBuZXdlc3Qgb25lICovCisJCQkJCXN0cnVjdCBqZmZzMl9y YXdfbm9kZV9yZWYgKnJhdworCQkJCQkJPSBzdW1fbGlua19ub2RlX3JlZihjLCBqZWIsIGpl MzJfdG9fY3B1KHNweC0+b2Zmc2V0KSB8IFJFRl9VTkNIRUNLRUQsCisJCQkJCQkJCSAgICBQ QUQoamUzMl90b19jcHUoc3B4LT50b3RsZW4pKSwgTlVMTCk7CisJCQkJCXJhdy0+bmV4dF9p bl9pbm8gPSB4ZC0+bm9kZS0+bmV4dF9pbl9pbm87CisJCQkJCXhkLT5ub2RlLT5uZXh0X2lu X2lubyA9IHJhdzsKKwkJCQl9IGVsc2UgeworCQkJCQl4ZC0+dmVyc2lvbiA9IGplMzJfdG9f Y3B1KHNweC0+dmVyc2lvbik7CisJCQkJCXN1bV9saW5rX25vZGVfcmVmKGMsIGplYiwgamUz Ml90b19jcHUoc3B4LT5vZmZzZXQpIHwgUkVGX1VOQ0hFQ0tFRCwKKwkJCQkJCQkgIFBBRChq ZTMyX3RvX2NwdShzcHgtPnRvdGxlbikpLCAodm9pZCAqKXhkKTsKIAkJCQl9Ci0KLQkJCQl4 ZC0+bm9kZSA9IHN1bV9saW5rX25vZGVfcmVmKGMsIGplYiwgamUzMl90b19jcHUoc3B4LT5v ZmZzZXQpIHwgUkVGX1VOQ0hFQ0tFRCwKLQkJCQkJCQkgICAgIFBBRChqZTMyX3RvX2NwdShz cHgtPnRvdGxlbikpLCBOVUxMKTsKLQkJCQkvKiBGSVhNRSAqLyB4ZC0+bm9kZS0+bmV4dF9p bl9pbm8gPSAodm9pZCAqKXhkOwotCiAJCQkJKnBzZXVkb19yYW5kb20gKz0gamUzMl90b19j cHUoc3B4LT54aWQpOwogCQkJCXNwICs9IEpGRlMyX1NVTU1BUllfWEFUVFJfU0laRTsKIApA QCAtNTE5LDE0ICs1MTEsMTEgQEAgI2lmZGVmIENPTkZJR19KRkZTMl9GU19YQVRUUgogCQkJ CQlKRkZTMl9OT1RJQ0UoImFsbG9jYXRpb24gb2YgeGF0dHJfZGF0dW0gZmFpbGVkXG4iKTsK IAkJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQkJfQotCQkJCXJlZi0+aW5vID0gMHhmZmZmZmZm ZTsKLQkJCQlyZWYtPnhpZCA9IDB4ZmZmZmZmZmQ7CiAJCQkJcmVmLT5uZXh0ID0gYy0+eHJl Zl90ZW1wOwogCQkJCWMtPnhyZWZfdGVtcCA9IHJlZjsKIAotCQkJCXJlZi0+bm9kZSA9IHN1 bV9saW5rX25vZGVfcmVmKGMsIGplYiwgamUzMl90b19jcHUoc3ByLT5vZmZzZXQpIHwgUkVG X1VOQ0hFQ0tFRCwKLQkJCQkJCQkgICAgICBQQUQoc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdf eHJlZikpLCBOVUxMKTsKLQkJCQkvKiBGSVhNRSAqLyByZWYtPm5vZGUtPm5leHRfaW5faW5v ID0gKHZvaWQgKilyZWY7CisJCQkJc3VtX2xpbmtfbm9kZV9yZWYoYywgamViLCBqZTMyX3Rv X2NwdShzcHItPm9mZnNldCkgfCBSRUZfVU5DSEVDS0VELAorCQkJCQkJICBQQUQoc2l6ZW9m KHN0cnVjdCBqZmZzMl9yYXdfeHJlZikpLCAodm9pZCAqKXJlZik7CiAKIAkJCQkqcHNldWRv X3JhbmRvbSArPSByZWYtPm5vZGUtPmZsYXNoX29mZnNldDsKIAkJCQlzcCArPSBKRkZTMl9T VU1NQVJZX1hSRUZfU0laRTsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3hhdHRyLmMgYi9mcy9q ZmZzMi94YXR0ci5jCmluZGV4IDJkODJlMjUuLjAzODcxYWIgMTAwNjQ0Ci0tLSBhL2ZzL2pm ZnMyL3hhdHRyLmMKKysrIGIvZnMvamZmczIveGF0dHIuYwpAQCAtMjMsMTggKzIzLDE1IEBA ICNpbmNsdWRlICJub2RlbGlzdC5oIgogICogeGF0dHJfZGF0dW1faGFzaGtleSh4cHJlZml4 LCB4bmFtZSwgeHZhbHVlLCB4c2l6ZSkKICAqICAgaXMgdXNlZCB0byBjYWxjdXJhdGUgeGRh dHVtIGhhc2hrZXkuIFRoZSByZW1pbmRlciBvZiBoYXNoa2V5IGludG8gWEFUVFJJTkRFWF9I QVNIU0laRSBpcwogICogICB0aGUgaW5kZXggb2YgdGhlIHhhdHRyIG5hbWUvdmFsdWUgcGFp ciBjYWNoZSAoYy0+eGF0dHJpbmRleCkuCisgKiBpc194YXR0cl9kYXR1bV91bmNoZWNrZWQo YywgeGQpCisgKiAgIHJldHVybnMgMSwgaWYgeGRhdHVtIGNvbnRhaW5zIGFueSB1bmNoZWNr ZWQgcmF3IG5vZGVzLiBpZiBhbGwgcmF3IG5vZGVzIGFyZSBub3QKKyAqICAgdW5jaGVja2Vk LCBpdCByZXR1cm5zIDAuCiAgKiB1bmxvYWRfeGF0dHJfZGF0dW0oYywgeGQpCiAgKiAgIGlz IHVzZWQgdG8gcmVsZWFzZSB4YXR0ciBuYW1lL3ZhbHVlIHBhaXIgYW5kIGRldGFjaCBmcm9t IGMtPnhhdHRyaW5kZXguCiAgKiByZWNsYWltX3hhdHRyX2RhdHVtKGMpCiAgKiAgIGlzIHVz ZWQgdG8gcmVjbGFpbSB4YXR0ciBuYW1lL3ZhbHVlIHBhaXJzIG9uIHRoZSB4YXR0ciBuYW1l L3ZhbHVlIHBhaXIgY2FjaGUgd2hlbgogICogICBtZW1vcnkgdXNhZ2UgYnkgY2FjaGUgaXMg b3ZlciBjLT54ZGF0dW1fbWVtX3RocmVzaG9sZC4gQ3VycmVudHJ5LCB0aGlzIHRocmVzaG9s ZCAKICAqICAgaXMgaGFyZCBjb2RlZCBhcyAzMktpQi4KLSAqIGRlbGV0ZV94YXR0cl9kYXR1 bV9ub2RlKGMsIHhkKQotICogICBpcyB1c2VkIHRvIGRlbGV0ZSBhIGpmZnMyIG5vZGUgaXMg ZG9taW5hdGVkIGJ5IHhkYXR1bS4gV2hlbiBFQlMoRXJhc2UgQmxvY2sgU3VtbWFyeSkgaXMK LSAqICAgZW5hYmxlZCwgaXQgb3ZlcndyaXRlcyB0aGUgb2Jzb2xldGUgbm9kZSBieSBteXNl bGYuCi0gKiBkZWxldGVfeGF0dHJfZGF0dW0oYywgeGQpCi0gKiAgIGlzIHVzZWQgdG8gZGVs ZXRlIGpmZnMyX3hhdHRyX2RhdHVtIG9iamVjdC4gSXQgbXVzdCBiZSBjYWxsZWQgd2l0aCAw LXZhbHVlIG9mIHJlZmVyZW5jZQotICogICBjb3VudGVyLiAoSXQgbWVhbnMgaG93IG1hbnkg amZmczJfeGF0dHJfcmVmIG9iamVjdCByZWZlcnMgdGhpcyB4ZGF0dW0uKQogICogZG9fdmVy aWZ5X3hhdHRyX2RhdHVtKGMsIHhkKQogICogICBpcyB1c2VkIHRvIGxvYWQgdGhlIHhkYXR1 bSBpbmZvcm1hdGlvbnMgd2l0aG91dCBuYW1lL3ZhbHVlIHBhaXIgZnJvbSB0aGUgbWVkaXVt LgogICogICBJdCdzIG5lY2Vzc2FyeSBvbmNlLCBiZWNhdXNlIHRob3NlIGluZm9ybWF0aW9u cyBhcmUgbm90IGNvbGxlY3RlZCBkdXJpbmcgbW91bnRpbmcKQEAgLTUzLDggKzUwLDEzIEBA ICNpbmNsdWRlICJub2RlbGlzdC5oIgogICogICBpcyB1c2VkIHRvIHdyaXRlIHhkYXR1bSB0 byBtZWRpdW0uIHhkLT52ZXJzaW9uIHdpbGwgYmUgaW5jcmVtZW50ZWQuCiAgKiBjcmVhdGVf eGF0dHJfZGF0dW0oYywgeHByZWZpeCwgeG5hbWUsIHh2YWx1ZSwgeHNpemUpCiAgKiAgIGlz IHVzZWQgdG8gY3JlYXRlIG5ldyB4ZGF0dW0gYW5kIHdyaXRlIHRvIG1lZGl1bS4KKyAqIGRl bGV0ZV94YXR0cl9kYXR1bV9kZWxheShjLCB4ZCkKKyAqICAgaXMgdXNlZCB0byBkZWxldGUg YSB4ZGF0dW0gd2l0aG91dCAnZGVsZXRlIG1hcmtlcicuIEl0IGhhcyBhIHBvc3NpYmlsaXR5 IHRvIGRldGVjdAorICogICBvcnBoYW4geGRhdHVtIG9uIG5leHQgbW91bnRpbmcuCisgKiBk ZWxldGVfeGF0dHJfZGF0dW0oYywgeGQpCisgKiAgIGlzIHVzZWQgdG8gZGVsZXRlIGEgeGRh dHVtIHdpdGggJ2RlbGV0ZSBtYXJrZXInLiBDYWxsaW5nIGpmZnMyX3Jlc2VydmVfc3BhY2Uo KSBpcworICogICBuZWNlc3NhcnkgYmVmb3JlIHRoaXMgZnVuY3Rpb24uCiAgKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiBzdGF0 aWMgdWludDMyX3QgeGF0dHJfZGF0dW1faGFzaGtleShpbnQgeHByZWZpeCwgY29uc3QgY2hh ciAqeG5hbWUsIGNvbnN0IGNoYXIgKnh2YWx1ZSwgaW50IHhzaXplKQogewogCWludCBuYW1l X2xlbiA9IHN0cmxlbih4bmFtZSk7CkBAIC02Miw2ICs2NCwyMiBAQCBzdGF0aWMgdWludDMy X3QgeGF0dHJfZGF0dW1faGFzaGtleShpbnQgCiAJcmV0dXJuIGNyYzMyKHhwcmVmaXgsIHhu YW1lLCBuYW1lX2xlbikgXiBjcmMzMih4cHJlZml4LCB4dmFsdWUsIHhzaXplKTsKIH0KIAor c3RhdGljIGludCBpc194YXR0cl9kYXR1bV91bmNoZWNrZWQoc3RydWN0IGpmZnMyX3NiX2lu Zm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQpCit7CisJc3RydWN0IGpmZnMy X3Jhd19ub2RlX3JlZiAqcmF3OworCWludCByYyA9IDA7CisKKwlzcGluX2xvY2soJmMtPmVy YXNlX2NvbXBsZXRpb25fbG9jayk7CisJZm9yIChyYXc9eGQtPm5vZGU7IHJhdyAhPSAodm9p ZCAqKXhkOyByYXc9cmF3LT5uZXh0X2luX2lubykgeworCQlpZiAocmVmX2ZsYWdzKHJhdykg PT0gUkVGX1VOQ0hFQ0tFRCkgeworCQkJcmMgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJ c3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJcmV0dXJuIHJjOwor fQorCiBzdGF0aWMgdm9pZCB1bmxvYWRfeGF0dHJfZGF0dW0oc3RydWN0IGpmZnMyX3NiX2lu Zm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQpCiB7CiAJLyogbXVzdCBiZSBj YWxsZWQgdW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCkBAIC0xMDcsODAgKzEyNSwz OSBAQCBzdGF0aWMgdm9pZCByZWNsYWltX3hhdHRyX2RhdHVtKHN0cnVjdCBqCiAJCSAgICAg YmVmb3JlLCBjLT54ZGF0dW1fbWVtX3VzYWdlLCBiZWZvcmUgLSBjLT54ZGF0dW1fbWVtX3Vz YWdlKTsKIH0KIAotc3RhdGljIHZvaWQgZGVsZXRlX3hhdHRyX2RhdHVtX25vZGUoc3RydWN0 IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQpCi17Ci0J LyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCi0Jc3Ry dWN0IGpmZnMyX3Jhd194YXR0ciByeDsKLQlzaXplX3QgbGVuZ3RoOwotCWludCByYzsKLQot CWlmICgheGQtPm5vZGUpIHsKLQkJSkZGUzJfV0FSTklORygieGRhdHVtICh4aWQ9JXUpIGlz IHJlbW92ZWQgdHdpY2UuXG4iLCB4ZC0+eGlkKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoamZm czJfc3VtX2FjdGl2ZSgpKSB7Ci0JCW1lbXNldCgmcngsIDB4ZmYsIHNpemVvZihzdHJ1Y3Qg amZmczJfcmF3X3hhdHRyKSk7Ci0JCXJjID0gamZmczJfZmxhc2hfcmVhZChjLCByZWZfb2Zm c2V0KHhkLT5ub2RlKSwKLQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25f bm9kZSksCi0JCQkJICAgICAgJmxlbmd0aCwgKGNoYXIgKikmcngpOwotCQlpZiAocmMgfHwg bGVuZ3RoICE9IHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSkgewotCQkJSkZG UzJfRVJST1IoImpmZnMyX2ZsYXNoX3JlYWQoKT0lZCwgcmVxPSV6dSwgcmVhZD0lenUgYXQg JSMwOHhcbiIsCi0JCQkJICAgIHJjLCBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9k ZSksCi0JCQkJICAgIGxlbmd0aCwgcmVmX29mZnNldCh4ZC0+bm9kZSkpOwotCQl9Ci0JCXJj ID0gamZmczJfZmxhc2hfd3JpdGUoYywgcmVmX29mZnNldCh4ZC0+bm9kZSksIHNpemVvZihy eCksCi0JCQkJICAgICAgICZsZW5ndGgsIChjaGFyICopJnJ4KTsKLQkJaWYgKHJjIHx8IGxl bmd0aCAhPSBzaXplb2Yoc3RydWN0IGpmZnMyX3Jhd194YXR0cikpIHsKLQkJCUpGRlMyX0VS Uk9SKCJqZmZzMl9mbGFzaF93cml0ZSgpPSVkLCByZXE9JXp1LCB3cm90ZT0lenUgYXIgJSMw OHhcbiIsCi0JCQkJICAgIHJjLCBzaXplb2YocngpLCBsZW5ndGgsIHJlZl9vZmZzZXQoeGQt Pm5vZGUpKTsKLQkJfQotCX0KLQlzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9j ayk7Ci0JeGQtPm5vZGUtPm5leHRfaW5faW5vID0gTlVMTDsKLQlzcGluX3VubG9jaygmYy0+ ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKLQlqZmZzMl9tYXJrX25vZGVfb2Jzb2xldGUoYywg eGQtPm5vZGUpOwotCXhkLT5ub2RlID0gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgZGVsZXRl X3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0 dHJfZGF0dW0gKnhkKQotewotCS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGRvd25fd3JpdGUo eGF0dHJfc2VtKSAqLwotCUJVR19PTih4ZC0+cmVmY250KTsKLQotCXVubG9hZF94YXR0cl9k YXR1bShjLCB4ZCk7Ci0JaWYgKHhkLT5ub2RlKSB7Ci0JCWRlbGV0ZV94YXR0cl9kYXR1bV9u b2RlKGMsIHhkKTsKLQkJeGQtPm5vZGUgPSBOVUxMOwotCX0KLQlqZmZzMl9mcmVlX3hhdHRy X2RhdHVtKHhkKTsKLX0KLQogc3RhdGljIGludCBkb192ZXJpZnlfeGF0dHJfZGF0dW0oc3Ry dWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQpCiB7 CiAJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCiAJ c3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmplYjsKKwlzdHJ1Y3QgamZmczJfcmF3X25vZGVf cmVmICpyYXc7CiAJc3RydWN0IGpmZnMyX3Jhd194YXR0ciByeDsKIAlzaXplX3QgcmVhZGxl bjsKLQl1aW50MzJfdCBjcmMsIHRvdGxlbjsKKwl1aW50MzJfdCBjcmMsIG9mZnNldCwgdG90 bGVuOwogCWludCByYzsKIAotCUJVR19PTigheGQtPm5vZGUpOwotCUJVR19PTihyZWZfZmxh Z3MoeGQtPm5vZGUpICE9IFJFRl9VTkNIRUNLRUQpOworCXNwaW5fbG9jaygmYy0+ZXJhc2Vf Y29tcGxldGlvbl9sb2NrKTsKKwlvZmZzZXQgPSByZWZfb2Zmc2V0KHhkLT5ub2RlKTsKKwlp ZiAocmVmX2ZsYWdzKHhkLT5ub2RlKSA9PSBSRUZfUFJJU1RJTkUpCisJCWdvdG8gY29tcGxl dGU7CisJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAKLQlyYyA9 IGpmZnMyX2ZsYXNoX3JlYWQoYywgcmVmX29mZnNldCh4ZC0+bm9kZSksIHNpemVvZihyeCks ICZyZWFkbGVuLCAoY2hhciAqKSZyeCk7CisJcmMgPSBqZmZzMl9mbGFzaF9yZWFkKGMsIG9m ZnNldCwgc2l6ZW9mKHJ4KSwgJnJlYWRsZW4sIChjaGFyICopJnJ4KTsKIAlpZiAocmMgfHwg cmVhZGxlbiAhPSBzaXplb2YocngpKSB7CiAJCUpGRlMyX1dBUk5JTkcoImpmZnMyX2ZsYXNo X3JlYWQoKT0lZCwgcmVxPSV6dSwgcmVhZD0lenUgYXQgJSMwOHhcbiIsCi0JCQkgICAgICBy Yywgc2l6ZW9mKHJ4KSwgcmVhZGxlbiwgcmVmX29mZnNldCh4ZC0+bm9kZSkpOworCQkJICAg ICAgcmMsIHNpemVvZihyeCksIHJlYWRsZW4sIG9mZnNldCk7CiAJCXJldHVybiByYyA/IHJj IDogLUVJTzsKIAl9CiAJY3JjID0gY3JjMzIoMCwgJnJ4LCBzaXplb2YocngpIC0gNCk7CiAJ aWYgKGNyYyAhPSBqZTMyX3RvX2NwdShyeC5ub2RlX2NyYykpIHsKLQkJaWYgKGplMzJfdG9f Y3B1KHJ4Lm5vZGVfY3JjKSAhPSAweGZmZmZmZmZmKQotCQkJSkZGUzJfRVJST1IoIm5vZGUg Q1JDIGZhaWxlZCBhdCAlIzA4eCwgcmVhZD0lIzA4eCwgY2FsYz0lIzA4eFxuIiwKLQkJCQkg ICAgcmVmX29mZnNldCh4ZC0+bm9kZSksIGplMzJfdG9fY3B1KHJ4Lmhkcl9jcmMpLCBjcmMp OworCQlKRkZTMl9FUlJPUigibm9kZSBDUkMgZmFpbGVkIGF0ICUjMDh4LCByZWFkPSUjMDh4 LCBjYWxjPSUjMDh4XG4iLAorCQkJICAgIG9mZnNldCwgamUzMl90b19jcHUocnguaGRyX2Ny YyksIGNyYyk7CisJCXhkLT5mbGFncyB8PSBKRkZTMl9YRkxBR1NfSU5WQUxJRDsKIAkJcmV0 dXJuIEVJTzsKIAl9Ci0JdG90bGVuID0gUEFEKHNpemVvZihyeCkgKyByeC5uYW1lX2xlbiAr IDEgKyBqZTE2X3RvX2NwdShyeC52YWx1ZV9sZW4pKTsKKwl0b3RsZW4gPSBzaXplb2Yocngp OworCWlmICh4ZC0+dmVyc2lvbiAhPSBYREFUVU1fREVMRVRFX01BUktFUikKKwkJdG90bGVu ICs9IHJ4Lm5hbWVfbGVuICsgMSArIGplMTZfdG9fY3B1KHJ4LnZhbHVlX2xlbik7CisJdG90 bGVuID0gUEFEKHRvdGxlbik7CiAJaWYgKGplMTZfdG9fY3B1KHJ4Lm1hZ2ljKSAhPSBKRkZT Ml9NQUdJQ19CSVRNQVNLCiAJICAgIHx8IGplMTZfdG9fY3B1KHJ4Lm5vZGV0eXBlKSAhPSBK RkZTMl9OT0RFVFlQRV9YQVRUUgogCSAgICB8fCBqZTMyX3RvX2NwdShyeC50b3RsZW4pICE9 IHRvdGxlbgpAQCAtMTg4LDExICsxNjUsMTIgQEAgc3RhdGljIGludCBkb192ZXJpZnlfeGF0 dHJfZGF0dW0oc3RydWN0IAogCSAgICB8fCBqZTMyX3RvX2NwdShyeC52ZXJzaW9uKSAhPSB4 ZC0+dmVyc2lvbikgewogCQlKRkZTMl9FUlJPUigiaW5jb25zaXN0ZW50IHhkYXR1bSBhdCAl IzA4eCwgbWFnaWM9JSMwNHgvJSMwNHgsICIKIAkJCSAgICAibm9kZXR5cGU9JSMwNHgvJSMw NHgsIHRvdGxlbj0ldS8ldSwgeGlkPSV1LyV1LCB2ZXJzaW9uPSV1LyV1XG4iLAotCQkJICAg IHJlZl9vZmZzZXQoeGQtPm5vZGUpLCBqZTE2X3RvX2NwdShyeC5tYWdpYyksIEpGRlMyX01B R0lDX0JJVE1BU0ssCisJCQkgICAgb2Zmc2V0LCBqZTE2X3RvX2NwdShyeC5tYWdpYyksIEpG RlMyX01BR0lDX0JJVE1BU0ssCiAJCQkgICAgamUxNl90b19jcHUocngubm9kZXR5cGUpLCBK RkZTMl9OT0RFVFlQRV9YQVRUUiwKIAkJCSAgICBqZTMyX3RvX2NwdShyeC50b3RsZW4pLCB0 b3RsZW4sCiAJCQkgICAgamUzMl90b19jcHUocngueGlkKSwgeGQtPnhpZCwKIAkJCSAgICBq ZTMyX3RvX2NwdShyeC52ZXJzaW9uKSwgeGQtPnZlcnNpb24pOworCQl4ZC0+ZmxhZ3MgfD0g SkZGUzJfWEZMQUdTX0lOVkFMSUQ7CiAJCXJldHVybiBFSU87CiAJfQogCXhkLT54cHJlZml4 ID0gcngueHByZWZpeDsKQEAgLTIwMCwxNCArMTc4LDE3IEBAIHN0YXRpYyBpbnQgZG9fdmVy aWZ5X3hhdHRyX2RhdHVtKHN0cnVjdCAKIAl4ZC0+dmFsdWVfbGVuID0gamUxNl90b19jcHUo cngudmFsdWVfbGVuKTsKIAl4ZC0+ZGF0YV9jcmMgPSBqZTMyX3RvX2NwdShyeC5kYXRhX2Ny Yyk7CiAKLQkvKiBUaGlzIEpGRlMyX05PREVUWVBFX1hBVFRSIG5vZGUgaXMgY2hlY2tlZCAq LwotCWplYiA9ICZjLT5ibG9ja3NbcmVmX29mZnNldCh4ZC0+bm9kZSkgLyBjLT5zZWN0b3Jf c2l6ZV07Ci0JdG90bGVuID0gUEFEKGplMzJfdG9fY3B1KHJ4LnRvdGxlbikpOwotCiAJc3Bp bl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwotCWMtPnVuY2hlY2tlZF9zaXpl IC09IHRvdGxlbjsgYy0+dXNlZF9zaXplICs9IHRvdGxlbjsKLQlqZWItPnVuY2hlY2tlZF9z aXplIC09IHRvdGxlbjsgamViLT51c2VkX3NpemUgKz0gdG90bGVuOwotCXhkLT5ub2RlLT5m bGFzaF9vZmZzZXQgPSByZWZfb2Zmc2V0KHhkLT5ub2RlKSB8IFJFRl9QUklTVElORTsKKyBj b21wbGV0ZToKKwlmb3IgKHJhdz14ZC0+bm9kZTsgcmF3ICE9ICh2b2lkICopeGQ7IHJhdz1y YXctPm5leHRfaW5faW5vKSB7CisJCWplYiA9ICZjLT5ibG9ja3NbcmVmX29mZnNldChyYXcp IC8gYy0+c2VjdG9yX3NpemVdOworCQl0b3RsZW4gPSBQQUQocmVmX3RvdGxlbihjLCBqZWIs IHJhdykpOworCQlpZiAocmVmX2ZsYWdzKHJhdykgPT0gUkVGX1VOQ0hFQ0tFRCkgeworCQkJ Yy0+dW5jaGVja2VkX3NpemUgLT0gdG90bGVuOyBjLT51c2VkX3NpemUgKz0gdG90bGVuOwor CQkJamViLT51bmNoZWNrZWRfc2l6ZSAtPSB0b3RsZW47IGplYi0+dXNlZF9zaXplICs9IHRv dGxlbjsKKwkJfQorCQlyYXctPmZsYXNoX29mZnNldCA9IHJlZl9vZmZzZXQocmF3KSB8ICgo eGQtPm5vZGU9PXJhdykgPyBSRUZfUFJJU1RJTkUgOiBSRUZfTk9STUFMKTsKKwl9CiAJc3Bp bl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CiAKIAkvKiB1bmNoZWNrZWQg eGRhdHVtIGlzIGNoYWluZWQgd2l0aCBjLT54YXR0cl91bmNoZWNrZWQgKi8KQEAgLTIyNyw3 ICsyMDgsNiBAQCBzdGF0aWMgaW50IGRvX2xvYWRfeGF0dHJfZGF0dW0oc3RydWN0IGpmCiAJ dWludDMyX3QgY3JjLCBsZW5ndGg7CiAJaW50IGksIHJldCwgcmV0cnkgPSAwOwogCi0JQlVH X09OKCF4ZC0+bm9kZSk7CiAJQlVHX09OKHJlZl9mbGFncyh4ZC0+bm9kZSkgIT0gUkVGX1BS SVNUSU5FKTsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJnhkLT54aW5kZXgpKTsKICByZXRyeToK QEAgLTI1Myw2ICsyMzMsNyBAQCBzdGF0aWMgaW50IGRvX2xvYWRfeGF0dHJfZGF0dW0oc3Ry dWN0IGpmCiAJCQkgICAgICAiIGF0ICUjMDh4LCByZWFkOiAweCUwOHggY2FsY3VsYXRlZDog MHglMDh4XG4iLAogCQkJICAgICAgcmVmX29mZnNldCh4ZC0+bm9kZSksIHhkLT5kYXRhX2Ny YywgY3JjKTsKIAkJa2ZyZWUoZGF0YSk7CisJCXhkLT5mbGFncyB8PSBKRkZTMl9YRkxBR1Nf SU5WQUxJRDsKIAkJcmV0dXJuIEVJTzsKIAl9CiAKQEAgLTI4NiwxNiArMjY3LDEzIEBAIHN0 YXRpYyBpbnQgbG9hZF94YXR0cl9kYXR1bShzdHJ1Y3QgamZmczIKIAkgKiByYyA+IDAgOiBV bnJlY292ZXJhYmxlIGVycm9yLCB0aGlzIG5vZGUgc2hvdWxkIGJlIGRlbGV0ZWQuCiAJICov CiAJaW50IHJjID0gMDsKLQlCVUdfT04oeGQtPnhuYW1lKTsKLQlpZiAoIXhkLT5ub2RlKQor CisJaWYgKHhkLT54bmFtZSkKKwkJcmV0dXJuIDA7CisJaWYgKHhkLT5mbGFncyAmIEpGRlMy X1hGTEFHU19JTlZBTElEKQogCQlyZXR1cm4gRUlPOwotCWlmICh1bmxpa2VseShyZWZfZmxh Z3MoeGQtPm5vZGUpICE9IFJFRl9QUklTVElORSkpIHsKKwlpZiAodW5saWtlbHkoaXNfeGF0 dHJfZGF0dW1fdW5jaGVja2VkKGMsIHhkKSkpCiAJCXJjID0gZG9fdmVyaWZ5X3hhdHRyX2Rh dHVtKGMsIHhkKTsKLQkJaWYgKHJjID4gMCkgewotCQkJbGlzdF9kZWxfaW5pdCgmeGQtPnhp bmRleCk7Ci0JCQlkZWxldGVfeGF0dHJfZGF0dW1fbm9kZShjLCB4ZCk7Ci0JCX0KLQl9CiAJ aWYgKCFyYykKIAkJcmMgPSBkb19sb2FkX3hhdHRyX2RhdHVtKGMsIHhkKTsKIAlyZXR1cm4g cmM7CkBAIC0zMDQsMzYgKzI4Miw0MyBAQCBzdGF0aWMgaW50IGxvYWRfeGF0dHJfZGF0dW0o c3RydWN0IGpmZnMyCiBzdGF0aWMgaW50IHNhdmVfeGF0dHJfZGF0dW0oc3RydWN0IGpmZnMy X3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQpCiB7CiAJLyogbXVz dCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0ZSh4YXR0cl9zZW0pICovCi0Jc3RydWN0IGpm ZnMyX3Jhd19ub2RlX3JlZiAqcmF3OwogCXN0cnVjdCBqZmZzMl9yYXdfeGF0dHIgcng7CiAJ c3RydWN0IGt2ZWMgdmVjc1syXTsKIAlzaXplX3QgbGVuZ3RoOwotCWludCByYywgdG90bGVu OworCWludCByYywgdG90bGVuLCBudmVjcyA9IDE7CiAJdWludDMyX3QgcGh5c19vZnMgPSB3 cml0ZV9vZnMoYyk7CiAKLQlCVUdfT04oIXhkLT54bmFtZSk7CisJQlVHX09OKGlzX3hhdHRy X2RhdHVtX2RlYWQoeGQpIHx8ICh4ZC0+ZmxhZ3MgJiBKRkZTMl9YRkxBR1NfSU5WQUxJRCkK KwkgICAgICAgPyAhIXhkLT54bmFtZSA6ICF4ZC0+eG5hbWUpOwogCiAJdmVjc1swXS5pb3Zf YmFzZSA9ICZyeDsKLQl2ZWNzWzBdLmlvdl9sZW4gPSBQQUQoc2l6ZW9mKHJ4KSk7Ci0JdmVj c1sxXS5pb3ZfYmFzZSA9IHhkLT54bmFtZTsKLQl2ZWNzWzFdLmlvdl9sZW4gPSB4ZC0+bmFt ZV9sZW4gKyAxICsgeGQtPnZhbHVlX2xlbjsKLQl0b3RsZW4gPSB2ZWNzWzBdLmlvdl9sZW4g KyB2ZWNzWzFdLmlvdl9sZW47Ci0KKwl2ZWNzWzBdLmlvdl9sZW4gPSB0b3RsZW4gPSBzaXpl b2YocngpOworCWlmICghaXNfeGF0dHJfZGF0dW1fZGVhZCh4ZCkgJiYgISh4ZC0+ZmxhZ3Mg JiBKRkZTMl9YRkxBR1NfSU5WQUxJRCkpIHsKKwkJbnZlY3MrKzsKKwkJdmVjc1sxXS5pb3Zf YmFzZSA9IHhkLT54bmFtZTsKKwkJdmVjc1sxXS5pb3ZfbGVuID0geGQtPm5hbWVfbGVuICsg MSArIHhkLT52YWx1ZV9sZW47CisJCXRvdGxlbiArPSB2ZWNzWzFdLmlvdl9sZW47CisJfQog CS8qIFNldHVwIHJhdy14YXR0ciAqLworCW1lbXNldCgmcngsIDAsIHNpemVvZihyeCkpOwog CXJ4Lm1hZ2ljID0gY3B1X3RvX2plMTYoSkZGUzJfTUFHSUNfQklUTUFTSyk7CiAJcngubm9k ZXR5cGUgPSBjcHVfdG9famUxNihKRkZTMl9OT0RFVFlQRV9YQVRUUik7CiAJcngudG90bGVu ID0gY3B1X3RvX2plMzIoUEFEKHRvdGxlbikpOwogCXJ4Lmhkcl9jcmMgPSBjcHVfdG9famUz MihjcmMzMigwLCAmcngsIHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSAtIDQp KTsKIAogCXJ4LnhpZCA9IGNwdV90b19qZTMyKHhkLT54aWQpOwotCXJ4LnZlcnNpb24gPSBj cHVfdG9famUzMigrK3hkLT52ZXJzaW9uKTsKLQlyeC54cHJlZml4ID0geGQtPnhwcmVmaXg7 Ci0JcngubmFtZV9sZW4gPSB4ZC0+bmFtZV9sZW47Ci0JcngudmFsdWVfbGVuID0gY3B1X3Rv X2plMTYoeGQtPnZhbHVlX2xlbik7Ci0JcnguZGF0YV9jcmMgPSBjcHVfdG9famUzMihjcmMz MigwLCB2ZWNzWzFdLmlvdl9iYXNlLCB2ZWNzWzFdLmlvdl9sZW4pKTsKKwlpZiAoIWlzX3hh dHRyX2RhdHVtX2RlYWQoeGQpICYmICEoeGQtPmZsYWdzICYgSkZGUzJfWEZMQUdTX0lOVkFM SUQpKSB7CisJCXJ4LnZlcnNpb24gPSBjcHVfdG9famUzMigrK3hkLT52ZXJzaW9uKTsKKwkJ cngueHByZWZpeCA9IHhkLT54cHJlZml4OworCQlyeC5uYW1lX2xlbiA9IHhkLT5uYW1lX2xl bjsKKwkJcngudmFsdWVfbGVuID0gY3B1X3RvX2plMTYoeGQtPnZhbHVlX2xlbik7CisJCXJ4 LmRhdGFfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIoMCwgdmVjc1sxXS5pb3ZfYmFzZSwgdmVj c1sxXS5pb3ZfbGVuKSk7CisJfSBlbHNlIHsKKwkJcngudmVyc2lvbiA9IGNwdV90b19qZTMy KFhEQVRVTV9ERUxFVEVfTUFSS0VSKTsKKwl9CiAJcngubm9kZV9jcmMgPSBjcHVfdG9famUz MihjcmMzMigwLCAmcngsIHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X3hhdHRyKSAtIDQpKTsK IAotCXJjID0gamZmczJfZmxhc2hfd3JpdGV2KGMsIHZlY3MsIDIsIHBoeXNfb2ZzLCAmbGVu Z3RoLCAwKTsKKwlyYyA9IGpmZnMyX2ZsYXNoX3dyaXRldihjLCB2ZWNzLCBudmVjcywgcGh5 c19vZnMsICZsZW5ndGgsIDApOwogCWlmIChyYyB8fCB0b3RsZW4gIT0gbGVuZ3RoKSB7CiAJ CUpGRlMyX1dBUk5JTkcoImpmZnMyX2ZsYXNoX3dyaXRldigpPSVkLCByZXE9JXUsIHdyb3Rl PSV6dSwgYXQgJSMwOHhcbiIsCiAJCQkgICAgICByYywgdG90bGVuLCBsZW5ndGgsIHBoeXNf b2ZzKTsKQEAgLTM0MywxNCArMzI4LDggQEAgc3RhdGljIGludCBzYXZlX3hhdHRyX2RhdHVt KHN0cnVjdCBqZmZzMgogCiAJCXJldHVybiByYzsKIAl9Ci0KIAkvKiBzdWNjZXNzICovCi0J cmF3ID0gamZmczJfYWRkX3BoeXNpY2FsX25vZGVfcmVmKGMsIHBoeXNfb2ZzIHwgUkVGX1BS SVNUSU5FLCBQQUQodG90bGVuKSwgTlVMTCk7Ci0JLyogRklYTUUgKi8gcmF3LT5uZXh0X2lu X2lubyA9ICh2b2lkICopeGQ7Ci0KLQlpZiAoeGQtPm5vZGUpCi0JCWRlbGV0ZV94YXR0cl9k YXR1bV9ub2RlKGMsIHhkKTsKLQl4ZC0+bm9kZSA9IHJhdzsKKwlqZmZzMl9hZGRfcGh5c2lj YWxfbm9kZV9yZWYoYywgcGh5c19vZnMgfCBSRUZfUFJJU1RJTkUsIFBBRCh0b3RsZW4pLCAo dm9pZCAqKXhkKTsKIAogCWRiZ194YXR0cigic3VjY2VzcyBvbiBzYXZpbmcgeGRhdHVtICh4 aWQ9JXUsIHZlcnNpb249JXUsIHhwcmVmaXg9JXUsIHhuYW1lPSclcycpXG4iLAogCQkgIHhk LT54aWQsIHhkLT52ZXJzaW9uLCB4ZC0+eHByZWZpeCwgeGQtPnhuYW1lKTsKQEAgLTQyNiw2 ICs0MDUsMzkgQEAgc3RhdGljIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqY3JlYXRlXwog CXJldHVybiB4ZDsKIH0KIAorc3RhdGljIHZvaWQgZGVsZXRlX3hhdHRyX2RhdHVtX2RlbGF5 KHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhk KQoreworCS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGRvd25fd3JpdGUoeGF0dHJfc2VtKSAq LworCUJVR19PTih4ZC0+cmVmY250KTsKKworCXVubG9hZF94YXR0cl9kYXR1bShjLCB4ZCk7 CisJc2V0X3hhdHRyX2RhdHVtX2RlYWQoeGQpOworCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29t cGxldGlvbl9sb2NrKTsKKwlsaXN0X2FkZCgmeGQtPnhpbmRleCwgJmMtPnhhdHRyX2RlYWRf bGlzdCk7CisJc3Bpbl91bmxvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJSkZG UzJfTk9USUNFKCJ4ZGF0dW0oeGlkPSV1KSB3YXMgcmVtb3ZlZCB3aXRob3V0IGRlbGV0ZSBt YXJrZXIuICIKKwkJICAgICAiQW4gb3JwaGFuIHhkYXR1bSBtYXkgYmUgZGV0ZWN0ZWQgb24g bmV4dCBtb3VudGluZy5cbiIsIHhkLT54aWQpOworfQorCitzdGF0aWMgdm9pZCBkZWxldGVf eGF0dHJfZGF0dW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0 cl9kYXR1bSAqeGQpCit7CisJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgamZmczJfcmVzZXJ2 ZV9zcGFjZSgpIGFuZCBkb3duX3dyaXRlKHhhdHRyX3NlbSkgKi8KKwlpbnQgcmM7CisJQlVH X09OKHhkLT5yZWZjbnQpOworCisJdW5sb2FkX3hhdHRyX2RhdHVtKGMsIHhkKTsKKwlzZXRf eGF0dHJfZGF0dW1fZGVhZCh4ZCk7CQorCXJjID0gc2F2ZV94YXR0cl9kYXR1bShjLCB4ZCk7 CisJaWYgKHJjKSB7CisJCUpGRlMyX05PVElDRSgieGRhdHVtKHhpZD0ldSkgd2FzIHJlbW92 ZWQgd2l0aG91dCBkZWxldGUgbWFya2VyLiAiCisJCQkgICAgICJBbiBvcnBoYW4geGRhdHVt IG1heSBiZSBkZXRlY3RlZCBvbiBuZXh0IG1vdW50aW5nLlxuIiwKKwkJCSAgICAgeGQtPnhp ZCk7CisJfQorCXNwaW5fbG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsKKwlsaXN0 X2FkZCgmeGQtPnhpbmRleCwgJmMtPnhhdHRyX2RlYWRfbGlzdCk7CisJc3Bpbl91bmxvY2so JmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jayk7Cit9CisKIC8qIC0tLS0tLS0tIHhyZWYgcmVs YXRlZCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiB2ZXJpZnlfeGF0dHJfcmVm KGMsIHJlZikKICAqICAgaXMgdXNlZCB0byBsb2FkIHhyZWYgaW5mb3JtYXRpb24gZnJvbSBt ZWRpdW0uIEJlY2F1c2Ugc3VtbWFyeSBkYXRhIGRvZXMgbm90CkBAIC00NTAsMjUgKzQ2Miwy OSBAQCBzdGF0aWMgc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICpjcmVhdGVfCiBzdGF0aWMg aW50IHZlcmlmeV94YXR0cl9yZWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBq ZmZzMl94YXR0cl9yZWYgKnJlZikKIHsKIAlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamVi OworCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdzsKIAlzdHJ1Y3QgamZmczJfcmF3 X3hyZWYgcnI7CiAJc2l6ZV90IHJlYWRsZW47Ci0JdWludDMyX3QgY3JjLCB0b3RsZW47CisJ dWludDMyX3QgY3JjLCBvZmZzZXQsIHRvdGxlbjsKIAlpbnQgcmM7CiAKLQlCVUdfT04ocmVm X2ZsYWdzKHJlZi0+bm9kZSkgIT0gUkVGX1VOQ0hFQ0tFRCk7CisJc3Bpbl9sb2NrKCZjLT5l cmFzZV9jb21wbGV0aW9uX2xvY2spOworCWlmIChyZWZfZmxhZ3MocmVmLT5ub2RlKSAhPSBS RUZfVU5DSEVDS0VEKQorCQlnb3RvIGNvbXBsZXRlOworCW9mZnNldCA9IHJlZl9vZmZzZXQo cmVmLT5ub2RlKTsKKwlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29tcGxldGlvbl9sb2NrKTsK IAotCXJjID0gamZmczJfZmxhc2hfcmVhZChjLCByZWZfb2Zmc2V0KHJlZi0+bm9kZSksIHNp emVvZihyciksICZyZWFkbGVuLCAoY2hhciAqKSZycik7CisJcmMgPSBqZmZzMl9mbGFzaF9y ZWFkKGMsIG9mZnNldCwgc2l6ZW9mKHJyKSwgJnJlYWRsZW4sIChjaGFyICopJnJyKTsKIAlp ZiAocmMgfHwgc2l6ZW9mKHJyKSAhPSByZWFkbGVuKSB7CiAJCUpGRlMyX1dBUk5JTkcoImpm ZnMyX2ZsYXNoX3JlYWQoKT0lZCwgcmVxPSV6dSwgcmVhZD0lenUsIGF0ICUjMDh4XG4iLAot CQkJICAgICAgcmMsIHNpemVvZihyciksIHJlYWRsZW4sIHJlZl9vZmZzZXQocmVmLT5ub2Rl KSk7CisJCQkgICAgICByYywgc2l6ZW9mKHJyKSwgcmVhZGxlbiwgb2Zmc2V0KTsKIAkJcmV0 dXJuIHJjID8gcmMgOiAtRUlPOwogCX0KIAkvKiBvYnNvbGV0ZSBub2RlICovCiAJY3JjID0g Y3JjMzIoMCwgJnJyLCBzaXplb2YocnIpIC0gNCk7CiAJaWYgKGNyYyAhPSBqZTMyX3RvX2Nw dShyci5ub2RlX2NyYykpIHsKLQkJaWYgKGplMzJfdG9fY3B1KHJyLm5vZGVfY3JjKSAhPSAw eGZmZmZmZmZmKQotCQkJSkZGUzJfRVJST1IoIm5vZGUgQ1JDIGZhaWxlZCBhdCAlIzA4eCwg cmVhZD0lIzA4eCwgY2FsYz0lIzA4eFxuIiwKLQkJCQkgICAgcmVmX29mZnNldChyZWYtPm5v ZGUpLCBqZTMyX3RvX2NwdShyci5ub2RlX2NyYyksIGNyYyk7CisJCUpGRlMyX0VSUk9SKCJu b2RlIENSQyBmYWlsZWQgYXQgJSMwOHgsIHJlYWQ9JSMwOHgsIGNhbGM9JSMwOHhcbiIsCisJ CQkgICAgb2Zmc2V0LCBqZTMyX3RvX2NwdShyci5ub2RlX2NyYyksIGNyYyk7CiAJCXJldHVy biBFSU87CiAJfQogCWlmIChqZTE2X3RvX2NwdShyci5tYWdpYykgIT0gSkZGUzJfTUFHSUNf QklUTUFTSwpAQCAtNDc2LDIyICs0OTIsMjggQEAgc3RhdGljIGludCB2ZXJpZnlfeGF0dHJf cmVmKHN0cnVjdCBqZmZzMgogCSAgICB8fCBqZTMyX3RvX2NwdShyci50b3RsZW4pICE9IFBB RChzaXplb2YocnIpKSkgewogCQlKRkZTMl9FUlJPUigiaW5jb25zaXN0ZW50IHhyZWYgYXQg JSMwOHgsIG1hZ2ljPSUjMDR4LyUjMDR4LCAiCiAJCQkgICAgIm5vZGV0eXBlPSUjMDR4LyUj MDR4LCB0b3RsZW49JXUvJXp1XG4iLAotCQkJICAgIHJlZl9vZmZzZXQocmVmLT5ub2RlKSwg amUxNl90b19jcHUocnIubWFnaWMpLCBKRkZTMl9NQUdJQ19CSVRNQVNLLAorCQkJICAgIG9m ZnNldCwgamUxNl90b19jcHUocnIubWFnaWMpLCBKRkZTMl9NQUdJQ19CSVRNQVNLLAogCQkJ ICAgIGplMTZfdG9fY3B1KHJyLm5vZGV0eXBlKSwgSkZGUzJfTk9ERVRZUEVfWFJFRiwKIAkJ CSAgICBqZTMyX3RvX2NwdShyci50b3RsZW4pLCBQQUQoc2l6ZW9mKHJyKSkpOwogCQlyZXR1 cm4gRUlPOwogCX0KIAlyZWYtPmlubyA9IGplMzJfdG9fY3B1KHJyLmlubyk7CiAJcmVmLT54 aWQgPSBqZTMyX3RvX2NwdShyci54aWQpOwotCi0JLyogZml4dXAgc3VwZXJibG9jay9lcmFz ZWJsb2NrIGluZm8gKi8KLQlqZWIgPSAmYy0+YmxvY2tzW3JlZl9vZmZzZXQocmVmLT5ub2Rl KSAvIGMtPnNlY3Rvcl9zaXplXTsKLQl0b3RsZW4gPSBQQUQoc2l6ZW9mKHJyKSk7CisJcmVm LT54c2Vxbm8gPSBqZTMyX3RvX2NwdShyci54c2Vxbm8pOworCWlmIChyZWYtPnhzZXFubyA+ IGMtPmhpZ2hlc3RfeHNlcW5vKQorCQljLT5oaWdoZXN0X3hzZXFubyA9IChyZWYtPnhzZXFu byAmIH5YUkVGX0RFTEVURV9NQVJLRVIpOwogCiAJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21w bGV0aW9uX2xvY2spOwotCWMtPnVuY2hlY2tlZF9zaXplIC09IHRvdGxlbjsgYy0+dXNlZF9z aXplICs9IHRvdGxlbjsKLQlqZWItPnVuY2hlY2tlZF9zaXplIC09IHRvdGxlbjsgamViLT51 c2VkX3NpemUgKz0gdG90bGVuOwotCXJlZi0+bm9kZS0+Zmxhc2hfb2Zmc2V0ID0gcmVmX29m ZnNldChyZWYtPm5vZGUpIHwgUkVGX1BSSVNUSU5FOworIGNvbXBsZXRlOgorCWZvciAocmF3 PXJlZi0+bm9kZTsgcmF3ICE9ICh2b2lkICopcmVmOyByYXc9cmF3LT5uZXh0X2luX2lubykg eworCQlqZWIgPSAmYy0+YmxvY2tzW3JlZl9vZmZzZXQocmF3KSAvIGMtPnNlY3Rvcl9zaXpl XTsKKwkJdG90bGVuID0gUEFEKHJlZl90b3RsZW4oYywgamViLCByYXcpKTsKKwkJaWYgKHJl Zl9mbGFncyhyYXcpID09IFJFRl9VTkNIRUNLRUQpIHsKKwkJCWMtPnVuY2hlY2tlZF9zaXpl IC09IHRvdGxlbjsgYy0+dXNlZF9zaXplICs9IHRvdGxlbjsKKwkJCWplYi0+dW5jaGVja2Vk X3NpemUgLT0gdG90bGVuOyBqZWItPnVzZWRfc2l6ZSArPSB0b3RsZW47CisJCX0KKwkJcmF3 LT5mbGFzaF9vZmZzZXQgPSByZWZfb2Zmc2V0KHJhdykgfCAoKHJlZi0+bm9kZT09cmF3KSA/ IFJFRl9QUklTVElORSA6IFJFRl9OT1JNQUwpOworCX0KIAlzcGluX3VubG9jaygmYy0+ZXJh c2VfY29tcGxldGlvbl9sb2NrKTsKIAogCWRiZ194YXR0cigic3VjY2VzcyBvbiB2ZXJpZnlp bmcgeHJlZiAoaW5vPSV1LCB4aWQ9JXUpIGF0ICUjMDh4XG4iLApAQCAtNDk5LDU4ICs1MjEs MTIgQEAgc3RhdGljIGludCB2ZXJpZnlfeGF0dHJfcmVmKHN0cnVjdCBqZmZzMgogCXJldHVy biAwOwogfQogCi1zdGF0aWMgdm9pZCBkZWxldGVfeGF0dHJfcmVmX25vZGUoc3RydWN0IGpm ZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZikKLXsKLQlzdHJ1 Y3QgamZmczJfcmF3X3hyZWYgcnI7Ci0Jc2l6ZV90IGxlbmd0aDsKLQlpbnQgcmM7Ci0KLQlp ZiAoamZmczJfc3VtX2FjdGl2ZSgpKSB7Ci0JCW1lbXNldCgmcnIsIDB4ZmYsIHNpemVvZihy cikpOwotCQlyYyA9IGpmZnMyX2ZsYXNoX3JlYWQoYywgcmVmX29mZnNldChyZWYtPm5vZGUp LAotCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSwKLQkJCQkg ICAgICAmbGVuZ3RoLCAoY2hhciAqKSZycik7Ci0JCWlmIChyYyB8fCBsZW5ndGggIT0gc2l6 ZW9mKHN0cnVjdCBqZmZzMl91bmtub3duX25vZGUpKSB7Ci0JCQlKRkZTMl9FUlJPUigiamZm czJfZmxhc2hfcmVhZCgpPSVkLCByZXE9JXp1LCByZWFkPSV6dSBhdCAlIzA4eFxuIiwKLQkJ CQkgICAgcmMsIHNpemVvZihzdHJ1Y3QgamZmczJfdW5rbm93bl9ub2RlKSwKLQkJCQkgICAg bGVuZ3RoLCByZWZfb2Zmc2V0KHJlZi0+bm9kZSkpOwotCQl9Ci0JCXJjID0gamZmczJfZmxh c2hfd3JpdGUoYywgcmVmX29mZnNldChyZWYtPm5vZGUpLCBzaXplb2YocnIpLAotCQkJCSAg ICAgICAmbGVuZ3RoLCAoY2hhciAqKSZycik7Ci0JCWlmIChyYyB8fCBsZW5ndGggIT0gc2l6 ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeHJlZikpIHsKLQkJCUpGRlMyX0VSUk9SKCJqZmZzMl9m bGFzaF93cml0ZSgpPSVkLCByZXE9JXp1LCB3cm90ZT0lenUgYXQgJSMwOHhcbiIsCi0JCQkJ ICAgIHJjLCBzaXplb2YocnIpLCBsZW5ndGgsIHJlZl9vZmZzZXQocmVmLT5ub2RlKSk7Ci0J CX0KLQl9Ci0Jc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOwotCXJlZi0+ bm9kZS0+bmV4dF9pbl9pbm8gPSBOVUxMOwotCXNwaW5fdW5sb2NrKCZjLT5lcmFzZV9jb21w bGV0aW9uX2xvY2spOwotCWpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZShjLCByZWYtPm5vZGUp OwotCXJlZi0+bm9kZSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIGRlbGV0ZV94YXR0cl9y ZWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJl ZikKLXsKLQkvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciBkb3duX3dyaXRlKHhhdHRyX3NlbSkg Ki8KLQlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkOwotCi0JQlVHX09OKCFyZWYtPm5v ZGUpOwotCWRlbGV0ZV94YXR0cl9yZWZfbm9kZShjLCByZWYpOwotCi0JeGQgPSByZWYtPnhk OwotCXhkLT5yZWZjbnQtLTsKLQlpZiAoIXhkLT5yZWZjbnQpCi0JCWRlbGV0ZV94YXR0cl9k YXR1bShjLCB4ZCk7Ci0JamZmczJfZnJlZV94YXR0cl9yZWYocmVmKTsKLX0KLQogc3RhdGlj IGludCBzYXZlX3hhdHRyX3JlZihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpm ZnMyX3hhdHRyX3JlZiAqcmVmKQogewogCS8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIGRvd25f d3JpdGUoeGF0dHJfc2VtKSAqLwotCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdzsK IAlzdHJ1Y3QgamZmczJfcmF3X3hyZWYgcnI7CiAJc2l6ZV90IGxlbmd0aDsKLQl1aW50MzJf dCBwaHlzX29mcyA9IHdyaXRlX29mcyhjKTsKKwl1aW50MzJfdCB4c2Vxbm8sIHBoeXNfb2Zz ID0gd3JpdGVfb2ZzKGMpOwogCWludCByZXQ7CiAKIAlyci5tYWdpYyA9IGNwdV90b19qZTE2 KEpGRlMyX01BR0lDX0JJVE1BU0spOwpAQCAtNTU4LDggKzUzNCwxNiBAQCBzdGF0aWMgaW50 IHNhdmVfeGF0dHJfcmVmKHN0cnVjdCBqZmZzMl9zCiAJcnIudG90bGVuID0gY3B1X3RvX2pl MzIoUEFEKHNpemVvZihycikpKTsKIAlyci5oZHJfY3JjID0gY3B1X3RvX2plMzIoY3JjMzIo MCwgJnJyLCBzaXplb2Yoc3RydWN0IGpmZnMyX3Vua25vd25fbm9kZSkgLSA0KSk7CiAKLQly ci5pbm8gPSBjcHVfdG9famUzMihyZWYtPmljLT5pbm8pOwotCXJyLnhpZCA9IGNwdV90b19q ZTMyKHJlZi0+eGQtPnhpZCk7CisJeHNlcW5vID0gKGMtPmhpZ2hlc3RfeHNlcW5vICs9IDIp OworCWlmIChpc194YXR0cl9yZWZfZGVhZChyZWYpKSB7CisJCXhzZXFubyB8PSBYUkVGX0RF TEVURV9NQVJLRVI7CisJCXJyLmlubyA9IGNwdV90b19qZTMyKHJlZi0+aW5vKTsKKwkJcnIu eGlkID0gY3B1X3RvX2plMzIocmVmLT54aWQpOworCX0gZWxzZSB7CisJCXJyLmlubyA9IGNw dV90b19qZTMyKHJlZi0+aWMtPmlubyk7CisJCXJyLnhpZCA9IGNwdV90b19qZTMyKHJlZi0+ eGQtPnhpZCk7CisJfQorCXJyLnhzZXFubyA9IGNwdV90b19qZTMyKHhzZXFubyk7CiAJcnIu bm9kZV9jcmMgPSBjcHVfdG9famUzMihjcmMzMigwLCAmcnIsIHNpemVvZihycikgLSA0KSk7 CiAKIAlyZXQgPSBqZmZzMl9mbGFzaF93cml0ZShjLCBwaHlzX29mcywgc2l6ZW9mKHJyKSwg Jmxlbmd0aCwgKGNoYXIgKikmcnIpOwpAQCAtNTcyLDEyICs1NTYsOSBAQCBzdGF0aWMgaW50 IHNhdmVfeGF0dHJfcmVmKHN0cnVjdCBqZmZzMl9zCiAKIAkJcmV0dXJuIHJldDsKIAl9Ci0K LQlyYXcgPSBqZmZzMl9hZGRfcGh5c2ljYWxfbm9kZV9yZWYoYywgcGh5c19vZnMgfCBSRUZf UFJJU1RJTkUsIFBBRChzaXplb2YocnIpKSwgTlVMTCk7Ci0JLyogRklYTUUgKi8gcmF3LT5u ZXh0X2luX2lubyA9ICh2b2lkICopcmVmOwotCWlmIChyZWYtPm5vZGUpCi0JCWRlbGV0ZV94 YXR0cl9yZWZfbm9kZShjLCByZWYpOwotCXJlZi0+bm9kZSA9IHJhdzsKKwkvKiBzdWNjZXNz ICovCisJcmVmLT54c2Vxbm8gPSB4c2Vxbm87CisJamZmczJfYWRkX3BoeXNpY2FsX25vZGVf cmVmKGMsIHBoeXNfb2ZzIHwgUkVGX1BSSVNUSU5FLCBQQUQoc2l6ZW9mKHJyKSksICh2b2lk ICopcmVmKTsKIAogCWRiZ194YXR0cigic3VjY2VzcyBvbiBzYXZpbmcgeHJlZiAoaW5vPSV1 LCB4aWQ9JXUpXG4iLCByZWYtPmljLT5pbm8sIHJlZi0+eGQtPnhpZCk7CiAKQEAgLTYxMCwy MiArNTkxLDExNiBAQCBzdGF0aWMgc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqY3JlYXRlX3hh CiAJcmV0dXJuIHJlZjsgLyogc3VjY2VzcyAqLwogfQogCitzdGF0aWMgdm9pZCBkZWxldGVf eGF0dHJfcmVmX2RlbGF5KHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJf eGF0dHJfcmVmICpyZWYpCit7CisJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgZG93bl93cml0 ZSh4YXR0cl9zZW0pICovCisJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZDsKKworCXNl dF94YXR0cl9yZWZfZGVhZChyZWYpOworCXhkID0gcmVmLT54ZDsKKwlyZWYtPmlubyA9IHJl Zi0+aWMtPmlubzsKKwlyZWYtPnhpZCA9IHJlZi0+eGQtPnhpZDsKKwlzcGluX2xvY2soJmMt PmVyYXNlX2NvbXBsZXRpb25fbG9jayk7CisJcmVmLT5uZXh0ID0gYy0+eHJlZl9kZWFkX2xp c3Q7CisJYy0+eHJlZl9kZWFkX2xpc3QgPSByZWY7CisJc3Bpbl91bmxvY2soJmMtPmVyYXNl X2NvbXBsZXRpb25fbG9jayk7CisKKwlKRkZTMl9OT1RJQ0UoInhyZWYoaW5vPSV1LCB4aWQ9 JXUpIHdhcyByZW1vdmVkIHdpdGhvdXQgZGVsZXRlIG1hcmtlci4gIgorCQkgICAgICJBbiBv cnBoYW4geHJlZiBtYXkgYmUgZGV0ZWN0ZWQgb24gbmV4dCBtb3VudGluZy5cbiIsCisJCSAg ICAgcmVmLT5pbm8sIHJlZi0+eGlkKTsKKworCWlmICghLS14ZC0+cmVmY250KQorCQlkZWxl dGVfeGF0dHJfZGF0dW1fZGVsYXkoYywgeGQpOworfQorCitzdGF0aWMgaW50IGRlbGV0ZV94 YXR0cl9yZWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9y ZWYgKnJlZiwgaW50IGVuZm9yY2UpCit7CisJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgamZm czJfcmVzZXJ2ZV9zcGFjZSgpIGFuZCBkb3duX3dyaXRlKHhhdHRyX3NlbSkgKi8KKwlzdHJ1 Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljOworCXN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAq eGQ7CisJdWludDMyX3QgbGVuZ3RoOworCWludCByYzsKKworCXNldF94YXR0cl9yZWZfZGVh ZChyZWYpOworCWljID0gcmVmLT5pYzsKKwl4ZCA9IHJlZi0+eGQ7CisJcmVmLT5pbm8gPSBp Yy0+aW5vOworCXJlZi0+eGlkID0geGQtPnhpZDsKKwlyYyA9IHNhdmVfeGF0dHJfcmVmKGMs IHJlZik7CisJaWYgKHJjKSB7CisJCWlmICghZW5mb3JjZSkgeworCQkJY2xyX3hhdHRyX3Jl Zl9kZWFkKHJlZik7CisJCQlyZWYtPmljID0gaWM7CisJCQlyZWYtPnhkID0geGQ7CisJCQly ZXR1cm4gcmM7CisJCX0KKwkJSkZGUzJfV0FSTklORygiY291bGQgbm90IHdyaXRlIGRlbGV0 ZSBtYXJrZXIgb2YgeHJlZihpbm89JXUsIHhpZD0ldSkuICIKKwkJCSAgICAgICJBbiBvcnBo YW4geHJlZiBtYXkgYmUgZGV0ZWN0ZWQgb24gbmV4dCBtb3VudGluZy5cbiIsCisJCQkgICAg ICByZWYtPmljLT5pbm8sIHJlZi0+eGQtPnhpZCk7CisJfQorCXNwaW5fbG9jaygmYy0+ZXJh c2VfY29tcGxldGlvbl9sb2NrKTsKKwlyZWYtPm5leHQgPSBjLT54cmVmX2RlYWRfbGlzdDsK KwljLT54cmVmX2RlYWRfbGlzdCA9IHJlZjsKKwlzcGluX3VubG9jaygmYy0+ZXJhc2VfY29t cGxldGlvbl9sb2NrKTsKKworCXhkLT5yZWZjbnQtLTsKKwlpZiAoeGQtPnJlZmNudCkKKwkJ cmV0dXJuIDA7CisKKwkvKiBkZWxldGUgeGRhdHVtICovCisJdW5sb2FkX3hhdHRyX2RhdHVt KGMsIHhkKTsKKwl1cF93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKwlqZmZzMl9jb21wbGV0ZV9y ZXNlcnZhdGlvbihjKTsKKworCXJjID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBQQUQoc2l6 ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeGF0dHIpKSwgJmxlbmd0aCwKKwkJCQkgQUxMT0NfREVM RVRJT04sIEpGRlMyX1NVTU1BUllfWEFUVFJfU0laRSk7CisJaWYgKHJjKSB7CisJCWRvd24o JmMtPmFsbG9jX3NlbSk7CisJCWRvd25fd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJCWRlbGV0 ZV94YXR0cl9kYXR1bV9kZWxheShjLCB4ZCk7CisJfSBlbHNlIHsKKwkJZG93bl93cml0ZSgm Yy0+eGF0dHJfc2VtKTsKKwkJZGVsZXRlX3hhdHRyX2RhdHVtKGMsIHhkKTsKKwl9CisJcmV0 dXJuIDA7Cit9CisKIHZvaWQgamZmczJfeGF0dHJfZGVsZXRlX2lub2RlKHN0cnVjdCBqZmZz Ml9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVfY2FjaGUgKmljKQogewogCS8qIEl0 J3MgY2FsbGVkIGZyb20gamZmczJfY2xlYXJfaW5vZGUoKSBvbiBpbm9kZSByZW1vdmluZy4K IAkgICBXaGVuIGFuIGlub2RlIHdpdGggWEFUVFIgaXMgcmVtb3ZlZCwgdGhvc2UgWEFUVFJz IG11c3QgYmUgcmVtb3ZlZC4gKi8KLQlzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWYsICpf cmVmOworCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZjsKKwl1aW50MzJfdCBsZW5ndGg7 CisJaW50IHJjLCByZXRyeTsKIAogCWlmICghaWMgfHwgaWMtPm5saW5rID4gMCkKIAkJcmV0 dXJuOwogCisJZG93bl9yZWFkKCZjLT54YXR0cl9zZW0pOworCWlmICghaWMtPnhyZWYpIHsK KwkJdXBfcmVhZCgmYy0+eGF0dHJfc2VtKTsKKwkJcmV0dXJuOworCX0KKwl1cF9yZWFkKCZj LT54YXR0cl9zZW0pOworIHJldHJ5OgorCXJjID0gamZmczJfcmVzZXJ2ZV9zcGFjZShjLCBQ QUQoc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeHJlZikpLCAmbGVuZ3RoLAorCQkJCSBBTExP Q19ERUxFVElPTiwgSkZGUzJfU1VNTUFSWV9YUkVGX1NJWkUpOwogCWRvd25fd3JpdGUoJmMt PnhhdHRyX3NlbSk7Ci0JZm9yIChyZWYgPSBpYy0+eHJlZjsgcmVmOyByZWYgPSBfcmVmKSB7 Ci0JCV9yZWYgPSByZWYtPm5leHQ7Ci0JCWRlbGV0ZV94YXR0cl9yZWYoYywgcmVmKTsKKwlp ZiAoaWMtPnhyZWYpIHsKKwkJcmVmID0gaWMtPnhyZWY7CisJCWljLT54cmVmID0gcmVmLT5u ZXh0OworCQlpZiAocmMpIHsKKwkJCWRlbGV0ZV94YXR0cl9yZWZfZGVsYXkoYywgcmVmKTsK KwkJfSBlbHNlIHsKKwkJCWRlbGV0ZV94YXR0cl9yZWYoYywgcmVmLCAxKTsKKwkJfQogCX0K LQlpYy0+eHJlZiA9IE5VTEw7CisJcmV0cnkgPSBpYy0+eHJlZiA/IDEgOiAwOwogCXVwX3dy aXRlKCZjLT54YXR0cl9zZW0pOworCWlmICghcmMpCisJCWpmZnMyX2NvbXBsZXRlX3Jlc2Vy dmF0aW9uKGMpOworCWlmIChyZXRyeSkKKwkJZ290byByZXRyeTsKIH0KIAogdm9pZCBqZmZz Ml94YXR0cl9mcmVlX2lub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZm czJfaW5vZGVfY2FjaGUgKmljKQpAQCAtNjU1LDcgKzczMCw3IEBAIHN0YXRpYyBpbnQgY2hl Y2tfeGF0dHJfcmVmX2lub2RlKHN0cnVjdCAKIAkgKiBkdXBsaWNhdGUgbmFtZS92YWx1ZSBw YWlycy4gSWYgZHVwbGljYXRlIG5hbWUvdmFsdWUgcGFpciB3b3VsZCBiZSBmb3VuZCwKIAkg KiBvbmUgd2lsbCBiZSByZW1vdmVkLgogCSAqLwotCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYg KnJlZiwgKmNtcCwgKipwcmVmOworCXN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZiwgKmNt cCwgKipwcmVmLCAqKnBjbXA7CiAJaW50IHJjID0gMDsKIAogCWlmIChsaWtlbHkoaWMtPmZs YWdzICYgSU5PX0ZMQUdTX1hBVFRSX0NIRUNLRUQpKQpAQCAtNjY4LDI3ICs3NDMsMzIgQEAg c3RhdGljIGludCBjaGVja194YXR0cl9yZWZfaW5vZGUoc3RydWN0IAogCQkJcmMgPSBsb2Fk X3hhdHRyX2RhdHVtKGMsIHJlZi0+eGQpOwogCQkJaWYgKHVubGlrZWx5KHJjID4gMCkpIHsK IAkJCQkqcHJlZiA9IHJlZi0+bmV4dDsKLQkJCQlkZWxldGVfeGF0dHJfcmVmKGMsIHJlZik7 CisJCQkJZGVsZXRlX3hhdHRyX3JlZl9kZWxheShjLCByZWYpOwogCQkJCWdvdG8gcmV0cnk7 CiAJCQl9IGVsc2UgaWYgKHVubGlrZWx5KHJjIDwgMCkpCiAJCQkJZ290byBvdXQ7CiAJCX0K LQkJZm9yIChjbXA9cmVmLT5uZXh0LCBwcmVmPSZyZWYtPm5leHQ7IGNtcDsgcHJlZj0mY21w LT5uZXh0LCBjbXA9Y21wLT5uZXh0KSB7CisJCWZvciAoY21wPXJlZi0+bmV4dCwgcGNtcD0m cmVmLT5uZXh0OyBjbXA7IHBjbXA9JmNtcC0+bmV4dCwgY21wPWNtcC0+bmV4dCkgewogCQkJ aWYgKCFjbXAtPnhkLT54bmFtZSkgewogCQkJCXJlZi0+eGQtPmZsYWdzIHw9IEpGRlMyX1hG TEFHU19CSU5EOwogCQkJCXJjID0gbG9hZF94YXR0cl9kYXR1bShjLCBjbXAtPnhkKTsKIAkJ CQlyZWYtPnhkLT5mbGFncyAmPSB+SkZGUzJfWEZMQUdTX0JJTkQ7CiAJCQkJaWYgKHVubGlr ZWx5KHJjID4gMCkpIHsKLQkJCQkJKnByZWYgPSBjbXAtPm5leHQ7Ci0JCQkJCWRlbGV0ZV94 YXR0cl9yZWYoYywgY21wKTsKKwkJCQkJKnBjbXAgPSBjbXAtPm5leHQ7CisJCQkJCWRlbGV0 ZV94YXR0cl9yZWZfZGVsYXkoYywgY21wKTsKIAkJCQkJZ290byByZXRyeTsKIAkJCQl9IGVs c2UgaWYgKHVubGlrZWx5KHJjIDwgMCkpCiAJCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJaWYg KHJlZi0+eGQtPnhwcmVmaXggPT0gY21wLT54ZC0+eHByZWZpeAogCQkJICAgICYmICFzdHJj bXAocmVmLT54ZC0+eG5hbWUsIGNtcC0+eGQtPnhuYW1lKSkgewotCQkJCSpwcmVmID0gY21w LT5uZXh0OwotCQkJCWRlbGV0ZV94YXR0cl9yZWYoYywgY21wKTsKKwkJCQlpZiAocmVmLT54 c2Vxbm8gPiBjbXAtPnhzZXFubykgeworCQkJCQkqcGNtcCA9IGNtcC0+bmV4dDsKKwkJCQkJ ZGVsZXRlX3hhdHRyX3JlZl9kZWxheShjLCBjbXApOworCQkJCX0gZWxzZSB7CisJCQkJCSpw cmVmID0gcmVmLT5uZXh0OworCQkJCQlkZWxldGVfeGF0dHJfcmVmX2RlbGF5KGMsIHJlZik7 CisJCQkJfQogCQkJCWdvdG8gcmV0cnk7CiAJCQl9CiAJCX0KQEAgLTcxOSw5ICs3OTksMTMg QEAgdm9pZCBqZmZzMl9pbml0X3hhdHRyX3N1YnN5c3RlbShzdHJ1Y3QgagogCWZvciAoaT0w OyBpIDwgWEFUVFJJTkRFWF9IQVNIU0laRTsgaSsrKQogCQlJTklUX0xJU1RfSEVBRCgmYy0+ eGF0dHJpbmRleFtpXSk7CiAJSU5JVF9MSVNUX0hFQUQoJmMtPnhhdHRyX3VuY2hlY2tlZCk7 CisJSU5JVF9MSVNUX0hFQUQoJmMtPnhhdHRyX2RlYWRfbGlzdCk7CisJYy0+eHJlZl9kZWFk X2xpc3QgPSBOVUxMOwogCWMtPnhyZWZfdGVtcCA9IE5VTEw7CiAKIAlpbml0X3J3c2VtKCZj LT54YXR0cl9zZW0pOworCWMtPmhpZ2hlc3RfeGlkID0gMDsKKwljLT5oaWdoZXN0X3hzZXFu byA9IDA7CiAJYy0+eGRhdHVtX21lbV91c2FnZSA9IDA7CiAJYy0+eGRhdHVtX21lbV90aHJl c2hvbGQgPSAzMiAqIDEwMjQ7CS8qIERlZmF1bHQgMzJLQiAqLwogfQpAQCAtNzUxLDcgKzgz NSwxMSBAQCB2b2lkIGpmZnMyX2NsZWFyX3hhdHRyX3N1YnN5c3RlbShzdHJ1Y3QgCiAJCV9y ZWYgPSByZWYtPm5leHQ7CiAJCWpmZnMyX2ZyZWVfeGF0dHJfcmVmKHJlZik7CiAJfQotCWMt PnhyZWZfdGVtcCA9IE5VTEw7CisKKwlmb3IgKHJlZj1jLT54cmVmX2RlYWRfbGlzdDsgcmVm OyByZWYgPSBfcmVmKSB7CisJCV9yZWYgPSByZWYtPm5leHQ7CisJCWpmZnMyX2ZyZWVfeGF0 dHJfcmVmKHJlZik7CisJfQogCiAJZm9yIChpPTA7IGkgPCBYQVRUUklOREVYX0hBU0hTSVpF OyBpKyspIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHhkLCBfeGQsICZjLT54YXR0 cmluZGV4W2ldLCB4aW5kZXgpIHsKQEAgLTc2MSw2NCArODQ5LDEyMCBAQCB2b2lkIGpmZnMy X2NsZWFyX3hhdHRyX3N1YnN5c3RlbShzdHJ1Y3QgCiAJCQlqZmZzMl9mcmVlX3hhdHRyX2Rh dHVtKHhkKTsKIAkJfQogCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh4ZCwgX3hk LCAmYy0+eGF0dHJfZGVhZF9saXN0LCB4aW5kZXgpIHsKKwkJbGlzdF9kZWwoJnhkLT54aW5k ZXgpOworCQlqZmZzMl9mcmVlX3hhdHRyX2RhdHVtKHhkKTsKKwl9CiB9CiAKKyNkZWZpbmUg WFJFRl9UTVBIQVNIX1NJWkUJKDEyOCkKIHZvaWQgamZmczJfYnVpbGRfeGF0dHJfc3Vic3lz dGVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjKQogewogCXN0cnVjdCBqZmZzMl94YXR0cl9y ZWYgKnJlZiwgKl9yZWY7CisJc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqeHJlZl90bXBoYXNo W1hSRUZfVE1QSEFTSF9TSVpFXTsKIAlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhkLCAq X3hkOwogCXN0cnVjdCBqZmZzMl9pbm9kZV9jYWNoZSAqaWM7Ci0JaW50IGksIHhkYXR1bV9j b3VudCA9MCwgeGRhdHVtX3VuY2hlY2tlZF9jb3VudCA9IDAsIHhyZWZfY291bnQgPSAwOwor CXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdzsKKwlpbnQgaSwgeGRhdHVtX2NvdW50 ID0gMCwgeGRhdHVtX3VuY2hlY2tlZF9jb3VudCA9IDAsIHhyZWZfY291bnQgPSAwOwogCiAJ QlVHX09OKCEoYy0+ZmxhZ3MgJiBKRkZTMl9TQl9GTEFHX0JVSUxESU5HKSk7CisJLyogUGhh c2UuMSA6IERyb3AgZGVhZCB4ZGF0dW0gKi8KKwlmb3IgKGk9MDsgaSA8IFhBVFRSSU5ERVhf SEFTSFNJWkU7IGkrKykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeGQsIF94ZCwg JmMtPnhhdHRyaW5kZXhbaV0sIHhpbmRleCkgeworCQkJQlVHX09OKHhkLT5ub2RlID09ICh2 b2lkICopeGQpOworCQkJaWYgKGlzX3hhdHRyX2RhdHVtX2RlYWQoeGQpKSB7CisJCQkJbGlz dF9kZWxfaW5pdCgmeGQtPnhpbmRleCk7CisJCQkJbGlzdF9hZGQoJnhkLT54aW5kZXgsICZj LT54YXR0cl91bmNoZWNrZWQpOworCQkJfQorCQl9CisJfQogCi0JLyogUGhhc2UuMSAqLwor CS8qIFBoYXNlLjIgOiBNZXJnZSBzYW1lIHhyZWYgKi8KKwlmb3IgKGk9MDsgaSA8IFhSRUZf VE1QSEFTSF9TSVpFOyBpKyspCisJCXhyZWZfdG1waGFzaFtpXSA9IE5VTEw7CiAJZm9yIChy ZWY9Yy0+eHJlZl90ZW1wOyByZWY7IHJlZj1fcmVmKSB7CisJCXN0cnVjdCBqZmZzMl94YXR0 cl9yZWYgKnRtcDsKKwogCQlfcmVmID0gcmVmLT5uZXh0OwotCQkvKiBjaGVja2luZyBSRUZf VU5DSEVDS0VEIG5vZGVzICovCiAJCWlmIChyZWZfZmxhZ3MocmVmLT5ub2RlKSAhPSBSRUZf UFJJU1RJTkUpIHsKIAkJCWlmICh2ZXJpZnlfeGF0dHJfcmVmKGMsIHJlZikpIHsKLQkJCQlk ZWxldGVfeGF0dHJfcmVmX25vZGUoYywgcmVmKTsKKwkJCQlCVUdfT04ocmVmLT5ub2RlLT5u ZXh0X2luX2lubyAhPSAodm9pZCAqKXJlZik7CisJCQkJcmVmLT5ub2RlLT5uZXh0X2luX2lu byA9IE5VTEw7CisJCQkJamZmczJfbWFya19ub2RlX29ic29sZXRlKGMsIHJlZi0+bm9kZSk7 CiAJCQkJamZmczJfZnJlZV94YXR0cl9yZWYocmVmKTsKIAkJCQljb250aW51ZTsKIAkJCX0K IAkJfQotCQkvKiBBdCB0aGlzIHBvaW50LCByZWYtPnhpZCBhbmQgcmVmLT5pbm8gY29udGFp biBYSUQgYW5kIGlub2RlIG51bWJlci4KLQkJICAgcmVmLT54ZCBhbmQgcmVmLT5pYyBhcmUg bm90IHZhbGlkIHlldC4gKi8KLQkJeGQgPSBqZmZzMl9maW5kX3hhdHRyX2RhdHVtKGMsIHJl Zi0+eGlkKTsKLQkJaWMgPSBqZmZzMl9nZXRfaW5vX2NhY2hlKGMsIHJlZi0+aW5vKTsKLQkJ aWYgKCF4ZCB8fCAhaWMpIHsKLQkJCWlmIChyZWZfZmxhZ3MocmVmLT5ub2RlKSAhPSBSRUZf VU5DSEVDS0VEKQotCQkJCUpGRlMyX1dBUk5JTkcoInhyZWYoaW5vPSV1LCB4aWQ9JXUpIGlz IG9ycGhhbi4gXG4iLAotCQkJCQkgICAgICByZWYtPmlubywgcmVmLT54aWQpOwotCQkJZGVs ZXRlX3hhdHRyX3JlZl9ub2RlKGMsIHJlZik7CisKKwkJaSA9IChyZWYtPmlubyBeIHJlZi0+ eGlkKSAlIFhSRUZfVE1QSEFTSF9TSVpFOworCQlmb3IgKHRtcD14cmVmX3RtcGhhc2hbaV07 IHRtcDsgdG1wPXRtcC0+bmV4dCkgeworCQkJaWYgKHRtcC0+aW5vID09IHJlZi0+aW5vICYm IHRtcC0+eGlkID09IHJlZi0+eGlkKQorCQkJCWJyZWFrOworCQl9CisJCWlmICh0bXApIHsK KwkJCXJhdyA9IHJlZi0+bm9kZTsKKwkJCWlmIChyZWYtPnhzZXFubyA+IHRtcC0+eHNlcW5v KSB7CisJCQkJdG1wLT54c2Vxbm8gPSByZWYtPnhzZXFubzsKKwkJCQlyYXctPm5leHRfaW5f aW5vID0gdG1wLT5ub2RlOworCQkJCXRtcC0+bm9kZSA9IHJhdzsKKwkJCX0gZWxzZSB7CisJ CQkJcmF3LT5uZXh0X2luX2lubyA9IHRtcC0+bm9kZS0+bmV4dF9pbl9pbm87CisJCQkJdG1w LT5ub2RlLT5uZXh0X2luX2lubyA9IHJhdzsKKwkJCX0KIAkJCWpmZnMyX2ZyZWVfeGF0dHJf cmVmKHJlZik7CiAJCQljb250aW51ZTsKKwkJfSBlbHNlIHsKKwkJCXJlZi0+bmV4dCA9IHhy ZWZfdG1waGFzaFtpXTsKKwkJCXhyZWZfdG1waGFzaFtpXSA9IHJlZjsKIAkJfQotCQlyZWYt PnhkID0geGQ7Ci0JCXJlZi0+aWMgPSBpYzsKLQkJeGQtPnJlZmNudCsrOwotCQlyZWYtPm5l eHQgPSBpYy0+eHJlZjsKLQkJaWMtPnhyZWYgPSByZWY7Ci0JCXhyZWZfY291bnQrKzsKIAl9 CiAJYy0+eHJlZl90ZW1wID0gTlVMTDsKLQkvKiBBZnRlciB0aGlzLCByZWYtPnhpZC9pbm8g YXJlIE5FVkVSIHVzZWQuICovCiAKLQkvKiBQaGFzZS4yICovCisJLyogUGhhc2UuMyA6IEJp bmQgeHJlZiB3aXRoIGlub2RlX2NhY2hlIGFuZCB4YXR0cl9kYXR1bSAqLworCWZvciAoaT0w OyBpIDwgWFJFRl9UTVBIQVNIX1NJWkU7IGkrKykgeworCQlmb3IgKHJlZj14cmVmX3RtcGhh c2hbaV07IHJlZjsgcmVmPV9yZWYpIHsKKwkJCV9yZWYgPSByZWYtPm5leHQ7CisJCQlpZiAo aXNfeGF0dHJfcmVmX2RlYWQocmVmKSkgeworCQkJCXJlZi0+bmV4dCA9IGMtPnhyZWZfZGVh ZF9saXN0OworCQkJCWMtPnhyZWZfZGVhZF9saXN0ID0gcmVmOworCQkJCWNvbnRpbnVlOwor CQkJfQorCQkJLyogQXQgdGhpcyBwb2ludCwgcmVmLT54aWQgYW5kIHJlZi0+aW5vIGNvbnRh aW4gWElEIGFuZCBpbm9kZSBudW1iZXIuCisJCQkgICByZWYtPnhkIGFuZCByZWYtPmljIGFy ZSBub3QgdmFsaWQgeWV0LiAqLworCQkJeGQgPSBqZmZzMl9maW5kX3hhdHRyX2RhdHVtKGMs IHJlZi0+eGlkKTsKKwkJCWljID0gamZmczJfZ2V0X2lub19jYWNoZShjLCByZWYtPmlubyk7 CisJCQlpZiAoIXhkIHx8ICFpYykgeworCQkJCUpGRlMyX1dBUk5JTkcoInhyZWYoaW5vPSV1 LCB4aWQ9JXUsIHhzZXFubz0ldSkgaXMgb3JwaGFuLiBcbiIsCisJCQkJCSAgICAgIHJlZi0+ aW5vLCByZWYtPnhpZCwgcmVmLT54c2Vxbm8pOworCQkJCXNldF94YXR0cl9yZWZfZGVhZChy ZWYpOworCQkJCXJlZi0+bmV4dCA9IGMtPnhyZWZfZGVhZF9saXN0OworCQkJCWMtPnhyZWZf ZGVhZF9saXN0ID0gcmVmOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJcmVmLT54ZCA9IHhk OworCQkJcmVmLT5pYyA9IGljOworCQkJeGQtPnJlZmNudCsrOworCQkJcmVmLT5uZXh0ID0g aWMtPnhyZWY7CisJCQlpYy0+eHJlZiA9IHJlZjsKKwkJCXhyZWZfY291bnQrKzsKKwkJfQor CX0KKworCS8qIFBoYXNlLjQgOiBMaW5rIHVuY2hlY2tlZCB4ZGF0dW0gdG8geGF0dHJfdW5j aGVja2VkIGxpc3QgKi8KIAlmb3IgKGk9MDsgaSA8IFhBVFRSSU5ERVhfSEFTSFNJWkU7IGkr KykgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeGQsIF94ZCwgJmMtPnhhdHRyaW5k ZXhbaV0sIHhpbmRleCkgewogCQkJbGlzdF9kZWxfaW5pdCgmeGQtPnhpbmRleCk7CiAJCQlp ZiAoIXhkLT5yZWZjbnQpIHsKLQkJCQlpZiAocmVmX2ZsYWdzKHhkLT5ub2RlKSAhPSBSRUZf VU5DSEVDS0VEKQotCQkJCQlKRkZTMl9XQVJOSU5HKCJvcnBoYW4geGRhdHVtKHhpZD0ldSwg dmVyc2lvbj0ldSkgYXQgJSMwOHhcbiIsCi0JCQkJCQkgICAgICB4ZC0+eGlkLCB4ZC0+dmVy c2lvbiwgcmVmX29mZnNldCh4ZC0+bm9kZSkpOwotCQkJCWRlbGV0ZV94YXR0cl9kYXR1bShj LCB4ZCk7CisJCQkJSkZGUzJfV0FSTklORygib3JwaGFuIHhkYXR1bSh4aWQ9JXUsIHZlcnNp b249JXUpXG4iLAorCQkJCQkgICAgICB4ZC0+eGlkLCB4ZC0+dmVyc2lvbik7CisJCQkJc2V0 X3hhdHRyX2RhdHVtX2RlYWQoeGQpOworCQkJCWxpc3RfYWRkKCZ4ZC0+eGluZGV4LCAmYy0+ eGF0dHJfdW5jaGVja2VkKTsKIAkJCQljb250aW51ZTsKIAkJCX0KLQkJCWlmIChyZWZfZmxh Z3MoeGQtPm5vZGUpICE9IFJFRl9QUklTVElORSkgewotCQkJCWRiZ194YXR0cigidW5jaGVj a2VkIHhkYXR1bSh4aWQ9JXUpIGF0ICUjMDh4XG4iLAotCQkJCQkgIHhkLT54aWQsIHJlZl9v ZmZzZXQoeGQtPm5vZGUpKTsKKwkJCWlmIChpc194YXR0cl9kYXR1bV91bmNoZWNrZWQoYywg eGQpKSB7CisJCQkJZGJnX3hhdHRyKCJ1bmNoZWNrZWQgeGRhdHVtKHhpZD0ldSwgdmVyc2lv bj0ldSlcbiIsCisJCQkJCSAgeGQtPnhpZCwgeGQtPnZlcnNpb24pOwogCQkJCWxpc3RfYWRk KCZ4ZC0+eGluZGV4LCAmYy0+eGF0dHJfdW5jaGVja2VkKTsKIAkJCQl4ZGF0dW1fdW5jaGVj a2VkX2NvdW50Kys7CiAJCQl9CkBAIC04MzMsMjggKzk3NywxOCBAQCB2b2lkIGpmZnMyX2J1 aWxkX3hhdHRyX3N1YnN5c3RlbShzdHJ1Y3QgCiBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0g KmpmZnMyX3NldHVwX3hhdHRyX2RhdHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLAogCQkJ CQkJICB1aW50MzJfdCB4aWQsIHVpbnQzMl90IHZlcnNpb24pCiB7Ci0Jc3RydWN0IGpmZnMy X3hhdHRyX2RhdHVtICp4ZCwgKl94ZDsKKwlzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKnhk OwogCi0JX3hkID0gamZmczJfZmluZF94YXR0cl9kYXR1bShjLCB4aWQpOwotCWlmIChfeGQp IHsKLQkJZGJnX3hhdHRyKCJkdXBsaWNhdGUgeGRhdHVtICh4aWQ9JXUsIHZlcnNpb249JXUv JXUpIGF0ICUjMDh4XG4iLAotCQkJICB4aWQsIHZlcnNpb24sIF94ZC0+dmVyc2lvbiwgcmVm X29mZnNldChfeGQtPm5vZGUpKTsKLQkJaWYgKHZlcnNpb24gPCBfeGQtPnZlcnNpb24pCi0J CQlyZXR1cm4gRVJSX1BUUigtRUVYSVNUKTsKLQl9Ci0JeGQgPSBqZmZzMl9hbGxvY194YXR0 cl9kYXR1bSgpOwotCWlmICgheGQpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCXhk LT54aWQgPSB4aWQ7Ci0JeGQtPnZlcnNpb24gPSB2ZXJzaW9uOwotCWlmICh4ZC0+eGlkID4g Yy0+aGlnaGVzdF94aWQpCi0JCWMtPmhpZ2hlc3RfeGlkID0geGQtPnhpZDsKLQlsaXN0X2Fk ZF90YWlsKCZ4ZC0+eGluZGV4LCAmYy0+eGF0dHJpbmRleFt4aWQgJSBYQVRUUklOREVYX0hB U0hTSVpFXSk7Ci0KLQlpZiAoX3hkKSB7Ci0JCWxpc3RfZGVsX2luaXQoJl94ZC0+eGluZGV4 KTsKLQkJZGVsZXRlX3hhdHRyX2RhdHVtX25vZGUoYywgX3hkKTsKLQkJamZmczJfZnJlZV94 YXR0cl9kYXR1bShfeGQpOworCXhkID0gamZmczJfZmluZF94YXR0cl9kYXR1bShjLCB4aWQp OworCWlmICgheGQpIHsKKwkJeGQgPSBqZmZzMl9hbGxvY194YXR0cl9kYXR1bSgpOworCQlp ZiAoIXhkKQorCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJCXhkLT54aWQgPSB4aWQ7 CisJCXhkLT52ZXJzaW9uID0gdmVyc2lvbjsKKwkJaWYgKHhkLT54aWQgPiBjLT5oaWdoZXN0 X3hpZCkKKwkJCWMtPmhpZ2hlc3RfeGlkID0geGQtPnhpZDsKKwkJbGlzdF9hZGRfdGFpbCgm eGQtPnhpbmRleCwgJmMtPnhhdHRyaW5kZXhbeGlkICUgWEFUVFJJTkRFWF9IQVNIU0laRV0p OwogCX0KIAlyZXR1cm4geGQ7CiB9CkBAIC05NDUsNyArMTA3OSw3IEBAIHNzaXplX3QgamZm czJfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKmQKIAkJCQlyYyA9IGxvYWRfeGF0dHJfZGF0 dW0oYywgeGQpOwogCQkJCWlmICh1bmxpa2VseShyYyA+IDApKSB7CiAJCQkJCSpwcmVmID0g cmVmLT5uZXh0OwotCQkJCQlkZWxldGVfeGF0dHJfcmVmKGMsIHJlZik7CisJCQkJCWRlbGV0 ZV94YXR0cl9yZWZfZGVsYXkoYywgcmVmKTsKIAkJCQkJZ290byByZXRyeTsKIAkJCQl9IGVs c2UgaWYgKHVubGlrZWx5KHJjIDwgMCkpCiAJCQkJCWdvdG8gb3V0OwpAQCAtMTAwNiw3ICsx MTQwLDcgQEAgaW50IGRvX2pmZnMyX2dldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZAogCQkJ CXJjID0gbG9hZF94YXR0cl9kYXR1bShjLCB4ZCk7CiAJCQkJaWYgKHVubGlrZWx5KHJjID4g MCkpIHsKIAkJCQkJKnByZWYgPSByZWYtPm5leHQ7Ci0JCQkJCWRlbGV0ZV94YXR0cl9yZWYo YywgcmVmKTsKKwkJCQkJZGVsZXRlX3hhdHRyX3JlZl9kZWxheShjLCByZWYpOwogCQkJCQln b3RvIHJldHJ5OwogCQkJCX0gZWxzZSBpZiAodW5saWtlbHkocmMgPCAwKSkgewogCQkJCQln b3RvIG91dDsKQEAgLTEwNjksNyArMTIwMyw3IEBAIGludCBkb19qZmZzMl9zZXR4YXR0cihz dHJ1Y3QgaW5vZGUgKmlub2QKIAkJCXJjID0gbG9hZF94YXR0cl9kYXR1bShjLCB4ZCk7CiAJ CQlpZiAodW5saWtlbHkocmMgPiAwKSkgewogCQkJCSpwcmVmID0gcmVmLT5uZXh0OwotCQkJ CWRlbGV0ZV94YXR0cl9yZWYoYywgcmVmKTsKKwkJCQlkZWxldGVfeGF0dHJfcmVmX2RlbGF5 KGMsIHJlZik7CiAJCQkJZ290byByZXRyeTsKIAkJCX0gZWxzZSBpZiAodW5saWtlbHkocmMg PCAwKSkKIAkJCQlnb3RvIG91dDsKQEAgLTEwODEsOCArMTIxNSw3IEBAIGludCBkb19qZmZz Ml9zZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2QKIAkJCX0KIAkJCWlmICghYnVmZmVyKSB7 CiAJCQkJKnByZWYgPSByZWYtPm5leHQ7Ci0JCQkJZGVsZXRlX3hhdHRyX3JlZihjLCByZWYp OwotCQkJCXJjID0gMDsKKwkJCQlyYyA9IGRlbGV0ZV94YXR0cl9yZWYoYywgcmVmLCAwKTsK IAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJCWdvdG8gZm91bmQ7CkBAIC0xMDk0LDcgKzEyMjcs NyBAQCBpbnQgZG9famZmczJfc2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kCiAJCWdvdG8g b3V0OwogCX0KIAlpZiAoIWJ1ZmZlcikgewotCQlyYyA9IC1FSU5WQUw7CisJCXJjID0gLUVO T0RBVEE7CiAJCWdvdG8gb3V0OwogCX0KICBmb3VuZDoKQEAgLTExMTAsMTYgKzEyNDMsMTUg QEAgaW50IGRvX2pmZnMyX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZAogCXJlcXVlc3Qg PSBQQUQoc2l6ZW9mKHN0cnVjdCBqZmZzMl9yYXdfeHJlZikpOwogCXJjID0gamZmczJfcmVz ZXJ2ZV9zcGFjZShjLCByZXF1ZXN0LCAmbGVuZ3RoLAogCQkJCSBBTExPQ19OT1JNQUwsIEpG RlMyX1NVTU1BUllfWFJFRl9TSVpFKTsKKwlkb3duX3dyaXRlKCZjLT54YXR0cl9zZW0pOwog CWlmIChyYykgewogCQlKRkZTMl9XQVJOSU5HKCJqZmZzMl9yZXNlcnZlX3NwYWNlKCk9JWQs IHJlcXVlc3Q9JXVcbiIsIHJjLCByZXF1ZXN0KTsKLQkJZG93bl93cml0ZSgmYy0+eGF0dHJf c2VtKTsKIAkJeGQtPnJlZmNudC0tOwogCQlpZiAoIXhkLT5yZWZjbnQpCi0JCQlkZWxldGVf eGF0dHJfZGF0dW0oYywgeGQpOworCQkJZGVsZXRlX3hhdHRyX2RhdHVtX2RlbGF5KGMsIHhk KTsKIAkJdXBfd3JpdGUoJmMtPnhhdHRyX3NlbSk7CiAJCXJldHVybiByYzsKIAl9Ci0JZG93 bl93cml0ZSgmYy0+eGF0dHJfc2VtKTsKIAlpZiAocmVmKQogCQkqcHJlZiA9IHJlZi0+bmV4 dDsKIAluZXdyZWYgPSBjcmVhdGVfeGF0dHJfcmVmKGMsIGljLCB4ZCk7CkBAIC0xMTMxLDkg KzEyNjMsMjEgQEAgaW50IGRvX2pmZnMyX3NldHhhdHRyKHN0cnVjdCBpbm9kZSAqaW5vZAog CQlyYyA9IFBUUl9FUlIobmV3cmVmKTsKIAkJeGQtPnJlZmNudC0tOwogCQlpZiAoIXhkLT5y ZWZjbnQpCi0JCQlkZWxldGVfeGF0dHJfZGF0dW0oYywgeGQpOworCQkJZGVsZXRlX3hhdHRy X2RhdHVtX2RlbGF5KGMsIHhkKTsKIAl9IGVsc2UgaWYgKHJlZikgewotCQlkZWxldGVfeGF0 dHJfcmVmKGMsIHJlZik7CisJCXVwX3dyaXRlKCZjLT54YXR0cl9zZW0pOworCQlqZmZzMl9j b21wbGV0ZV9yZXNlcnZhdGlvbihjKTsKKworCQlyYyA9IGpmZnMyX3Jlc2VydmVfc3BhY2Uo YywgcmVxdWVzdCwgJmxlbmd0aCwKKwkJCQkJIEFMTE9DX0RFTEVUSU9OLCBKRkZTMl9TVU1N QVJZX1hSRUZfU0laRSk7CisJCWRvd25fd3JpdGUoJmMtPnhhdHRyX3NlbSk7CisJCWlmIChy YykgeworCQkJSkZGUzJfV0FSTklORygiamZmczJfcmVzZXJ2ZV9zcGFjZSgpPSVkLCByZXF1 ZXN0PSV1XG4iLCByYywgcmVxdWVzdCk7CisJCQlkZWxldGVfeGF0dHJfcmVmX2RlbGF5KGMs IHJlZik7CisJCQl1cF93cml0ZSgmYy0+eGF0dHJfc2VtKTsKKwkJCXJldHVybiAwOworCQl9 CisJCWRlbGV0ZV94YXR0cl9yZWYoYywgcmVmLCAxKTsKIAl9CiAgb3V0OgogCXVwX3dyaXRl KCZjLT54YXR0cl9zZW0pOwpAQCAtMTE0MiwzOCArMTI4NiwzNyBAQCBpbnQgZG9famZmczJf c2V0eGF0dHIoc3RydWN0IGlub2RlICppbm9kCiB9CiAKIC8qIC0tLS0tLS0tIGdhcmJhZ2Ug Y29sbGVjdG9yIGZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tCi0gKiBqZmZzMl9nYXJiYWdlX2Nv bGxlY3RfeGF0dHJfZGF0dW0oYywgeGQpCisgKiBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfeGF0 dHJfZGF0dW0oYywgeGQsIHJhdykKICAqICAgaXMgdXNlZCB0byBtb3ZlIHhkYXR1bSBpbnRv IG5ldyBub2RlLgotICogamZmczJfZ2FyYmFnZV9jb2xsZWN0X3hhdHRyX3JlZihjLCByZWYp CisgKiBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfeGF0dHJfcmVmKGMsIHJlZiwgcmF3KQogICog ICBpcyB1c2VkIHRvIG1vdmUgeHJlZiBpbnRvIG5ldyBub2RlLgogICogamZmczJfdmVyaWZ5 X3hhdHRyKGMpCiAgKiAgIGlzIHVzZWQgdG8gY2FsbCBkb192ZXJpZnlfeGF0dHJfZGF0dW0o KSBiZWZvcmUgZ2FyYmFnZSBjb2xsZWN0aW5nLgogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLWludCBqZmZzMl9nYXJiYWdlX2Nv bGxlY3RfeGF0dHJfZGF0dW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZz Ml94YXR0cl9kYXR1bSAqeGQpCitpbnQgamZmczJfZ2FyYmFnZV9jb2xsZWN0X3hhdHRyX2Rh dHVtKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0g KnhkLAorCQkJCSAgICAgIHN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYgKnJhdykKIHsKIAl1 aW50MzJfdCB0b3RsZW4sIGxlbmd0aCwgb2xkX29mczsKLQlpbnQgcmMgPSAtRUlOVkFMOwor CWludCByYyA9IDA7CiAKIAlkb3duX3dyaXRlKCZjLT54YXR0cl9zZW0pOwotCUJVR19PTigh eGQtPm5vZGUpOworCWlmICh4ZC0+bm9kZSAhPSByYXcpCisJCWdvdG8gb3V0OworCWlmIChp c194YXR0cl9kYXR1bV9kZWFkKHhkKSAmJiAocmF3LT5uZXh0X2luX2lubyA9PSAodm9pZCAq KXhkKSkKKwkJZ290byBvdXQ7CiAKIAlvbGRfb2ZzID0gcmVmX29mZnNldCh4ZC0+bm9kZSk7 CiAJdG90bGVuID0gcmVmX3RvdGxlbihjLCBjLT5nY2Jsb2NrLCB4ZC0+bm9kZSk7Ci0JaWYg KHRvdGxlbiA8IHNpemVvZihzdHJ1Y3QgamZmczJfcmF3X3hhdHRyKSkKLQkJZ290byBvdXQ7 CiAKLQlpZiAoIXhkLT54bmFtZSkgeworCWlmICghaXNfeGF0dHJfZGF0dW1fZGVhZCh4ZCkp IHsKIAkJcmMgPSBsb2FkX3hhdHRyX2RhdHVtKGMsIHhkKTsKLQkJaWYgKHVubGlrZWx5KHJj ID4gMCkpIHsKLQkJCWRlbGV0ZV94YXR0cl9kYXR1bV9ub2RlKGMsIHhkKTsKLQkJCXJjID0g MDsKLQkJCWdvdG8gb3V0OwotCQl9IGVsc2UgaWYgKHVubGlrZWx5KHJjIDwgMCkpCisJCWlm ICh1bmxpa2VseShyYyA8IDApKQogCQkJZ290byBvdXQ7CiAJfQorCiAJcmMgPSBqZmZzMl9y ZXNlcnZlX3NwYWNlX2djKGMsIHRvdGxlbiwgJmxlbmd0aCwgSkZGUzJfU1VNTUFSWV9YQVRU Ul9TSVpFKTsKLQlpZiAocmMgfHwgbGVuZ3RoIDwgdG90bGVuKSB7Ci0JCUpGRlMyX1dBUk5J TkcoImpmZnMyX3Jlc2VydmVfc3BhY2UoKT0lZCwgcmVxdWVzdD0ldVxuIiwgcmMsIHRvdGxl bik7CisJaWYgKHJjKSB7CisJCUpGRlMyX1dBUk5JTkcoImpmZnMyX3Jlc2VydmVfc3BhY2Vf Z2MoKT0lZCwgcmVxdWVzdD0ldVxuIiwgcmMsIHRvdGxlbik7CiAJCXJjID0gcmMgPyByYyA6 IC1FQkFERkQ7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTExODIsMjcgKzEzMjUsMzMgQEAgaW50 IGpmZnMyX2dhcmJhZ2VfY29sbGVjdF94YXR0cl9kYXR1bShzdAogCQlkYmdfeGF0dHIoInhk YXR1bSAoeGlkPSV1LCB2ZXJzaW9uPSV1KSBHQydlZCBmcm9tICUjMDh4IHRvICUwOHhcbiIs CiAJCQkgIHhkLT54aWQsIHhkLT52ZXJzaW9uLCBvbGRfb2ZzLCByZWZfb2Zmc2V0KHhkLT5u b2RlKSk7CiAgb3V0OgorCWlmICghcmMpCisJCWpmZnMyX21hcmtfbm9kZV9vYnNvbGV0ZShj LCByYXcpOwogCXVwX3dyaXRlKCZjLT54YXR0cl9zZW0pOwogCXJldHVybiByYzsKIH0KIAog Ci1pbnQgamZmczJfZ2FyYmFnZV9jb2xsZWN0X3hhdHRyX3JlZihzdHJ1Y3QgamZmczJfc2Jf aW5mbyAqYywgc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmKQoraW50IGpmZnMyX2dhcmJh Z2VfY29sbGVjdF94YXR0cl9yZWYoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBq ZmZzMl94YXR0cl9yZWYgKnJlZiwKKwkJCQkgICAgc3RydWN0IGpmZnMyX3Jhd19ub2RlX3Jl ZiAqcmF3KQogewogCXVpbnQzMl90IHRvdGxlbiwgbGVuZ3RoLCBvbGRfb2ZzOwotCWludCBy YyA9IC1FSU5WQUw7CisJaW50IHJjID0gMDsKIAogCWRvd25fd3JpdGUoJmMtPnhhdHRyX3Nl bSk7CiAJQlVHX09OKCFyZWYtPm5vZGUpOwogCisJaWYgKHJlZi0+bm9kZSAhPSByYXcpCisJ CWdvdG8gb3V0OworCWlmIChpc194YXR0cl9yZWZfZGVhZChyZWYpICYmIChyYXctPm5leHRf aW5faW5vID09ICh2b2lkICopcmVmKSkKKwkJZ290byBvdXQ7CisKIAlvbGRfb2ZzID0gcmVm X29mZnNldChyZWYtPm5vZGUpOwogCXRvdGxlbiA9IHJlZl90b3RsZW4oYywgYy0+Z2NibG9j aywgcmVmLT5ub2RlKTsKLQlpZiAodG90bGVuICE9IHNpemVvZihzdHJ1Y3QgamZmczJfcmF3 X3hyZWYpKQotCQlnb3RvIG91dDsKIAogCXJjID0gamZmczJfcmVzZXJ2ZV9zcGFjZV9nYyhj LCB0b3RsZW4sICZsZW5ndGgsIEpGRlMyX1NVTU1BUllfWFJFRl9TSVpFKTsKLQlpZiAocmMg fHwgbGVuZ3RoIDwgdG90bGVuKSB7Ci0JCUpGRlMyX1dBUk5JTkcoIiVzOiBqZmZzMl9yZXNl cnZlX3NwYWNlKCkgPSAlZCwgcmVxdWVzdCA9ICV1XG4iLAorCWlmIChyYykgeworCQlKRkZT Ml9XQVJOSU5HKCIlczogamZmczJfcmVzZXJ2ZV9zcGFjZV9nYygpID0gJWQsIHJlcXVlc3Qg PSAldVxuIiwKIAkJCSAgICAgIF9fRlVOQ1RJT05fXywgcmMsIHRvdGxlbik7CiAJCXJjID0g cmMgPyByYyA6IC1FQkFERkQ7CiAJCWdvdG8gb3V0OwpAQCAtMTIxMiw2ICsxMzYxLDggQEAg aW50IGpmZnMyX2dhcmJhZ2VfY29sbGVjdF94YXR0cl9yZWYoc3RydQogCQlkYmdfeGF0dHIo InhyZWYgKGlubz0ldSwgeGlkPSV1KSBHQydlZCBmcm9tICUjMDh4IHRvICUwOHhcbiIsCiAJ CQkgIHJlZi0+aWMtPmlubywgcmVmLT54ZC0+eGlkLCBvbGRfb2ZzLCByZWZfb2Zmc2V0KHJl Zi0+bm9kZSkpOwogIG91dDoKKwlpZiAoIXJjKQorCQlqZmZzMl9tYXJrX25vZGVfb2Jzb2xl dGUoYywgcmF3KTsKIAl1cF93cml0ZSgmYy0+eGF0dHJfc2VtKTsKIAlyZXR1cm4gcmM7CiB9 CkBAIC0xMjE5LDIwICsxMzcwLDU5IEBAIGludCBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfeGF0 dHJfcmVmKHN0cnUKIGludCBqZmZzMl92ZXJpZnlfeGF0dHIoc3RydWN0IGpmZnMyX3NiX2lu Zm8gKmMpCiB7CiAJc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZCwgKl94ZDsKKwlzdHJ1 Y3QgamZmczJfZXJhc2VibG9jayAqamViOworCXN0cnVjdCBqZmZzMl9yYXdfbm9kZV9yZWYg KnJhdzsKKwl1aW50MzJfdCB0b3RsZW47CiAJaW50IHJjOwogCiAJZG93bl93cml0ZSgmYy0+ eGF0dHJfc2VtKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoeGQsIF94ZCwgJmMtPnhh dHRyX3VuY2hlY2tlZCwgeGluZGV4KSB7CiAJCXJjID0gZG9fdmVyaWZ5X3hhdHRyX2RhdHVt KGMsIHhkKTsKLQkJaWYgKHJjID09IDApIHsKLQkJCWxpc3RfZGVsX2luaXQoJnhkLT54aW5k ZXgpOwotCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAocmMgPiAwKSB7Ci0JCQlsaXN0X2RlbF9p bml0KCZ4ZC0+eGluZGV4KTsKLQkJCWRlbGV0ZV94YXR0cl9kYXR1bV9ub2RlKGMsIHhkKTsK KwkJaWYgKHJjIDwgMCkKKwkJCWNvbnRpbnVlOworCQlsaXN0X2RlbF9pbml0KCZ4ZC0+eGlu ZGV4KTsKKwkJc3Bpbl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spOworCQlmb3Ig KHJhdz14ZC0+bm9kZTsgcmF3ICE9ICh2b2lkICopeGQ7IHJhdz1yYXctPm5leHRfaW5faW5v KSB7CisJCQlpZiAocmVmX2ZsYWdzKHJhdykgIT0gUkVGX1VOQ0hFQ0tFRCkKKwkJCQljb250 aW51ZTsKKwkJCWplYiA9ICZjLT5ibG9ja3NbcmVmX29mZnNldChyYXcpIC8gYy0+c2VjdG9y X3NpemVdOworCQkJdG90bGVuID0gUEFEKHJlZl90b3RsZW4oYywgamViLCByYXcpKTsKKwkJ CWMtPnVuY2hlY2tlZF9zaXplIC09IHRvdGxlbjsgYy0+dXNlZF9zaXplICs9IHRvdGxlbjsK KwkJCWplYi0+dW5jaGVja2VkX3NpemUgLT0gdG90bGVuOyBqZWItPnVzZWRfc2l6ZSArPSB0 b3RsZW47CisJCQlyYXctPmZsYXNoX29mZnNldCA9IHJlZl9vZmZzZXQocmF3KQorCQkJCXwg KCh4ZC0+bm9kZSA9PSAodm9pZCAqKXJhdykgPyBSRUZfUFJJU1RJTkUgOiBSRUZfTk9STUFM KTsKIAkJfQorCQlpZiAoaXNfeGF0dHJfZGF0dW1fZGVhZCh4ZCkpCisJCQlsaXN0X2FkZCgm eGQtPnhpbmRleCwgJmMtPnhhdHRyX2RlYWRfbGlzdCk7CisJCXNwaW5fdW5sb2NrKCZjLT5l cmFzZV9jb21wbGV0aW9uX2xvY2spOwogCX0KIAl1cF93cml0ZSgmYy0+eGF0dHJfc2VtKTsK LQogCXJldHVybiBsaXN0X2VtcHR5KCZjLT54YXR0cl91bmNoZWNrZWQpID8gMSA6IDA7CiB9 CisKK3ZvaWQgamZmczJfcmVsZWFzZV94YXR0cl9kYXR1bShzdHJ1Y3QgamZmczJfc2JfaW5m byAqYywgc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4ZCkKK3sKKwkvKiBtdXN0IGJlIGNh bGxlZCB1bmRlciBzcGluX2xvY2soJmMtPmVyYXNlX2NvbXBsZXRpb25fbG9jaykgKi8KKwlp ZiAoeGQtPm5vZGUgIT0gKHZvaWQgKil4ZCkKKwkJcmV0dXJuOworCisJbGlzdF9kZWwoJnhk LT54aW5kZXgpOworCWpmZnMyX2ZyZWVfeGF0dHJfZGF0dW0oeGQpOworfQorCit2b2lkIGpm ZnMyX3JlbGVhc2VfeGF0dHJfcmVmKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3Qg amZmczJfeGF0dHJfcmVmICpyZWYpCit7CisJLyogbXVzdCBiZSBjYWxsZWQgdW5kZXIgc3Bp bl9sb2NrKCZjLT5lcmFzZV9jb21wbGV0aW9uX2xvY2spICovCisJc3RydWN0IGpmZnMyX3hh dHRyX3JlZiAqdG1wLCAqKnB0bXA7CisKKwlpZiAocmVmLT5ub2RlICE9ICh2b2lkICopcmVm KQorCQlyZXR1cm47CisKKwlmb3IgKHRtcD1jLT54cmVmX2RlYWRfbGlzdCwgcHRtcD0mYy0+ eHJlZl9kZWFkX2xpc3Q7IHRtcDsgcHRtcD0mdG1wLT5uZXh0LCB0bXA9dG1wLT5uZXh0KSB7 CisJCWlmIChyZWYgPT0gdG1wKSB7CisJCQkqcHRtcCA9IHRtcC0+bmV4dDsKKwkJCWpmZnMy X2ZyZWVfeGF0dHJfcmVmKHJlZik7CisJCQlicmVhazsKKwkJfQorCX0KK30KZGlmZiAtLWdp dCBhL2ZzL2pmZnMyL3hhdHRyLmggYi9mcy9qZmZzMi94YXR0ci5oCmluZGV4IDJjMTk5ODUu LjA2YWI3YjggMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3hhdHRyLmgKKysrIGIvZnMvamZmczIv eGF0dHIuaApAQCAtMTYsNiArMTYsNyBAQCAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogCiAj ZGVmaW5lIEpGRlMyX1hGTEFHU19IT1QJKDB4MDEpCS8qIFRoaXMgZGF0dW0gaXMgSE9UICov CiAjZGVmaW5lIEpGRlMyX1hGTEFHU19CSU5ECSgweDAyKQkvKiBUaGlzIGRhdHVtIGlzIG5v dCByZWNsYWltZWQgKi8KKyNkZWZpbmUgSkZGUzJfWEZMQUdTX0lOVkFMSUQJKDB4ODApCS8q IFRoaXMgZGF0dW0gY29udGFpbnMgY3JjIGVycm9yICovCiAKIHN0cnVjdCBqZmZzMl94YXR0 cl9kYXR1bQogewpAQCAtMjMsNyArMjQsNyBAQCBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0K IAlzdHJ1Y3QgamZmczJfcmF3X25vZGVfcmVmICpub2RlOwogCXVpbnQ4X3QgY2xhc3M7CiAJ dWludDhfdCBmbGFnczsKLQl1aW50MTZfdCB4cHJlZml4OwkJCS8qIHNlZSBKRkZTMl9YQVRU Ul9QUkVGSVhfKiAqLworCXVpbnQxNl90IHhwcmVmaXg7CQkvKiBzZWUgSkZGUzJfWEFUVFJf UFJFRklYXyogKi8KIAogCXN0cnVjdCBsaXN0X2hlYWQgeGluZGV4OwkvKiBjaGFpbmVkIGZy b20gYy0+eGF0dHJpbmRleFtuXSAqLwogCXVpbnQzMl90IHJlZmNudDsJCS8qICMgb2YgeGF0 dHJfcmVmIHJlZmVycyB0aGlzICovCkBAIC00Nyw2ICs0OCw3IEBAIHN0cnVjdCBqZmZzMl94 YXR0cl9yZWYKIAl1aW50OF90IGZsYWdzOwkJLyogQ3VycmVudGx5IHVudXNlZCAqLwogCXUx NiB1bnVzZWQ7CiAKKwl1aW50MzJfdCB4c2Vxbm87CiAJdW5pb24gewogCQlzdHJ1Y3QgamZm czJfaW5vZGVfY2FjaGUgKmljOwkvKiByZWZlcmVuY2UgdG8gamZmczJfaW5vZGVfY2FjaGUg Ki8KIAkJdWludDMyX3QgaW5vOwkJCS8qIG9ubHkgdXNlZCBpbiBzY2FubmluZy9idWlsZGlu ZyAgKi8KQEAgLTU4LDYgKzYwLDM0IEBAIHN0cnVjdCBqZmZzMl94YXR0cl9yZWYKIAlzdHJ1 Y3QgamZmczJfeGF0dHJfcmVmICpuZXh0OwkJLyogY2hhaW5lZCBmcm9tIGljLT54cmVmX2xp c3QgKi8KIH07CiAKKyNkZWZpbmUgWERBVFVNX0RFTEVURV9NQVJLRVIJKDB4ZmZmZmZmZmYp CisjZGVmaW5lIFhSRUZfREVMRVRFX01BUktFUgkoMHgwMDAwMDAwMSkKK3N0YXRpYyBpbmxp bmUgaW50IGlzX3hhdHRyX2RhdHVtX2RlYWQoc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4 ZCkKK3sKKwlyZXR1cm4gKHhkLT52ZXJzaW9uID09IFhEQVRVTV9ERUxFVEVfTUFSS0VSKTsK K30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF94YXR0cl9kYXR1bV9kZWFkKHN0cnVjdCBq ZmZzMl94YXR0cl9kYXR1bSAqeGQpCit7CisJeGQtPnZlcnNpb24gPSBYREFUVU1fREVMRVRF X01BUktFUjsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfeGF0dHJfcmVmX2RlYWQoc3Ry dWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmKQoreworCXJldHVybiAoKHJlZi0+eHNlcW5vICYg WFJFRl9ERUxFVEVfTUFSS0VSKSAhPSAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNl dF94YXR0cl9yZWZfZGVhZChzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWYpCit7CisJcmVm LT54c2Vxbm8gfD0gWFJFRl9ERUxFVEVfTUFSS0VSOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgY2xyX3hhdHRyX3JlZl9kZWFkKHN0cnVjdCBqZmZzMl94YXR0cl9yZWYgKnJlZikKK3sK KwlyZWYtPnhzZXFubyAmPSB+WFJFRl9ERUxFVEVfTUFSS0VSOworfQorCisKICNpZmRlZiBD T05GSUdfSkZGUzJfRlNfWEFUVFIKIAogZXh0ZXJuIHZvaWQgamZmczJfaW5pdF94YXR0cl9z dWJzeXN0ZW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMpOwpAQCAtNzAsOSArMTAwLDEzIEBA IGV4dGVybiBzdHJ1Y3QgamZmczJfeGF0dHJfZGF0dW0gKmpmZnMyX3MKIGV4dGVybiB2b2lk IGpmZnMyX3hhdHRyX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3Ry dWN0IGpmZnMyX2lub2RlX2NhY2hlICppYyk7CiBleHRlcm4gdm9pZCBqZmZzMl94YXR0cl9m cmVlX2lub2RlKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfaW5vZGVf Y2FjaGUgKmljKTsKIAotZXh0ZXJuIGludCBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfeGF0dHJf ZGF0dW0oc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1 bSAqeGQpOwotZXh0ZXJuIGludCBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfeGF0dHJfcmVmKHN0 cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfeGF0dHJfcmVmICpyZWYpOwor ZXh0ZXJuIGludCBqZmZzMl9nYXJiYWdlX2NvbGxlY3RfeGF0dHJfZGF0dW0oc3RydWN0IGpm ZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl94YXR0cl9kYXR1bSAqeGQsCisJCQkJCSAg ICAgc3RydWN0IGpmZnMyX3Jhd19ub2RlX3JlZiAqcmF3KTsKK2V4dGVybiBpbnQgamZmczJf Z2FyYmFnZV9jb2xsZWN0X3hhdHRyX3JlZihzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3Ry dWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmLAorCQkJCQkgICBzdHJ1Y3QgamZmczJfcmF3X25v ZGVfcmVmICpyYXcpOwogZXh0ZXJuIGludCBqZmZzMl92ZXJpZnlfeGF0dHIoc3RydWN0IGpm ZnMyX3NiX2luZm8gKmMpOworZXh0ZXJuIHZvaWQgamZmczJfcmVsZWFzZV94YXR0cl9kYXR1 bShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3hhdHRyX2RhdHVtICp4 ZCk7CitleHRlcm4gdm9pZCBqZmZzMl9yZWxlYXNlX3hhdHRyX3JlZihzdHJ1Y3QgamZmczJf c2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX3hhdHRyX3JlZiAqcmVmKTsKIAogZXh0ZXJuIGlu dCBkb19qZmZzMl9nZXR4YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgeHByZWZpeCwg Y29uc3QgY2hhciAqeG5hbWUsCiAJCQkgICAgIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUp Owo= --------------050906050702040100070209 Content-Type: text/plain; name="jffs2-xattr-v6-02-fix_posixacl_bug.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="jffs2-xattr-v6-02-fix_posixacl_bug.patch" ZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2FjbC5jIGIvZnMvamZmczIvYWNsLmMKaW5kZXggMzIw ZGQ0OC4uOWMyMDc3ZSAxMDA2NDQKLS0tIGEvZnMvamZmczIvYWNsLmMKKysrIGIvZnMvamZm czIvYWNsLmMKQEAgLTI2Nyw2ICsyNjcsOCBAQCBzdGF0aWMgaW50IGpmZnMyX3NldF9hY2wo c3RydWN0IGlub2RlICppCiAJfQogCiAJcmMgPSBkb19qZmZzMl9zZXR4YXR0cihpbm9kZSwg eHByZWZpeCwgIiIsIHZhbHVlLCBzaXplLCAwKTsKKwlpZiAoIXZhbHVlICYmIHJjID09IC1F Tk9EQVRBKQorCQlyYyA9IDA7CiAJaWYgKHZhbHVlKQogCQlrZnJlZSh2YWx1ZSk7CiAJaWYg KCFyYykgewo= --------------050906050702040100070209--