From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1760862AbYFTPjL (ORCPT ); Fri, 20 Jun 2008 11:39:11 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1758311AbYFTPi4 (ORCPT ); Fri, 20 Jun 2008 11:38:56 -0400 Received: from twinlark.arctic.org ([208.69.40.136]:33256 "EHLO twinlark.arctic.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756749AbYFTPiy (ORCPT ); Fri, 20 Jun 2008 11:38:54 -0400 Message-ID: <485BCEEB.30105@kernel.org> Date: Fri, 20 Jun 2008 08:38:19 -0700 From: "Andrew G. Morgan" User-Agent: Thunderbird 2.0.0.14 (X11/20080421) MIME-Version: 1.0 To: David Howells , "Serge E. Hallyn" , Andrew Morton CC: lkml , Linux Security Modules List Subject: [PATCH] capabilities: refactor kernel code + bugfix X-Enigmail-Version: 0.95.6 Content-Type: multipart/mixed; boundary="------------020206000200080508040309" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. --------------020206000200080508040309 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 This version of the patch includes fixes suggested by David Howells and a clarifying comment in the commit message as per Serge. Cheers Andrew -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.6 (GNU/Linux) iD8DBQFIW87r+bHCR3gb8jsRAkIDAJ9kJkR40hwUF7UggjiyouFh5igraACdFKMQ ZBrpJdQMDjG0xdiSrVFSszA= =EDea -----END PGP SIGNATURE----- --------------020206000200080508040309 Content-Type: text/plain; name="refactor-kernel-filesystem-capability-support.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="refactor-kernel-filesystem-capability-support.patch" RnJvbSA4YTJiZmZjYjUzNjMyOTVlYTQzZWY0MmM4NGMxMjFhOGU4YzdmZmEwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgRy4gTW9yZ2FuIDxtb3JnYW5Aa2VybmVs Lm9yZz4KRGF0ZTogRnJpLCAyMCBKdW4gMjAwOCAwODoxNjowNiAtMDcwMApTdWJqZWN0OiBb UEFUQ0hdIFJlZmFjdG9yIGZpbGVzeXN0ZW0gY2FwYWJpbGl0eSBzdXBwb3J0IGluIG1haW4g a2VybmVsLgoKVG8gZGF0ZSwgd2UndmUgdHJpZWQgaGFyZCB0byBjb25maW5lIGZpbGVzeXN0 ZW0gc3VwcG9ydCBmb3IgY2FwYWJpbGl0aWVzCnRvIHRoZSBzZWN1cml0eSBtb2R1bGVzLiBU aGlzIGhhcyBsZWZ0IGEgbG90IG9mIHRoZSBjb2RlIGluCmtlcm5lbC9jYXBhYmlsaXR5LmMg aW4gYSBzdGF0ZSB3aGVyZSBpdCBsb29rcyBsaWtlIGl0IHN1cHBvcnRzIHNvbWV0aGluZwp0 aGF0IGZpbGVzeXN0ZW0gc3VwcG9ydCBmb3IgY2FwYWJpbGl0aWVzIGFjdHVhbGx5IHN1cHBy ZXNzZXMgd2hlbiB0aGUKTFNNIHNlY3VyaXR5L2NvbW1tb25jYXAuYyBjb2RlIHJ1bnMuIFdo YXQgaXMgbGVmdCBpcyBhIGxvdCBvZiBjb2RlIHRoYXQKdXNlcyBzdWItb3B0aW1hbCBsb2Nr aW5nIGluIHRoZSBtYWluIGtlcm5lbC4gV2l0aCB0aGlzIGNoYW5nZSB3ZSByZWZhY3Rvcgp0 aGUgbWFpbiBrZXJuZWwgY29kZSBhbmQgbWFrZSBpdCBleHBsaWNpdCB3aGljaCBsb2NrcyBh cmUgbmVlZGVkIGFuZCB0aGF0CnRoZSBvbmx5IHJlbWFpbmluZyBrZXJuZWwgcmFjZXMgaW4g dGhpcyBhcmVhIGFyZSBhc3NvY2lhdGVkIHdpdGgKbm9uLWZpbGVzeXN0ZW0gY2FwYWJpbGl0 eSBjb2RlLgoKVGhpcyBjb21taXQgYWxzbyBpbmNsdWRlcyBhIGJ1Z2ZpeCBmb3IgdGhlIGZy YWdpbGUgc2V0dWlkIGZpeHVwCmNvZGUgaW4gdGhlIGNhc2UgdGhhdCBmaWxlc3lzdGVtIGNh cGFiaWxpdGllcyBhcmUgc3VwcG9ydGVkIChpbiBhY2Nlc3MoKSkuClRoZSBlZmZlY3Qgb2Yg dGhpcyBmaXggaXMgZ2F0ZWQgb24gZmlsZXN5c3RlbSBjYXBhYmlsaXR5IHN1cHBvcnQgYmVj YXVzZQpjaGFuZ2luZyBzZWN1cmViaXRzIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4gZmlsZXN5 c3RlbSBjYXBhYmlsaXRpZXMgc3VwcG9ydAppcyBjb25maWd1cmVkLikKClNpZ25lZC1vZmYt Ynk6IEFuZHJldyBHLiBNb3JnYW4gPG1vcmdhbkBrZXJuZWwub3JnPgotLS0KIGZzL29wZW4u YyAgICAgICAgICAgICAgICAgIHwgICAzOCArKystLQogaW5jbHVkZS9saW51eC9jYXBhYmls aXR5LmggfCAgICAyICsKIGluY2x1ZGUvbGludXgvc2VjdXJlYml0cy5oIHwgICAxNSArLQog a2VybmVsL2NhcGFiaWxpdHkuYyAgICAgICAgfCAgMzU5ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0tLS0tLS0tLS0tLS0KIDQgZmlsZXMgY2hhbmdlZCwgMjc1IGluc2VydGlv bnMoKyksIDEzOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9mcy9vcGVuLmMgYi9mcy9v cGVuLmMKaW5kZXggYTE0NTAwOC4uM2I1Mzk0OCAxMDA2NDQKLS0tIGEvZnMvb3Blbi5jCisr KyBiL2ZzL29wZW4uYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25hbWVp Lmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9j YXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJlYml0cy5oPgogI2luY2x1ZGUg PGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRl IDxsaW51eC92ZnMuaD4KQEAgLTQyNSw3ICs0MjYsNyBAQCBhc21saW5rYWdlIGxvbmcgc3lz X2ZhY2Nlc3NhdChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIGludCBt b2RlKQogewogCXN0cnVjdCBuYW1laWRhdGEgbmQ7CiAJaW50IG9sZF9mc3VpZCwgb2xkX2Zz Z2lkOwotCWtlcm5lbF9jYXBfdCBvbGRfY2FwOworCWtlcm5lbF9jYXBfdCB1bmluaXRpYWxp emVkX3ZhcihvbGRfY2FwKTsgIC8qICFTRUNVUkVfTk9fU0VUVUlEX0ZJWFVQICovCiAJaW50 IHJlczsKIAogCWlmIChtb2RlICYgflNfSVJXWE8pCS8qIHdoZXJlJ3MgRl9PSywgWF9PSywg V19PSywgUl9PSz8gKi8KQEAgLTQzMywyMyArNDM0LDI3IEBAIGFzbWxpbmthZ2UgbG9uZyBz eXNfZmFjY2Vzc2F0KGludCBkZmQsIGNvbnN0IGNoYXIgX191c2VyICpmaWxlbmFtZSwgaW50 IG1vZGUpCiAKIAlvbGRfZnN1aWQgPSBjdXJyZW50LT5mc3VpZDsKIAlvbGRfZnNnaWQgPSBj dXJyZW50LT5mc2dpZDsKLQlvbGRfY2FwID0gY3VycmVudC0+Y2FwX2VmZmVjdGl2ZTsKIAog CWN1cnJlbnQtPmZzdWlkID0gY3VycmVudC0+dWlkOwogCWN1cnJlbnQtPmZzZ2lkID0gY3Vy cmVudC0+Z2lkOwogCi0JLyoKLQkgKiBDbGVhciB0aGUgY2FwYWJpbGl0aWVzIGlmIHdlIHN3 aXRjaCB0byBhIG5vbi1yb290IHVzZXIKLQkgKgotCSAqIEZJWE1FOiBUaGVyZSBpcyBhIHJh Y2UgaGVyZSBhZ2FpbnN0IHN5c19jYXBzZXQuICBUaGUKLQkgKiBjYXBhYmlsaXRpZXMgY2Fu IGNoYW5nZSB5ZXQgd2Ugd2lsbCByZXN0b3JlIHRoZSBvbGQKLQkgKiB2YWx1ZSBiZWxvdy4g IFdlIHNob3VsZCBob2xkIHRhc2tfY2FwYWJpbGl0aWVzX2xvY2ssCi0JICogYnV0IHdlIGNh bm5vdCBiZWNhdXNlIHVzZXJfcGF0aF93YWxrIGNhbiBzbGVlcC4KLQkgKi8KLQlpZiAoY3Vy cmVudC0+dWlkKQotCQljYXBfY2xlYXIoY3VycmVudC0+Y2FwX2VmZmVjdGl2ZSk7Ci0JZWxz ZQotCQljdXJyZW50LT5jYXBfZWZmZWN0aXZlID0gY3VycmVudC0+Y2FwX3Blcm1pdHRlZDsK KwlpZiAoIWlzc2VjdXJlKFNFQ1VSRV9OT19TRVRVSURfRklYVVApKSB7CisJCS8qCisJCSAq IENsZWFyIHRoZSBjYXBhYmlsaXRpZXMgaWYgd2Ugc3dpdGNoIHRvIGEgbm9uLXJvb3QgdXNl cgorCQkgKi8KKyNpZm5kZWYgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTCisJ CS8qCisJCSAqIEZJWE1FOiBUaGVyZSBpcyBhIHJhY2UgaGVyZSBhZ2FpbnN0IHN5c19jYXBz ZXQuICBUaGUKKwkJICogY2FwYWJpbGl0aWVzIGNhbiBjaGFuZ2UgeWV0IHdlIHdpbGwgcmVz dG9yZSB0aGUgb2xkCisJCSAqIHZhbHVlIGJlbG93LiAgV2Ugc2hvdWxkIGhvbGQgdGFza19j YXBhYmlsaXRpZXNfbG9jaywKKwkJICogYnV0IHdlIGNhbm5vdCBiZWNhdXNlIHVzZXJfcGF0 aF93YWxrIGNhbiBzbGVlcC4KKwkJICovCisjZW5kaWYgLyogbmRlZiBDT05GSUdfU0VDVVJJ VFlfRklMRV9DQVBBQklMSVRJRVMgKi8KKwkJaWYgKGN1cnJlbnQtPnVpZCkKKwkJCW9sZF9j YXAgPSBjYXBfc2V0X2VmZmVjdGl2ZShfX2NhcF9lbXB0eV9zZXQpOworCQllbHNlCisJCQlv bGRfY2FwID0gY2FwX3NldF9lZmZlY3RpdmUoY3VycmVudC0+Y2FwX3Blcm1pdHRlZCk7CisJ fQogCiAJcmVzID0gX191c2VyX3dhbGtfZmQoZGZkLCBmaWxlbmFtZSwgTE9PS1VQX0ZPTExP V3xMT09LVVBfQUNDRVNTLCAmbmQpOwogCWlmIChyZXMpCkBAIC00NzgsNyArNDgzLDEwIEBA IG91dF9wYXRoX3JlbGVhc2U6CiBvdXQ6CiAJY3VycmVudC0+ZnN1aWQgPSBvbGRfZnN1aWQ7 CiAJY3VycmVudC0+ZnNnaWQgPSBvbGRfZnNnaWQ7Ci0JY3VycmVudC0+Y2FwX2VmZmVjdGl2 ZSA9IG9sZF9jYXA7CisKKwlpZiAoIWlzc2VjdXJlKFNFQ1VSRV9OT19TRVRVSURfRklYVVAp KSB7CisJCSh2b2lkKSBjYXBfc2V0X2VmZmVjdGl2ZShvbGRfY2FwKTsKKwl9CiAKIAlyZXR1 cm4gcmVzOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYXBhYmlsaXR5LmggYi9p bmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaAppbmRleCBmYTgzMGY4Li4wMjY3Mzg0IDEwMDY0 NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaAorKysgYi9pbmNsdWRlL2xpbnV4 L2NhcGFiaWxpdHkuaApAQCAtNTAxLDYgKzUwMSw4IEBAIGV4dGVybiBjb25zdCBrZXJuZWxf Y2FwX3QgX19jYXBfZW1wdHlfc2V0OwogZXh0ZXJuIGNvbnN0IGtlcm5lbF9jYXBfdCBfX2Nh cF9mdWxsX3NldDsKIGV4dGVybiBjb25zdCBrZXJuZWxfY2FwX3QgX19jYXBfaW5pdF9lZmZf c2V0OwogCitrZXJuZWxfY2FwX3QgY2FwX3NldF9lZmZlY3RpdmUoY29uc3Qga2VybmVsX2Nh cF90IHBFX25ldyk7CisKIGludCBjYXBhYmxlKGludCBjYXApOwogaW50IF9fY2FwYWJsZShz dHJ1Y3QgdGFza19zdHJ1Y3QgKnQsIGludCBjYXApOwogCmRpZmYgLS1naXQgYS9pbmNsdWRl L2xpbnV4L3NlY3VyZWJpdHMuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJlYml0cy5oCmluZGV4 IGMxZjE5ZGIuLjkyZjA5YmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJlYml0 cy5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VjdXJlYml0cy5oCkBAIC03LDE0ICs3LDE1IEBA CiAgICBpbmhlcml0YW5jZSBvZiByb290LXBlcm1pc3Npb25zIGFuZCBzdWlkLXJvb3QgZXhl Y3V0YWJsZSB1bmRlcgogICAgY29tcGF0aWJpbGl0eSBtb2RlLiBXZSByYWlzZSB0aGUgZWZm ZWN0aXZlIGFuZCBpbmhlcml0YWJsZSBiaXRtYXNrcwogICAgKm9mIHRoZSBleGVjdXRhYmxl IGZpbGUqIGlmIHRoZSBlZmZlY3RpdmUgdWlkIG9mIHRoZSBuZXcgcHJvY2VzcyBpcwotICAg MC4gSWYgdGhlIHJlYWwgdWlkIGlzIDAsIHdlIHJhaXNlIHRoZSBpbmhlcml0YWJsZSBiaXRt YXNrIG9mIHRoZQorICAgMC4gSWYgdGhlIHJlYWwgdWlkIGlzIDAsIHdlIHJhaXNlIHRoZSBl ZmZlY3RpdmUgKGxlZ2FjeSkgYml0IG9mIHRoZQogICAgZXhlY3V0YWJsZSBmaWxlLiAqLwog I2RlZmluZSBTRUNVUkVfTk9ST09UCQkJMAogI2RlZmluZSBTRUNVUkVfTk9ST09UX0xPQ0tF RAkJMSAgLyogbWFrZSBiaXQtMCBpbW11dGFibGUgKi8KIAotLyogV2hlbiBzZXQsIHNldHVp ZCB0by9mcm9tIHVpZCAwIGRvZXMgbm90IHRyaWdnZXIgY2FwYWJpbGl0eS0iZml4ZXMiCi0g ICB0byBiZSBjb21wYXRpYmxlIHdpdGggb2xkIHByb2dyYW1zIHJlbHlpbmcgb24gc2V0KnVp ZCB0byBsb29zZQotICAgcHJpdmlsZWdlcy4gV2hlbiB1bnNldCwgc2V0dWlkIGRvZXNuJ3Qg Y2hhbmdlIHByaXZpbGVnZXMuICovCisvKiBXaGVuIHNldCwgc2V0dWlkIHRvL2Zyb20gdWlk IDAgZG9lcyBub3QgdHJpZ2dlciBjYXBhYmlsaXR5LSJmaXh1cCIuCisgICBXaGVuIHVuc2V0 LCB0byBwcm92aWRlIGNvbXBhdGlibGlsaXR5IHdpdGggb2xkIHByb2dyYW1zIHJlbHlpbmcg b24KKyAgIHNldCp1aWQgdG8gZ2Fpbi9sb3NlIHByaXZpbGVnZSwgdHJhbnNpdGlvbnMgdG8v ZnJvbSB1aWQgMCBjYXVzZQorICAgY2FwYWJpbGl0aWVzIHRvIGJlIGdhaW5lZC9sb3N0LiAq LwogI2RlZmluZSBTRUNVUkVfTk9fU0VUVUlEX0ZJWFVQCQkyCiAjZGVmaW5lIFNFQ1VSRV9O T19TRVRVSURfRklYVVBfTE9DS0VECTMgIC8qIG1ha2UgYml0LTIgaW1tdXRhYmxlICovCiAK QEAgLTI2LDEwICsyNywxMCBAQAogI2RlZmluZSBTRUNVUkVfS0VFUF9DQVBTCQk0CiAjZGVm aW5lIFNFQ1VSRV9LRUVQX0NBUFNfTE9DS0VECQk1ICAvKiBtYWtlIGJpdC00IGltbXV0YWJs ZSAqLwogCi0vKiBFYWNoIHNlY3VyZXNldHRpbmcgaXMgaW1wbGVtZW50ZWQgdXNpbmcgdHdv IGJpdHMuIE9uZSBiaXQgc3BlY2lmeQorLyogRWFjaCBzZWN1cmVzZXR0aW5nIGlzIGltcGxl bWVudGVkIHVzaW5nIHR3byBiaXRzLiBPbmUgYml0IHNwZWNpZmllcwogICAgd2hldGhlciB0 aGUgc2V0dGluZyBpcyBvbiBvciBvZmYuIFRoZSBvdGhlciBiaXQgc3BlY2lmeSB3aGV0aGVy IHRoZQotICAgc2V0dGluZyBpcyBmaXhlZCBvciBub3QuIEEgc2V0dGluZyB3aGljaCBpcyBm aXhlZCBjYW5ub3QgYmUgY2hhbmdlZAotICAgZnJvbSB1c2VyLWxldmVsLiAqLworICAgc2V0 dGluZyBpcyBsb2NrZWQgb3Igbm90LiBBIHNldHRpbmcgd2hpY2ggaXMgbG9ja2VkIGNhbm5v dCBiZQorICAgY2hhbmdlZCBmcm9tIHVzZXItbGV2ZWwuICovCiAjZGVmaW5lIGlzc2VjdXJl X21hc2soWCkJKDEgPDwgKFgpKQogI2RlZmluZSBpc3NlY3VyZShYKQkJKGlzc2VjdXJlX21h c2soWCkgJiBjdXJyZW50LT5zZWN1cmViaXRzKQogCmRpZmYgLS1naXQgYS9rZXJuZWwvY2Fw YWJpbGl0eS5jIGIva2VybmVsL2NhcGFiaWxpdHkuYwppbmRleCBjZmJlNDQyLi41MGE4MWQ1 IDEwMDY0NAotLS0gYS9rZXJuZWwvY2FwYWJpbGl0eS5jCisrKyBiL2tlcm5lbC9jYXBhYmls aXR5LmMKQEAgLTExNSwxMSArMTE1LDIyOSBAQCBzdGF0aWMgaW50IGNhcF92YWxpZGF0ZV9t YWdpYyhjYXBfdXNlcl9oZWFkZXJfdCBoZWFkZXIsIHVuc2lnbmVkICp0b2NvcHkpCiAJcmV0 dXJuIDA7CiB9CiAKKyNpZm5kZWYgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVT CisKKy8qCisgKiBXaXRob3V0IGZpbGVzeXN0ZW0gY2FwYWJpbGl0eSBzdXBwb3J0LCB3ZSBu b21pbmFsbHkgc3VwcG9ydCBvbmUgcHJvY2VzcworICogc2V0dGluZyB0aGUgY2FwYWJpbGl0 aWVzIG9mIGFub3RoZXIKKyAqLworc3RhdGljIGlubGluZSBpbnQgY2FwX2dldF90YXJnZXRf cGlkKHBpZF90IHBpZCwga2VybmVsX2NhcF90ICpwRXAsCisJCQkJICAgICBrZXJuZWxfY2Fw X3QgKnBJcCwga2VybmVsX2NhcF90ICpwUHApCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0 YXJnZXQ7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmdGFza19jYXBhYmlsaXR5X2xvY2sp OworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisKKwlpZiAocGlkICYmIHBpZCAhPSB0 YXNrX3BpZF92bnIoY3VycmVudCkpIHsKKwkJdGFyZ2V0ID0gZmluZF90YXNrX2J5X3ZwaWQo cGlkKTsKKwkJaWYgKCF0YXJnZXQpIHsKKwkJCXJldCA9IC1FU1JDSDsKKwkJCWdvdG8gb3V0 OworCQl9CisJfSBlbHNlCisJCXRhcmdldCA9IGN1cnJlbnQ7CisKKwlyZXQgPSBzZWN1cml0 eV9jYXBnZXQodGFyZ2V0LCBwRXAsIHBJcCwgcFBwKTsKKworb3V0OgorCXJlYWRfdW5sb2Nr KCZ0YXNrbGlzdF9sb2NrKTsKKwlzcGluX3VubG9jaygmdGFza19jYXBhYmlsaXR5X2xvY2sp OworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIGNhcF9zZXRfcGcgLSBzZXQgY2FwYWJp bGl0aWVzIGZvciBhbGwgcHJvY2Vzc2VzIGluIGEgZ2l2ZW4gcHJvY2VzcworICogZ3JvdXAu ICBXZSBjYWxsIHRoaXMgaG9sZGluZyB0YXNrX2NhcGFiaWxpdHlfbG9jayBhbmQgdGFza2xp c3RfbG9jay4KKyAqLworc3RhdGljIGlubGluZSBpbnQgY2FwX3NldF9wZyhpbnQgcGdycF9u ciwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCisJCQkgICAgIGtlcm5lbF9jYXBfdCAqaW5o ZXJpdGFibGUsCisJCQkgICAgIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKQoreworCXN0cnVj dCB0YXNrX3N0cnVjdCAqZywgKnRhcmdldDsKKwlpbnQgcmV0ID0gLUVQRVJNOworCWludCBm b3VuZCA9IDA7CisJc3RydWN0IHBpZCAqcGdycDsKKworCXNwaW5fbG9jaygmdGFza19jYXBh YmlsaXR5X2xvY2spOworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisKKwlwZ3JwID0g ZmluZF92cGlkKHBncnBfbnIpOworCWRvX2VhY2hfcGlkX3Rhc2socGdycCwgUElEVFlQRV9Q R0lELCBnKSB7CisJCXRhcmdldCA9IGc7CisJCXdoaWxlX2VhY2hfdGhyZWFkKGcsIHRhcmdl dCkgeworCQkJaWYgKCFzZWN1cml0eV9jYXBzZXRfY2hlY2sodGFyZ2V0LCBlZmZlY3RpdmUs CisJCQkJCQkgICBpbmhlcml0YWJsZSwgcGVybWl0dGVkKSkgeworCQkJCXNlY3VyaXR5X2Nh cHNldF9zZXQodGFyZ2V0LCBlZmZlY3RpdmUsCisJCQkJCQkgICAgaW5oZXJpdGFibGUsIHBl cm1pdHRlZCk7CisJCQkJcmV0ID0gMDsKKwkJCX0KKwkJCWZvdW5kID0gMTsKKwkJfQorCX0g d2hpbGVfZWFjaF9waWRfdGFzayhwZ3JwLCBQSURUWVBFX1BHSUQsIGcpOworCisJcmVhZF91 bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXNwaW5fdW5sb2NrKCZ0YXNrX2NhcGFiaWxpdHlf bG9jayk7CisKKwlpZiAoIWZvdW5kKQorCQlyZXQgPSAwOworCXJldHVybiByZXQ7Cit9CisK IC8qCi0gKiBGb3Igc3lzX2dldHByb2NjYXAoKSBhbmQgc3lzX3NldHByb2NjYXAoKSwgYW55 IG9mIHRoZSB0aHJlZQotICogY2FwYWJpbGl0eSBzZXQgcG9pbnRlcnMgbWF5IGJlIE5VTEwg LS0gaW5kaWNhdGluZyB0aGF0IHRoYXQgc2V0IGlzCi0gKiB1bmludGVyZXN0aW5nIGFuZC9v ciBub3QgdG8gYmUgY2hhbmdlZC4KKyAqIGNhcF9zZXRfYWxsIC0gc2V0IGNhcGFiaWxpdGll cyBmb3IgYWxsIHByb2Nlc3NlcyBvdGhlciB0aGFuIGluaXQKKyAqIGFuZCBzZWxmLiAgV2Ug Y2FsbCB0aGlzIGhvbGRpbmcgdGFza19jYXBhYmlsaXR5X2xvY2sgYW5kIHRhc2tsaXN0X2xv Y2suCiAgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNhcF9zZXRfYWxsKGtlcm5lbF9jYXBfdCAq ZWZmZWN0aXZlLAorCQkJICAgICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwKKwkJCSAg ICAgIGtlcm5lbF9jYXBfdCAqcGVybWl0dGVkKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAq ZywgKnRhcmdldDsKKwlpbnQgcmV0ID0gLUVQRVJNOworCWludCBmb3VuZCA9IDA7CisKKwlz cGluX2xvY2soJnRhc2tfY2FwYWJpbGl0eV9sb2NrKTsKKwlyZWFkX2xvY2soJnRhc2tsaXN0 X2xvY2spOworCisJZG9fZWFjaF90aHJlYWQoZywgdGFyZ2V0KSB7CisJCWlmICh0YXJnZXQg PT0gY3VycmVudAorCQkgICAgfHwgaXNfY29udGFpbmVyX2luaXQodGFyZ2V0LT5ncm91cF9s ZWFkZXIpKQorCQkJY29udGludWU7CisJCWZvdW5kID0gMTsKKwkJaWYgKHNlY3VyaXR5X2Nh cHNldF9jaGVjayh0YXJnZXQsIGVmZmVjdGl2ZSwgaW5oZXJpdGFibGUsCisJCQkJCSAgcGVy bWl0dGVkKSkKKwkJCWNvbnRpbnVlOworCQlyZXQgPSAwOworCQlzZWN1cml0eV9jYXBzZXRf c2V0KHRhcmdldCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwgcGVybWl0dGVkKTsKKwl9IHdo aWxlX2VhY2hfdGhyZWFkKGcsIHRhcmdldCk7CisKKwlyZWFkX3VubG9jaygmdGFza2xpc3Rf bG9jayk7CisJc3Bpbl91bmxvY2soJnRhc2tfY2FwYWJpbGl0eV9sb2NrKTsKKworCWlmICgh Zm91bmQpCisJCXJldCA9IDA7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogR2l2ZW4g dGhlIHRhcmdldCBwaWQgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGN1cnJlbnQgcHJvY2VzcyB3 ZQorICogbmVlZCBtb3JlIGVsYWJvcmF0ZSBzdXBwb3J0Li4uIChUaGlzIHN1cHBvcnQgaXMg bm90IHByZXNlbnQgd2hlbgorICogZmlsZXN5c3RlbSBjYXBhYmlsaXRpZXMgYXJlIGNvbmZp Z3VyZWQuKQorICovCitzdGF0aWMgaW5saW5lIGludCBkb19zeXNfY2Fwc2V0X290aGVyX3Rh c2tzKHBpZF90IHBpZCwga2VybmVsX2NhcF90ICplZmZlY3RpdmUsCisJCQkJCSAgICBrZXJu ZWxfY2FwX3QgKmluaGVyaXRhYmxlLAorCQkJCQkgICAga2VybmVsX2NhcF90ICpwZXJtaXR0 ZWQpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQ7CisJaW50IHJldDsKKworCWlm ICghY2FwYWJsZShDQVBfU0VUUENBUCkpCisJCXJldHVybiAtRVBFUk07CisKKwlpZiAocGlk ID09IC0xKQkgICAgICAgICAgLyogYWxsIHByb2NzIG90aGVyIHRoYW4gY3VycmVudCBhbmQg aW5pdCAqLworCQlyZXR1cm4gY2FwX3NldF9hbGwoZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwg cGVybWl0dGVkKTsKKworCWVsc2UgaWYgKHBpZCA8IDApICAgICAgICAgICAgICAgICAgICAv KiBhbGwgcHJvY3MgaW4gcHJvY2VzcyBncm91cCAqLworCQlyZXR1cm4gY2FwX3NldF9wZygt cGlkLCBlZmZlY3RpdmUsIGluaGVyaXRhYmxlLCBwZXJtaXR0ZWQpOworCisJLyogdGFyZ2V0 ICE9IGN1cnJlbnQgKi8KKwlzcGluX2xvY2soJnRhc2tfY2FwYWJpbGl0eV9sb2NrKTsKKwly ZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCisJdGFyZ2V0ID0gZmluZF90YXNrX2J5X3Zw aWQocGlkKTsKKwlpZiAoIXRhcmdldCkKKwkJcmV0ID0gLUVTUkNIOworCWVsc2UgeworCQly ZXQgPSBzZWN1cml0eV9jYXBzZXRfY2hlY2sodGFyZ2V0LCBlZmZlY3RpdmUsIGluaGVyaXRh YmxlLAorCQkJCQkgICAgcGVybWl0dGVkKTsKKworCQkvKiBoYXZpbmcgdmVyaWZpZWQgdGhh dCB0aGUgcHJvcG9zZWQgY2hhbmdlcyBhcmUgbGVnYWwsCisJCSAgIHdlIG5vdyBwdXQgdGhl bSBpbnRvIGVmZmVjdC4gKi8KKwkJaWYgKCFyZXQpCisJCQlzZWN1cml0eV9jYXBzZXRfc2V0 KHRhcmdldCwgZWZmZWN0aXZlLCBpbmhlcml0YWJsZSwKKwkJCQkJICAgIHBlcm1pdHRlZCk7 CisJfQorCisJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXNwaW5fdW5sb2NrKCZ0 YXNrX2NhcGFiaWxpdHlfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCisjZWxzZSAvKiBp ZS4sIGRlZiBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgKi8KKworLyoKKyAq IElmIHdlIGhhdmUgY29uZmlndXJlZCB3aXRoIGZpbGVzeXN0ZW0gY2FwYWJpbGl0eSBzdXBw b3J0LCB0aGVuIHRoZQorICogb25seSB0aGluZyB0aGF0IGNhbiBjaGFuZ2UgdGhlIGNhcGFi aWxpdGllcyBvZiB0aGUgY3VycmVudCBwcm9jZXNzCisgKiBpcyB0aGUgY3VycmVudCBwcm9j ZXNzLiBBcyBzdWNoLCB3ZSBjYW4ndCBiZSBpbiB0aGlzIGNvZGUgYXQgdGhlCisgKiBzYW1l IHRpbWUgYXMgd2UgYXJlIGluIHRoZSBwcm9jZXNzIG9mIHNldHRpbmcgY2FwYWJpbGl0aWVz IGluIHRoaXMKKyAqIHByb2Nlc3MuIFRoZSBuZXQgcmVzdWx0IGlzIHRoYXQgd2UgY2FuIGxp bWl0IG91ciB1c2Ugb2YgbG9ja3MgdG8KKyAqIHdoZW4gd2UgYXJlIHJlYWRpbmcgdGhlIGNh cHMgb2YgYW5vdGhlciBwcm9jZXNzLgorICovCitzdGF0aWMgaW5saW5lIGludCBjYXBfZ2V0 X3RhcmdldF9waWQocGlkX3QgcGlkLCBrZXJuZWxfY2FwX3QgKnBFcCwKKwkJCQkgICAgIGtl cm5lbF9jYXBfdCAqcElwLCBrZXJuZWxfY2FwX3QgKnBQcCkKK3sKKwlpbnQgcmV0OworCisJ aWYgKHBpZCAmJiAocGlkICE9IHRhc2tfcGlkX3ZucihjdXJyZW50KSkpIHsKKwkJc3RydWN0 IHRhc2tfc3RydWN0ICp0YXJnZXQ7CisKKwkJc3Bpbl9sb2NrKCZ0YXNrX2NhcGFiaWxpdHlf bG9jayk7CisJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisKKwkJdGFyZ2V0ID0gZmlu ZF90YXNrX2J5X3ZwaWQocGlkKTsKKwkJaWYgKCF0YXJnZXQpCisJCQlyZXQgPSAtRVNSQ0g7 CisJCWVsc2UgCisJCQlyZXQgPSBzZWN1cml0eV9jYXBnZXQodGFyZ2V0LCBwRXAsIHBJcCwg cFBwKTsKKworCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCXNwaW5fdW5sb2Nr KCZ0YXNrX2NhcGFiaWxpdHlfbG9jayk7CisJfSBlbHNlCisJCXJldCA9IHNlY3VyaXR5X2Nh cGdldChjdXJyZW50LCBwRXAsIHBJcCwgcFBwKTsKKworCXJldHVybiByZXQ7Cit9CisKKy8q CisgKiBXaXRoIGZpbGVzeXN0ZW0gY2FwYWJpbGl0eSBzdXBwb3J0IGNvbmZpZ3VyZWQsIHRo ZSBrZXJuZWwgZG9lcyBub3QKKyAqIHBlcm1pdCB0aGUgY2hhbmdpbmcgb2YgY2FwYWJpbGl0 aWVzIGluIG9uZSBwcm9jZXNzIGJ5IGFub3RoZXIKKyAqIHByb2Nlc3MuIChDQVBfU0VUUENB UCBoYXMgbXVjaCBsZXNzIGJyb2FkIHNlbWFudGljcyB3aGVuIGNvbmZpZ3VyZWQKKyAqIHRo aXMgd2F5LikKKyAqLworc3RhdGljIGlubGluZSBpbnQgZG9fc3lzX2NhcHNldF9vdGhlcl90 YXNrcyhwaWRfdCBwaWQsCisJCQkJCSAgICBrZXJuZWxfY2FwX3QgKmVmZmVjdGl2ZSwKKwkJ CQkJICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCisJCQkJCSAgICBrZXJuZWxfY2Fw X3QgKnBlcm1pdHRlZCkKK3sKKwlyZXR1cm4gLUVQRVJNOworfQorCisjZW5kaWYgLyogaWUu LCBuZGVmIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyAqLworCisvKgorICog QXRvbWljYWxseSBtb2RpZnkgdGhlIGVmZmVjdGl2ZSBjYXBhYmlsaXRpZXMgcmV0dXJuaW5n IHRoZSBvcmlnaW5hbAorICogdmFsdWUuIE5vIHBlcm1pc3Npb24gY2hlY2sgaXMgcGVyZm9y bWVkIGhlcmUgLSBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlCisgKiBjYWxsZXIgaXMgcGVybWl0 dGVkIHRvIHNldCB0aGUgZGVzaXJlZCBlZmZlY3RpdmUgY2FwYWJpbGl0aWVzLgorICovCitr ZXJuZWxfY2FwX3QgY2FwX3NldF9lZmZlY3RpdmUoY29uc3Qga2VybmVsX2NhcF90IHBFX25l dykKK3sKKwlrZXJuZWxfY2FwX3QgcEVfb2xkOworCisJc3Bpbl9sb2NrKCZ0YXNrX2NhcGFi aWxpdHlfbG9jayk7CisKKwlwRV9vbGQgPSBjdXJyZW50LT5jYXBfZWZmZWN0aXZlOworCWN1 cnJlbnQtPmNhcF9lZmZlY3RpdmUgPSBwRV9uZXc7CisKKwlzcGluX3VubG9jaygmdGFza19j YXBhYmlsaXR5X2xvY2spOworCisJcmV0dXJuIHBFX29sZDsKK30KKworRVhQT1JUX1NZTUJP TChjYXBfc2V0X2VmZmVjdGl2ZSk7CiAKIC8qKgogICogc3lzX2NhcGdldCAtIGdldCB0aGUg Y2FwYWJpbGl0aWVzIG9mIGEgZ2l2ZW4gcHJvY2Vzcy4KQEAgLTEzNCw3ICszNTIsNiBAQCBh c21saW5rYWdlIGxvbmcgc3lzX2NhcGdldChjYXBfdXNlcl9oZWFkZXJfdCBoZWFkZXIsIGNh cF91c2VyX2RhdGFfdCBkYXRhcHRyKQogewogCWludCByZXQgPSAwOwogCXBpZF90IHBpZDsK LQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhcmdldDsKIAl1bnNpZ25lZCB0b2NvcHk7CiAJa2Vy bmVsX2NhcF90IHBFLCBwSSwgcFA7CiAKQEAgLTE0OCwyMyArMzY1LDcgQEAgYXNtbGlua2Fn ZSBsb25nIHN5c19jYXBnZXQoY2FwX3VzZXJfaGVhZGVyX3QgaGVhZGVyLCBjYXBfdXNlcl9k YXRhX3QgZGF0YXB0cikKIAlpZiAocGlkIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlz cGluX2xvY2soJnRhc2tfY2FwYWJpbGl0eV9sb2NrKTsKLQlyZWFkX2xvY2soJnRhc2tsaXN0 X2xvY2spOwotCi0JaWYgKHBpZCAmJiBwaWQgIT0gdGFza19waWRfdm5yKGN1cnJlbnQpKSB7 Ci0JCXRhcmdldCA9IGZpbmRfdGFza19ieV92cGlkKHBpZCk7Ci0JCWlmICghdGFyZ2V0KSB7 Ci0JCQlyZXQgPSAtRVNSQ0g7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0gZWxzZQotCQl0YXJn ZXQgPSBjdXJyZW50OwotCi0JcmV0ID0gc2VjdXJpdHlfY2FwZ2V0KHRhcmdldCwgJnBFLCAm cEksICZwUCk7Ci0KLW91dDoKLQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7Ci0Jc3Bp bl91bmxvY2soJnRhc2tfY2FwYWJpbGl0eV9sb2NrKTsKKwlyZXQgPSBjYXBfZ2V0X3Rhcmdl dF9waWQocGlkLCAmcEUsICZwSSwgJnBQKTsKIAogCWlmICghcmV0KSB7CiAJCXN0cnVjdCBf X3VzZXJfY2FwX2RhdGFfc3RydWN0IGtkYXRhW19LRVJORUxfQ0FQQUJJTElUWV9VMzJTXTsK QEAgLTE5NSw3ICszOTYsNiBAQCBvdXQ6CiAJCSAqIGJlZm9yZSBtb2RpZmljYXRpb24gaXMg YXR0ZW1wdGVkIGFuZCB0aGUgYXBwbGljYXRpb24KIAkJICogZmFpbHMuCiAJCSAqLwotCiAJ CWlmIChjb3B5X3RvX3VzZXIoZGF0YXB0ciwga2RhdGEsIHRvY29weQogCQkJCSAqIHNpemVv ZihzdHJ1Y3QgX191c2VyX2NhcF9kYXRhX3N0cnVjdCkpKSB7CiAJCQlyZXR1cm4gLUVGQVVM VDsKQEAgLTIwNSw3MCArNDA1LDggQEAgb3V0OgogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0g KiBjYXBfc2V0X3BnIC0gc2V0IGNhcGFiaWxpdGllcyBmb3IgYWxsIHByb2Nlc3NlcyBpbiBh IGdpdmVuIHByb2Nlc3MKLSAqIGdyb3VwLiAgV2UgY2FsbCB0aGlzIGhvbGRpbmcgdGFza19j YXBhYmlsaXR5X2xvY2sgYW5kIHRhc2tsaXN0X2xvY2suCi0gKi8KLXN0YXRpYyBpbmxpbmUg aW50IGNhcF9zZXRfcGcoaW50IHBncnBfbnIsIGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZlLAot CQkJICAgICAga2VybmVsX2NhcF90ICppbmhlcml0YWJsZSwKLQkJCSAgICAgIGtlcm5lbF9j YXBfdCAqcGVybWl0dGVkKQotewotCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnRhcmdldDsK LQlpbnQgcmV0ID0gLUVQRVJNOwotCWludCBmb3VuZCA9IDA7Ci0Jc3RydWN0IHBpZCAqcGdy cDsKLQotCXBncnAgPSBmaW5kX3ZwaWQocGdycF9ucik7Ci0JZG9fZWFjaF9waWRfdGFzayhw Z3JwLCBQSURUWVBFX1BHSUQsIGcpIHsKLQkJdGFyZ2V0ID0gZzsKLQkJd2hpbGVfZWFjaF90 aHJlYWQoZywgdGFyZ2V0KSB7Ci0JCQlpZiAoIXNlY3VyaXR5X2NhcHNldF9jaGVjayh0YXJn ZXQsIGVmZmVjdGl2ZSwKLQkJCQkJCQlpbmhlcml0YWJsZSwKLQkJCQkJCQlwZXJtaXR0ZWQp KSB7Ci0JCQkJc2VjdXJpdHlfY2Fwc2V0X3NldCh0YXJnZXQsIGVmZmVjdGl2ZSwKLQkJCQkJ CQlpbmhlcml0YWJsZSwKLQkJCQkJCQlwZXJtaXR0ZWQpOwotCQkJCXJldCA9IDA7Ci0JCQl9 Ci0JCQlmb3VuZCA9IDE7Ci0JCX0KLQl9IHdoaWxlX2VhY2hfcGlkX3Rhc2socGdycCwgUElE VFlQRV9QR0lELCBnKTsKLQotCWlmICghZm91bmQpCi0JCXJldCA9IDA7Ci0JcmV0dXJuIHJl dDsKLX0KLQotLyoKLSAqIGNhcF9zZXRfYWxsIC0gc2V0IGNhcGFiaWxpdGllcyBmb3IgYWxs IHByb2Nlc3NlcyBvdGhlciB0aGFuIGluaXQKLSAqIGFuZCBzZWxmLiAgV2UgY2FsbCB0aGlz IGhvbGRpbmcgdGFza19jYXBhYmlsaXR5X2xvY2sgYW5kIHRhc2tsaXN0X2xvY2suCi0gKi8K LXN0YXRpYyBpbmxpbmUgaW50IGNhcF9zZXRfYWxsKGtlcm5lbF9jYXBfdCAqZWZmZWN0aXZl LAotCQkJICAgICAgIGtlcm5lbF9jYXBfdCAqaW5oZXJpdGFibGUsCi0JCQkgICAgICAga2Vy bmVsX2NhcF90ICpwZXJtaXR0ZWQpCi17Ci0gICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqZywg KnRhcmdldDsKLSAgICAgaW50IHJldCA9IC1FUEVSTTsKLSAgICAgaW50IGZvdW5kID0gMDsK LQotICAgICBkb19lYWNoX3RocmVhZChnLCB0YXJnZXQpIHsKLSAgICAgICAgICAgICBpZiAo dGFyZ2V0ID09IGN1cnJlbnQgfHwgaXNfY29udGFpbmVyX2luaXQodGFyZ2V0LT5ncm91cF9s ZWFkZXIpKQotICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAg Zm91bmQgPSAxOwotCSAgICAgaWYgKHNlY3VyaXR5X2NhcHNldF9jaGVjayh0YXJnZXQsIGVm ZmVjdGl2ZSwgaW5oZXJpdGFibGUsCi0JCQkJCQlwZXJtaXR0ZWQpKQotCQkgICAgIGNvbnRp bnVlOwotCSAgICAgcmV0ID0gMDsKLQkgICAgIHNlY3VyaXR5X2NhcHNldF9zZXQodGFyZ2V0 LCBlZmZlY3RpdmUsIGluaGVyaXRhYmxlLCBwZXJtaXR0ZWQpOwotICAgICB9IHdoaWxlX2Vh Y2hfdGhyZWFkKGcsIHRhcmdldCk7Ci0KLSAgICAgaWYgKCFmb3VuZCkKLQkgICAgIHJldCA9 IDA7Ci0gICAgIHJldHVybiByZXQ7Ci19Ci0KIC8qKgotICogc3lzX2NhcHNldCAtIHNldCBj YXBhYmlsaXRpZXMgZm9yIGEgcHJvY2VzcyBvciBhIGdyb3VwIG9mIHByb2Nlc3NlcworICog c3lzX2NhcHNldCAtIHNldCBjYXBhYmlsaXRpZXMgZm9yIGEgcHJvY2VzcyBvciAoKikgYSBn cm91cCBvZiBwcm9jZXNzZXMKICAqIEBoZWFkZXI6IHBvaW50ZXIgdG8gc3RydWN0IHRoYXQg Y29udGFpbnMgY2FwYWJpbGl0eSB2ZXJzaW9uIGFuZAogICoJdGFyZ2V0IHBpZCBkYXRhCiAg KiBAZGF0YTogcG9pbnRlciB0byBzdHJ1Y3QgdGhhdCBjb250YWlucyB0aGUgZWZmZWN0aXZl LCBwZXJtaXR0ZWQsCkBAIC0yOTIsNyArNDMwLDYgQEAgYXNtbGlua2FnZSBsb25nIHN5c19j YXBzZXQoY2FwX3VzZXJfaGVhZGVyX3QgaGVhZGVyLCBjb25zdCBjYXBfdXNlcl9kYXRhX3Qg ZGF0YSkKIAlzdHJ1Y3QgX191c2VyX2NhcF9kYXRhX3N0cnVjdCBrZGF0YVtfS0VSTkVMX0NB UEFCSUxJVFlfVTMyU107CiAJdW5zaWduZWQgaSwgdG9jb3B5OwogCWtlcm5lbF9jYXBfdCBp bmhlcml0YWJsZSwgcGVybWl0dGVkLCBlZmZlY3RpdmU7Ci0Jc3RydWN0IHRhc2tfc3RydWN0 ICp0YXJnZXQ7CiAJaW50IHJldDsKIAlwaWRfdCBwaWQ7CiAKQEAgLTMwMyw5ICs0NDAsNiBA QCBhc21saW5rYWdlIGxvbmcgc3lzX2NhcHNldChjYXBfdXNlcl9oZWFkZXJfdCBoZWFkZXIs IGNvbnN0IGNhcF91c2VyX2RhdGFfdCBkYXRhKQogCWlmIChnZXRfdXNlcihwaWQsICZoZWFk ZXItPnBpZCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKHBpZCAmJiBwaWQgIT0gdGFz a19waWRfdm5yKGN1cnJlbnQpICYmICFjYXBhYmxlKENBUF9TRVRQQ0FQKSkKLQkJcmV0dXJu IC1FUEVSTTsKLQogCWlmIChjb3B5X2Zyb21fdXNlcigma2RhdGEsIGRhdGEsIHRvY29weQog CQkJICAgKiBzaXplb2Yoc3RydWN0IF9fdXNlcl9jYXBfZGF0YV9zdHJ1Y3QpKSkgewogCQly ZXR1cm4gLUVGQVVMVDsKQEAgLTMyMyw0MCArNDU3LDMxIEBAIGFzbWxpbmthZ2UgbG9uZyBz eXNfY2Fwc2V0KGNhcF91c2VyX2hlYWRlcl90IGhlYWRlciwgY29uc3QgY2FwX3VzZXJfZGF0 YV90IGRhdGEpCiAJCWkrKzsKIAl9CiAKLQlzcGluX2xvY2soJnRhc2tfY2FwYWJpbGl0eV9s b2NrKTsKLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwotCi0JaWYgKHBpZCA+IDAgJiYg cGlkICE9IHRhc2tfcGlkX3ZucihjdXJyZW50KSkgewotCQl0YXJnZXQgPSBmaW5kX3Rhc2tf YnlfdnBpZChwaWQpOwotCQlpZiAoIXRhcmdldCkgewotCQkJcmV0ID0gLUVTUkNIOwotCQkJ Z290byBvdXQ7Ci0JCX0KLQl9IGVsc2UKLQkJdGFyZ2V0ID0gY3VycmVudDsKLQotCXJldCA9 IDA7Ci0KLQkvKiBoYXZpbmcgdmVyaWZpZWQgdGhhdCB0aGUgcHJvcG9zZWQgY2hhbmdlcyBh cmUgbGVnYWwsCi0JICAgd2Ugbm93IHB1dCB0aGVtIGludG8gZWZmZWN0LiAqLwotCWlmIChw aWQgPCAwKSB7Ci0JCWlmIChwaWQgPT0gLTEpCS8qIGFsbCBwcm9jcyBvdGhlciB0aGFuIGN1 cnJlbnQgYW5kIGluaXQgKi8KLQkJCXJldCA9IGNhcF9zZXRfYWxsKCZlZmZlY3RpdmUsICZp bmhlcml0YWJsZSwgJnBlcm1pdHRlZCk7CisJaWYgKHBpZCAmJiAocGlkICE9IHRhc2tfcGlk X3ZucihjdXJyZW50KSkpCisJCXJldCA9IGRvX3N5c19jYXBzZXRfb3RoZXJfdGFza3MocGlk LCAmZWZmZWN0aXZlLCAmaW5oZXJpdGFibGUsCisJCQkJCQkmcGVybWl0dGVkKTsKKwllbHNl IHsKKwkJLyoKKwkJICogVGhpcyBsb2NrIGlzIHJlcXVpcmVkIGV2ZW4gd2hlbiBmaWxlc3lz dGVtCisJCSAqIGNhcGFiaWxpdHkgc3VwcG9ydCBpcyBjb25maWd1cmVkIC0gaXQgcHJvdGVj dHMgdGhlCisJCSAqIHN5c19jYXBnZXQoKSBjYWxsIGZyb20gcmV0dXJuaW5nIGluY29ycmVj dCBkYXRhIGluCisJCSAqIHRoZSBjYXNlIHRoYXQgdGhlIHRhcmdldGVkIHByb2Nlc3MgaXMg bm90IHRoZQorCQkgKiBjdXJyZW50IG9uZS4KKwkJICovCisJCXNwaW5fbG9jaygmdGFza19j YXBhYmlsaXR5X2xvY2spOwogCi0JCWVsc2UJCS8qIGFsbCBwcm9jcyBpbiBwcm9jZXNzIGdy b3VwICovCi0JCQlyZXQgPSBjYXBfc2V0X3BnKC1waWQsICZlZmZlY3RpdmUsICZpbmhlcml0 YWJsZSwKLQkJCQkJICZwZXJtaXR0ZWQpOwotCX0gZWxzZSB7Ci0JCXJldCA9IHNlY3VyaXR5 X2NhcHNldF9jaGVjayh0YXJnZXQsICZlZmZlY3RpdmUsICZpbmhlcml0YWJsZSwKKwkJcmV0 ID0gc2VjdXJpdHlfY2Fwc2V0X2NoZWNrKGN1cnJlbnQsICZlZmZlY3RpdmUsICZpbmhlcml0 YWJsZSwKIAkJCQkJICAgICZwZXJtaXR0ZWQpOworCQkvKgorCQkgKiBIYXZpbmcgdmVyaWZp ZWQgdGhhdCB0aGUgcHJvcG9zZWQgY2hhbmdlcyBhcmUKKwkJICogbGVnYWwsIHdlIG5vdyBw dXQgdGhlbSBpbnRvIGVmZmVjdC4KKwkJICovCiAJCWlmICghcmV0KQotCQkJc2VjdXJpdHlf Y2Fwc2V0X3NldCh0YXJnZXQsICZlZmZlY3RpdmUsICZpbmhlcml0YWJsZSwKKwkJCXNlY3Vy aXR5X2NhcHNldF9zZXQoY3VycmVudCwgJmVmZmVjdGl2ZSwgJmluaGVyaXRhYmxlLAogCQkJ CQkgICAgJnBlcm1pdHRlZCk7CisJCXNwaW5fdW5sb2NrKCZ0YXNrX2NhcGFiaWxpdHlfbG9j ayk7CiAJfQogCi1vdXQ6Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCXNwaW5f dW5sb2NrKCZ0YXNrX2NhcGFiaWxpdHlfbG9jayk7CiAKIAlyZXR1cm4gcmV0OwogfQotLSAK MS41LjMuNwoK --------------020206000200080508040309--