From mboxrd@z Thu Jan 1 00:00:00 1970 Message-ID: <48CAF936.1090009@kaigai.gr.jp> Date: Sat, 13 Sep 2008 08:20:22 +0900 From: KaiGai Kohei MIME-Version: 1.0 To: Joshua Brindle CC: KaiGai Kohei , Stephen Smalley , jmorris@namei.org, paul.moore@hp.com, selinux@tycho.nsa.gov Subject: Re: [PATCH 3/3] Thread/Child-Domain Assignment (rev.6) References: <487C7698.60503@ak.jp.nec.com> <1216129084.9348.27.camel@moss-spartans.epoch.ncsc.mil> <487D5A3D.6090801@ak.jp.nec.com> <1216210685.17602.98.camel@moss-spartans.epoch.ncsc.mil> <48803685.1000505@ak.jp.nec.com> <4886AC81.9030202@ak.jp.nec.com> <4889CC5F.3030500@ak.jp.nec.com> <4897E974.2040003@ak.jp.nec.com> <4897EB6F.6080709@ak.jp.nec.com> <48B2A66D.7030608@ak.jp.nec.com> <48B6C966.7040006@tresys.com> <48B756C4.2090909@ak.jp.nec.com> <06A6610D4F464D4EBEAFBF2C5F86911E3A3510@exchange2.columbia.tresys.com> <48BB8B1E.7010208@ak.jp.nec.com> <06A6610D4F464D4EBEAFBF2C5F86911E3A3609@exchange2.columbia.tresys.com> <48BC141F.2060802@kaigai.gr.jp> <48C5D9A7.7090909@ak.jp.nec.com> <48CAB248.6060701@tresys.com> In-Reply-To: <48CAB248.6060701@tresys.com> Content-Type: multipart/mixed; boundary="------------040108050802090505010207" Sender: owner-selinux@tycho.nsa.gov List-Id: selinux@tycho.nsa.gov This is a multi-part message in MIME format. --------------040108050802090505010207 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit Joshua Brindle wrote: > KaiGai Kohei wrote: >> The attached patch for libsepol add suport for a new policy version >> named as (MOD_)POLICYDB_VERSION_BOUNDARY. >> Userspace hierarchy checks are reworked in this revision. >> >> FEATURES: >> >> - Boundary feature support: >> The upcoming kernel has a feature to define boundary relationship >> between two users, roles and types. It enables to restrict a bounded >> one can never have wider permissions than its bounds one. >> Any XXXX_datum_t structure have "u32 bounds" member to indicate its >> bounds, and we can handle it with the latest version of policy format >> provided by this patch. >> >> - Loading attributes into kernel space: >> The upcoming kernel also allows to load entries of attribute. >> The attached patch turn off to drop them, when it tries to write >> kernel policy with its version is equal or greater than >> POLICYDB_VERSION_BOUNDARY. >> Any entries of attribute has a property of TYPEDATUM_PROPERTY_ATTRIBUTE. >> >> - Improvement of type_datum format on kernel/modular policy. >> The type_datum entry has several its attribute fields like "primary", >> "flavor" and "flags", and these are stored within separated fields >> on-disk format. This patch enables to pack them into a single field. >> Currently four bits are defined, and rest of them are reserved. >> #define TYPEDATUM_PROPERTY_PRIMARY 0x0001 >> #define TYPEDATUM_PROPERTY_ATTRIBUTE 0x0002 >> #define TYPEDATUM_PROPERTY_ALIAS 0x0004 /* userspace only */ >> #define TYPEDATUM_PROPERTY_PERMISSIVE 0x0008 /* userspace only */ >> >> - Hierarchy checks are reworked >> The existing userspace hierarchy checks are reworked for the upcoming >> boundary feature. It can handle parent one based on both newer bounds >> relationship and existing name-based hierarchy. >> >> In addition, I put a trick to evaluate conditional rules correctly. >> The following example shows a confusable case. A_t is the bounds of B_t, >> so B_t can never has wider permission than A_t. >> >> Example) >> allow B_t X_t : file { read_file_perms }; >> if (A_can_write_X) { >> allow A_t X_t : file { write_file_perms }; >> } else { >> allow A_t X_t : file { read_file_perms }; >> } >> >> A_t's permissions on X_t is depend on the 'A_can_write_X', however, >> a part of them, like 'read', are unconditionally allowed. >> If we can find common permission on both of true/false lists, these >> are pulled up to unconditional rules. >> Thus, B_t's read permission on X_t is not hierarchy violated in the >> above example. It also matches the upcoming kernel behavior no need >> to say. >> > > Was this the latest patch? I can't seem to apply it either to the latest > git HEAD or to the last svn revision: Sorry, my Thunderbird translated any tabs into spaces. The patch is made based on the latest subversion repository. Can you apply the attached one correctly? Thanks, > [root@misterfreeze trunk]# patch -p0 --dry-run -F5< /root/selinux/patch > patching file libsepol/include/sepol/policydb/policydb.h > Hunk #1 succeeded at 119 with fuzz 3. > Hunk #2 FAILED at 146. > Hunk #3 succeeded at 167 with fuzz 3. > Hunk #4 FAILED at 607. > Hunk #5 FAILED at 621. > 3 out of 5 hunks FAILED -- saving rejects to file libsepol/include/sepol/policydb/policydb.h.rej > patching file libsepol/src/policydb.c > Hunk #1 succeeded at 110 with fuzz 3. > Hunk #2 succeeded at 147 with fuzz 3. > Hunk #3 succeeded at 182 with fuzz 3. > Hunk #4 FAILED at 1873. > Hunk #5 succeeded at 1947 with fuzz 3. > Hunk #6 FAILED at 1962. > Hunk #7 FAILED at 2338. > 3 out of 7 hunks FAILED -- saving rejects to file libsepol/src/policydb.c.rej > patching file libsepol/src/hierarchy.c > Hunk #1 FAILED at 1. > Hunk #2 FAILED at 46. > Hunk #3 FAILED at 125. > Hunk #4 FAILED at 157. > Hunk #5 FAILED at 335. > Hunk #6 FAILED at 402. > Hunk #7 FAILED at 428. > Hunk #8 succeeded at 467 with fuzz 3. > 7 out of 8 hunks FAILED -- saving rejects to file libsepol/src/hierarchy.c.rej > patching file libsepol/src/expand.c > Hunk #1 succeeded at 466 with fuzz 3. > Hunk #2 succeeded at 1959 with fuzz 3. > Hunk #3 succeeded at 2462 with fuzz 3. > Hunk #4 succeeded at 2480 with fuzz 3. > Hunk #5 succeeded at 2498 with fuzz 3. > Hunk #6 succeeded at 2590 with fuzz 3. > patching file libsepol/src/write.c > Hunk #1 succeeded at 920 with fuzz 3. > Hunk #2 FAILED at 954. > Hunk #3 succeeded at 1031 with fuzz 3. > 1 out of 3 hunks FAILED -- saving rejects to file libsepol/src/write.c.rej > patching file libsepol/src/link.c > Hunk #1 succeeded at 660 with fuzz 3. > Hunk #2 FAILED at 1453. > 1 out of 2 hunks FAILED -- saving rejects to file libsepol/src/link.c.rej > -- KaiGai Kohei --------------040108050802090505010207 Content-Type: application/octect-stream; name="thread-context-libsepol.6.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="thread-context-libsepol.6.patch" SW5kZXg6IGxpYnNlcG9sL2luY2x1ZGUvc2Vwb2wvcG9saWN5ZGIvcG9saWN5ZGIuaAo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBsaWJzZXBvbC9pbmNsdWRlL3NlcG9sL3BvbGljeWRiL3BvbGljeWRi LmgJKHJldmlzaW9uIDI5NTApCisrKyBsaWJzZXBvbC9pbmNsdWRlL3NlcG9sL3BvbGljeWRi L3BvbGljeWRiLmgJKHdvcmtpbmcgY29weSkKQEAgLTExOSw2ICsxMTksNyBAQAogCWViaXRt YXBfdCBkb21pbmF0ZXM7CS8qIHNldCBvZiByb2xlcyBkb21pbmF0ZWQgYnkgdGhpcyByb2xl ICovCiAJdHlwZV9zZXRfdCB0eXBlczsJLyogc2V0IG9mIGF1dGhvcml6ZWQgdHlwZXMgZm9y IHJvbGUgKi8KIAllYml0bWFwX3QgY2FjaGU7CS8qIFRoaXMgaXMgYW4gZXhwYW5kZWQgc2V0 IHVzZWQgZm9yIGNvbnRleHQgdmFsaWRhdGlvbiBkdXJpbmcgcGFyc2luZyAqLworCXVpbnQz Ml90IGJvdW5kczsJLyogYm91bmRzIHJvbGUsIGlmIGV4aXN0ICovCiB9IHJvbGVfZGF0dW1f dDsKIAogdHlwZWRlZiBzdHJ1Y3Qgcm9sZV90cmFucyB7CkBAIC0xNDUsOCArMTQ2LDE4IEBA CiAJZWJpdG1hcF90IHR5cGVzOwkvKiB0eXBlcyB3aXRoIHRoaXMgYXR0cmlidXRlICovCiAj ZGVmaW5lIFRZUEVfRkxBR1NfUEVSTUlTU0lWRQkweDAxCiAJdWludDMyX3QgZmxhZ3M7CisJ dWludDMyX3QgYm91bmRzOwkvKiBib3VuZHMgdHlwZSwgaWYgZXhpc3QgKi8KIH0gdHlwZV9k YXR1bV90OwogCisvKgorICogUHJvcGVydGllcyBvZiB0eXBlX2RhdHVtCisgKiBhdmFpbGFi bGUgb24gdGhlIHBvbGljeSB2ZXJzaW9uID49IChNT0RfKVBPTElDWURCX1ZFUlNJT05fQk9V TkRBUlkKKyAqLworI2RlZmluZSBUWVBFREFUVU1fUFJPUEVSVFlfUFJJTUFSWQkweDAwMDEK KyNkZWZpbmUgVFlQRURBVFVNX1BST1BFUlRZX0FUVFJJQlVURQkweDAwMDIKKyNkZWZpbmUg VFlQRURBVFVNX1BST1BFUlRZX0FMSUFTCTB4MDAwNAkvKiB1c2Vyc3BhY2Ugb25seSAqLwor I2RlZmluZSBUWVBFREFUVU1fUFJPUEVSVFlfUEVSTUlTU0lWRQkweDAwMDgJLyogdXNlcnNw YWNlIG9ubHkgKi8KKwogLyogVXNlciBhdHRyaWJ1dGVzICovCiB0eXBlZGVmIHN0cnVjdCB1 c2VyX2RhdHVtIHsKIAlzeW10YWJfZGF0dW1fdCBzOwpAQCAtMTU2LDYgKzE2Nyw3IEBACiAJ ZWJpdG1hcF90IGNhY2hlOwkvKiBUaGlzIGlzIGFuIGV4cGFuZGVkIHNldCB1c2VkIGZvciBj b250ZXh0IHZhbGlkYXRpb24gZHVyaW5nIHBhcnNpbmcgKi8KIAltbHNfcmFuZ2VfdCBleHBf cmFuZ2U7ICAgICAvKiBleHBhbmRlZCByYW5nZSB1c2VkIGZvciB2YWxpZGF0aW9uICovCiAJ bWxzX2xldmVsX3QgZXhwX2RmbHRsZXZlbDsgLyogZXhwYW5kZWQgcmFuZ2UgdXNlZCBmb3Ig dmFsaWRhdGlvbiAqLworCXVpbnQzMl90IGJvdW5kczsJLyogYm91bmRzIHVzZXIsIGlmIGV4 aXN0ICovCiB9IHVzZXJfZGF0dW1fdDsKIAogLyogU2Vuc2l0aXZpdHkgYXR0cmlidXRlcyAq LwpAQCAtNTk1LDEwICs2MDcsMTEgQEAKICNkZWZpbmUgUE9MSUNZREJfVkVSU0lPTl9SQU5H RVRSQU5TCTIxCiAjZGVmaW5lIFBPTElDWURCX1ZFUlNJT05fUE9MQ0FQCQkyMgogI2RlZmlu ZSBQT0xJQ1lEQl9WRVJTSU9OX1BFUk1JU1NJVkUJMjMKKyNkZWZpbmUgUE9MSUNZREJfVkVS U0lPTl9CT1VOREFSWQkyNAogCiAvKiBSYW5nZSBvZiBwb2xpY3kgdmVyc2lvbnMgd2UgdW5k ZXJzdGFuZCovCiAjZGVmaW5lIFBPTElDWURCX1ZFUlNJT05fTUlOCVBPTElDWURCX1ZFUlNJ T05fQkFTRQotI2RlZmluZSBQT0xJQ1lEQl9WRVJTSU9OX01BWAlQT0xJQ1lEQl9WRVJTSU9O X1BFUk1JU1NJVkUKKyNkZWZpbmUgUE9MSUNZREJfVkVSU0lPTl9NQVgJUE9MSUNZREJfVkVS U0lPTl9CT1VOREFSWQogCiAvKiBNb2R1bGUgdmVyc2lvbnMgYW5kIHNwZWNpZmljIGNoYW5n ZXMqLwogI2RlZmluZSBNT0RfUE9MSUNZREJfVkVSU0lPTl9CQVNFCSAgIDQKQEAgLTYwOCwx MiArNjIxLDIzIEBACiAjZGVmaW5lIE1PRF9QT0xJQ1lEQl9WRVJTSU9OX01MU19VU0VSUwkg ICA2CiAjZGVmaW5lIE1PRF9QT0xJQ1lEQl9WRVJTSU9OX1BPTENBUAkgICA3CiAjZGVmaW5l IE1PRF9QT0xJQ1lEQl9WRVJTSU9OX1BFUk1JU1NJVkUJICAgOAorI2RlZmluZSBNT0RfUE9M SUNZREJfVkVSU0lPTl9CT1VOREFSWSAgICAgIDkKIAogI2RlZmluZSBNT0RfUE9MSUNZREJf VkVSU0lPTl9NSU4gTU9EX1BPTElDWURCX1ZFUlNJT05fQkFTRQotI2RlZmluZSBNT0RfUE9M SUNZREJfVkVSU0lPTl9NQVggTU9EX1BPTElDWURCX1ZFUlNJT05fUEVSTUlTU0lWRQorI2Rl ZmluZSBNT0RfUE9MSUNZREJfVkVSU0lPTl9NQVggTU9EX1BPTElDWURCX1ZFUlNJT05fQk9V TkRBUlkKIAogI2RlZmluZSBQT0xJQ1lEQl9DT05GSUdfTUxTICAgIDEKIAorLyogbWFjcm9z IHRvIGNoZWNrIHBvbGljeSBmZWF0dXJlICovCisKKy8qIFRPRE86IGFkZCBvdGhlciBmZWF0 dXJlcyBoZXJlICovCisKKyNkZWZpbmUgcG9saWN5ZGJfaGFzX2JvdW5kYXJ5X2ZlYXR1cmUo cCkJCQlcCisJKCgocCktPnBvbGljeV90eXBlID09IFBPTElDWV9LRVJOCQkJXAorCSAgJiYg cC0+cG9saWN5dmVycyA+PSBQT0xJQ1lEQl9WRVJTSU9OX0JPVU5EQVJZKSB8fAlcCisJICgo cCktPnBvbGljeV90eXBlICE9IFBPTElDWV9LRVJOCQkJXAorCSAgJiYgcC0+cG9saWN5dmVy cyA+PSBNT0RfUE9MSUNZREJfVkVSU0lPTl9CT1VOREFSWSkpCisKIC8qIHRoZSBjb25maWcg ZmxhZ3MgcmVsYXRlZCB0byB1bmtub3duIGNsYXNzZXMvcGVybXMgYXJlIGJpdHMgMiBhbmQg MyAqLwogI2RlZmluZSBERU5ZX1VOS05PV04JU0VQT0xfREVOWV9VTktOT1dOCiAjZGVmaW5l IFJFSkVDVF9VTktOT1dOCVNFUE9MX1JFSkVDVF9VTktOT1dOCkluZGV4OiBsaWJzZXBvbC9z cmMvcG9saWN5ZGIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsaWJzZXBvbC9zcmMvcG9saWN5ZGIu YwkocmV2aXNpb24gMjk1MCkKKysrIGxpYnNlcG9sL3NyYy9wb2xpY3lkYi5jCSh3b3JraW5n IGNvcHkpCkBAIC0xMTAsNiArMTEwLDEyIEBACiAJIC5zeW1fbnVtID0gU1lNX05VTSwKIAkg Lm9jb25fbnVtID0gT0NPTl9OT0RFNiArIDEsCiAJIH0sCisgICAgICAgIHsKKwkgLnR5cGUg PSBQT0xJQ1lfS0VSTiwKKwkgLnZlcnNpb24gPSBQT0xJQ1lEQl9WRVJTSU9OX0JPVU5EQVJZ LAorCSAuc3ltX251bSA9IFNZTV9OVU0sCisJIC5vY29uX251bSA9IE9DT05fTk9ERTYgKyAx LAorCX0sCiAJewogCSAudHlwZSA9IFBPTElDWV9CQVNFLAogCSAudmVyc2lvbiA9IE1PRF9Q T0xJQ1lEQl9WRVJTSU9OX0JBU0UsCkBAIC0xNDEsNiArMTQ3LDEyIEBACiAJIC5vY29uX251 bSA9IE9DT05fTk9ERTYgKyAxLAogCSB9LAogCXsKKwkgLnR5cGUgPSBQT0xJQ1lfQkFTRSwK KwkgLnZlcnNpb24gPSBNT0RfUE9MSUNZREJfVkVSU0lPTl9CT1VOREFSWSwKKwkgLnN5bV9u dW0gPSBTWU1fTlVNLAorCSAub2Nvbl9udW0gPSBPQ09OX05PREU2ICsgMSwKKwl9LAorCXsK IAkgLnR5cGUgPSBQT0xJQ1lfTU9ELAogCSAudmVyc2lvbiA9IE1PRF9QT0xJQ1lEQl9WRVJT SU9OX0JBU0UsCiAJIC5zeW1fbnVtID0gU1lNX05VTSwKQEAgLTE3MCw2ICsxODIsMTIgQEAK IAkgLnN5bV9udW0gPSBTWU1fTlVNLAogCSAub2Nvbl9udW0gPSAwCiAJIH0sCisJeworCSAu dHlwZSA9IFBPTElDWV9NT0QsCisJIC52ZXJzaW9uID0gTU9EX1BPTElDWURCX1ZFUlNJT05f Qk9VTkRBUlksCisJIC5zeW1fbnVtID0gU1lNX05VTSwKKwkgLm9jb25fbnVtID0gMAorCX0s CiB9OwogCiAjaWYgMApAQCAtMTg1NSwyMCArMTg3MywyNSBAQAogewogCWNoYXIgKmtleSA9 IDA7CiAJcm9sZV9kYXR1bV90ICpyb2xlOwotCXVpbnQzMl90IGJ1ZlsyXTsKKwl1aW50MzJf dCBidWZbM107CiAJc2l6ZV90IGxlbjsKLQlpbnQgcmM7CisJaW50IHJjLCB0b19yZWFkID0g MjsKIAogCXJvbGUgPSBjYWxsb2MoMSwgc2l6ZW9mKHJvbGVfZGF0dW1fdCkpOwogCWlmICgh cm9sZSkKIAkJcmV0dXJuIC0xOwogCi0JcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVv Zih1aW50MzJfdCkgKiAyKTsKKwlpZiAocG9saWN5ZGJfaGFzX2JvdW5kYXJ5X2ZlYXR1cmUo cCkpCisJCXRvX3JlYWQgPSAzOworCisJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVv Zih1aW50MzJfdCkgKiB0b19yZWFkKTsKIAlpZiAocmMgPCAwKQogCQlnb3RvIGJhZDsKIAog CWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CiAJcm9sZS0+cy52YWx1ZSA9IGxlMzJfdG9f Y3B1KGJ1ZlsxXSk7CisJaWYgKHBvbGljeWRiX2hhc19ib3VuZGFyeV9mZWF0dXJlKHApKQor CQlyb2xlLT5ib3VuZHMgPSBsZTMyX3RvX2NwdShidWZbMl0pOwogCiAJa2V5ID0gbWFsbG9j KGxlbiArIDEpOwogCWlmICgha2V5KQpAQCAtMTkyNCw3ICsxOTQ3LDkgQEAKIAlpZiAoIXR5 cGRhdHVtKQogCQlyZXR1cm4gLTE7CiAKLQlpZiAocC0+cG9saWN5X3R5cGUgPT0gUE9MSUNZ X0tFUk4pCisJaWYgKHBvbGljeWRiX2hhc19ib3VuZGFyeV9mZWF0dXJlKHApKQorCQl0b19y ZWFkID0gNDsKKwllbHNlIGlmIChwLT5wb2xpY3lfdHlwZSA9PSBQT0xJQ1lfS0VSTikKIAkJ dG9fcmVhZCA9IDM7CiAJZWxzZSBpZiAocC0+cG9saWN5dmVycyA+PSBNT0RfUE9MSUNZREJf VkVSU0lPTl9QRVJNSVNTSVZFKQogCQl0b19yZWFkID0gNTsKQEAgLTE5MzcsMTEgKzE5NjIs MzEgQEAKIAogCWxlbiA9IGxlMzJfdG9fY3B1KGJ1ZlswXSk7CiAJdHlwZGF0dW0tPnMudmFs dWUgPSBsZTMyX3RvX2NwdShidWZbMV0pOwotCXR5cGRhdHVtLT5wcmltYXJ5ID0gbGUzMl90 b19jcHUoYnVmWzJdKTsKKwlpZiAocG9saWN5ZGJfaGFzX2JvdW5kYXJ5X2ZlYXR1cmUocCkp IHsKKwkJdWludDMyX3QgcHJvcGVydGllcyA9IGxlMzJfdG9fY3B1KGJ1ZlsyXSk7CisKKwkJ aWYgKHByb3BlcnRpZXMgJiBUWVBFREFUVU1fUFJPUEVSVFlfUFJJTUFSWSkKKwkJCXR5cGRh dHVtLT5wcmltYXJ5ID0gMTsKKwkJaWYgKHByb3BlcnRpZXMgJiBUWVBFREFUVU1fUFJPUEVS VFlfQVRUUklCVVRFKQorCQkJdHlwZGF0dW0tPmZsYXZvciA9IFRZUEVfQVRUUklCOworCQlp ZiAocHJvcGVydGllcyAmIFRZUEVEQVRVTV9QUk9QRVJUWV9BTElBUworCQkgICAgJiYgcC0+ cG9saWN5X3R5cGUgIT0gUE9MSUNZX0tFUk4pCisJCQl0eXBkYXR1bS0+Zmxhdm9yID0gVFlQ RV9BTElBUzsKKwkJaWYgKHByb3BlcnRpZXMgJiBUWVBFREFUVU1fUFJPUEVSVFlfUEVSTUlT U0lWRQorCQkgICAgJiYgcC0+cG9saWN5X3R5cGUgIT0gUE9MSUNZX0tFUk4pCisJCQl0eXBk YXR1bS0+ZmxhZ3MgfD0gVFlQRV9GTEFHU19QRVJNSVNTSVZFOworCisJCXR5cGRhdHVtLT5i b3VuZHMgPSBsZTMyX3RvX2NwdShidWZbM10pOworCX0gZWxzZSB7CisJCXR5cGRhdHVtLT5w cmltYXJ5ID0gbGUzMl90b19jcHUoYnVmWzJdKTsKKwkJaWYgKHAtPnBvbGljeV90eXBlICE9 IFBPTElDWV9LRVJOKSB7CisJCQl0eXBkYXR1bS0+Zmxhdm9yID0gbGUzMl90b19jcHUoYnVm WzNdKTsKKwkJCWlmIChwLT5wb2xpY3l2ZXJzID49IE1PRF9QT0xJQ1lEQl9WRVJTSU9OX1BF Uk1JU1NJVkUpCisJCQkJdHlwZGF0dW0tPmZsYWdzID0gbGUzMl90b19jcHUoYnVmWzRdKTsK KwkJfQorCX0KKwogCWlmIChwLT5wb2xpY3lfdHlwZSAhPSBQT0xJQ1lfS0VSTikgewotCQl0 eXBkYXR1bS0+Zmxhdm9yID0gbGUzMl90b19jcHUoYnVmWzNdKTsKLQkJaWYgKHAtPnBvbGlj eXZlcnMgPj0gTU9EX1BPTElDWURCX1ZFUlNJT05fUEVSTUlTU0lWRSkKLQkJCXR5cGRhdHVt LT5mbGFncyA9IGxlMzJfdG9fY3B1KGJ1Zls0XSk7CiAJCWlmIChlYml0bWFwX3JlYWQoJnR5 cGRhdHVtLT50eXBlcywgZnApKQogCQkJZ290byBiYWQ7CiAJfQpAQCAtMjI5MywyMCArMjMz OCwyNSBAQAogewogCWNoYXIgKmtleSA9IDA7CiAJdXNlcl9kYXR1bV90ICp1c3JkYXR1bTsK LQl1aW50MzJfdCBidWZbMl07CisJdWludDMyX3QgYnVmWzNdOwogCXNpemVfdCBsZW47Ci0J aW50IHJjOworCWludCByYywgdG9fcmVhZCA9IDI7CiAKIAl1c3JkYXR1bSA9IGNhbGxvYygx LCBzaXplb2YodXNlcl9kYXR1bV90KSk7CiAJaWYgKCF1c3JkYXR1bSkKIAkJcmV0dXJuIC0x OwogCi0JcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1aW50MzJfdCkgKiAyKTsK KwlpZiAocG9saWN5ZGJfaGFzX2JvdW5kYXJ5X2ZlYXR1cmUocCkpCisJCXRvX3JlYWQgPSAz OworCisJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1aW50MzJfdCkgKiB0b19y ZWFkKTsKIAlpZiAocmMgPCAwKQogCQlnb3RvIGJhZDsKIAogCWxlbiA9IGxlMzJfdG9fY3B1 KGJ1ZlswXSk7CiAJdXNyZGF0dW0tPnMudmFsdWUgPSBsZTMyX3RvX2NwdShidWZbMV0pOwor CWlmIChwb2xpY3lkYl9oYXNfYm91bmRhcnlfZmVhdHVyZShwKSkKKwkJdXNyZGF0dW0tPmJv dW5kcyA9IGxlMzJfdG9fY3B1KGJ1ZlsyXSk7CiAKIAlrZXkgPSBtYWxsb2MobGVuICsgMSk7 CiAJaWYgKCFrZXkpCkluZGV4OiBsaWJzZXBvbC9zcmMvaGllcmFyY2h5LmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gbGlic2Vwb2wvc3JjL2hpZXJhcmNoeS5jCShyZXZpc2lvbiAyOTUwKQorKysg bGlic2Vwb2wvc3JjL2hpZXJhcmNoeS5jCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExICsxLDE2 IEBACiAvKiBBdXRob3JzOiBKb3NodWEgQnJpbmRsZSA8amJyaW5kbGVAdHJlc3lzLmNvbT4K ICAqIAkgICAgSmFzb24gVGFuZyA8anRhbmdAdHJlc3lzLmNvbT4KICAqCisgKiBVcGRhdGVz OiBLYWlHYWkgS29oZWkgPGthaWdhaUBhay5qcC5uZWMuY29tPgorICogICAgICAgICAgYWRk cyBjaGVja3MgYmFzZWQgb24gbmV3ZXIgYm91bmRhcnkgZmFjaWxpdHkuCisgKgogICogQSBz ZXQgb2YgdXRpbGl0eSBmdW5jdGlvbnMgdGhhdCBhaWQgcG9saWN5IGRlY2lzaW9uIHdoZW4g ZGVhbGluZwogICogd2l0aCBoaWVyYXJjaGFsIG5hbWVzcGFjZXMuCiAgKgogICogQ29weXJp Z2h0IChDKSAyMDA1IFRyZXN5cyBUZWNobm9sb2d5LCBMTEMKICAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMDggTkVDIENvcnBvcmF0aW9uCisgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCiAg KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCkBAIC00MSwzNiArNDYsNzcgQEAKIAlpbnQgbnVtZXJyOwogfSBoaWVyYXJj aHlfYXJnc190OwogCi0vKiBUaGlzIG1lcmVseSByZXR1cm5zIHRoZSBzdHJpbmcgcGFydCBi ZWZvcmUgdGhlIGxhc3QgJy4nCi0gKiBpdCBkb2VzIG5vIHZlcmlmaWNhdGlvbiBvZiB0aGUg ZXhpc3RhbmNlIG9mIHRoZSBwYXJlbnQKLSAqIGluIHRoZSBwb2xpY3ksIHlvdSBtdXN0IGRv IHRoaXMgeW91cnNlbGYuCisvKgorICogZmluZF9wYXJlbnRfKHR5cGV8cm9sZXx1c2VyKQog ICoKLSAqIENhbGxlciBtdXN0IGZyZWUgcGFyZW50IGFmdGVyIHVzZS4KKyAqIFRoaXMgZnVu Y3Rpb24gcmV0dXJucyB0aGUgcGFyZW50IGRhdHVtIG9mIGdpdmVuIFhYWF9kYXR1bV90Cisg KiBvYmplY3Qgb3IgTlVMTCwgaWYgaXQgZG9lc24ndCBleGlzdC4KKyAqCisgKiBJZiB0aGUg Z2l2ZW4gZGF0dW0gaGFzIGEgdmFsaWQgYm91bmRzLCB0aGlzIGZ1bmN0aW9uIG1lcmVseQor ICogcmV0dXJucyB0aGUgaW5kaWNhdGVkIG9iamVjdC4gT3RoZXJ3aXNlLCBpdCBsb29rcyB1 cCB0aGUKKyAqIHBhcmVudCBiYXNlZCBvbiB0aGUgYmFzZWQgaGllcmFyY2h5LgogICovCi1z dGF0aWMgaW50IGZpbmRfcGFyZW50KGNoYXIgKnR5cGUsIGNoYXIgKipwYXJlbnQpCisjZGVm aW5lIGZpbmRfcGFyZW50X3RlbXBsYXRlKHByZWZpeCkJCQkJXAoraW50IGZpbmRfcGFyZW50 XyMjcHJlZml4KGhpZXJhcmNoeV9hcmdzX3QgKmEsCQkJXAorCQkJIHByZWZpeCMjX2RhdHVt X3QgKmRhdHVtLAkJXAorCQkJIHByZWZpeCMjX2RhdHVtX3QgKipwYXJlbnQpCQlcCit7CQkJ CQkJCQlcCisJY2hhciAqcGFyZW50X25hbWUsICpkYXR1bV9uYW1lLCAqdG1wOwkJCVwKKwkJ CQkJCQkJXAorCWlmIChkYXR1bS0+Ym91bmRzKQkJCQkJCVwKKwkJKnBhcmVudCA9IGEtPnAt PnByZWZpeCMjX3ZhbF90b19zdHJ1Y3RbZGF0dW0tPmJvdW5kcyAtIDFdOyBcCisJZWxzZSB7 CQkJCQkJCQlcCisJCWRhdHVtX25hbWUgPSBhLT5wLT5wXyMjcHJlZml4IyNfdmFsX3RvX25h bWVbZGF0dW0tPnMudmFsdWUgLSAxXTsgXAorCQkJCQkJCQkJXAorCQl0bXAgPSBzdHJyY2hy KGRhdHVtX25hbWUsICcuJyk7CQkJCVwKKwkJLyogbm8gJy4nIG1lYW5zIGl0IGhhcyBubyBw YXJlbnQgKi8JCQlcCisJCWlmICghdG1wKSB7CQkJCQkJXAorCQkJKnBhcmVudCA9IE5VTEw7 CQkJCQlcCisJCQlyZXR1cm4gMDsJCQkJCVwKKwkJfQkJCQkJCQlcCisJCQkJCQkJCQlcCisJ CXBhcmVudF9uYW1lID0gc3RyZHVwKGRhdHVtX25hbWUpOwkJCVwKKwkJaWYgKCFwYXJlbnRf bmFtZSkJCQkJCVwKKwkJCXJldHVybiAtMTsJCQkJCVwKKwkJcGFyZW50X25hbWVbdG1wIC0g ZGF0dW1fbmFtZV0gPSAnXDAnOwkJCVwKKwkJCQkJCQkJCVwKKwkJKnBhcmVudCA9IGhhc2h0 YWJfc2VhcmNoKGEtPnAtPnBfIyNwcmVmaXgjI3MudGFibGUsIHBhcmVudF9uYW1lKTsgXAor CQlpZiAoISpwYXJlbnQpIHsJCQkJCQlcCisJCQkvKiBPcnBoYW4gdHlwZS9yb2xlL3VzZXIg Ki8JCQlcCisJCQlFUlIoYS0+aGFuZGxlLAkJCQkJXAorCQkJICAgICIlcyBkb2Vzbid0IGV4 aXN0LCAlcyBpcyBhbiBvcnBoYW4iLAlcCisJCQkgICAgcGFyZW50X25hbWUsCQkJCVwKKwkJ CSAgICBhLT5wLT5wXyMjcHJlZml4IyNfdmFsX3RvX25hbWVbZGF0dW0tPnMudmFsdWUgLSAx XSk7IFwKKwkJCWZyZWUocGFyZW50X25hbWUpOwkJCQlcCisJCQlyZXR1cm4gLTE7CQkJCQlc CisJCX0JCQkJCQkJXAorCQlmcmVlKHBhcmVudF9uYW1lKTsJCQkJCVwKKwl9CQkJCQkJCQlc CisJCQkJCQkJCQlcCisJcmV0dXJuIDA7CQkJCQkJCVwKK30KKworc3RhdGljIGZpbmRfcGFy ZW50X3RlbXBsYXRlKHR5cGUpCitzdGF0aWMgZmluZF9wYXJlbnRfdGVtcGxhdGUocm9sZSkK K3N0YXRpYyBmaW5kX3BhcmVudF90ZW1wbGF0ZSh1c2VyKQorCitzdGF0aWMgdm9pZCBjb21w dXRlX2F2dGFiX2RhdHVtKGhpZXJhcmNoeV9hcmdzX3QgKmFyZ3MsCisJCQkJYXZ0YWJfa2V5 X3QgKmtleSwKKwkJCQlhdnRhYl9kYXR1bV90ICpyZXN1bHQpCiB7Ci0JY2hhciAqdG1wOwot CWludCBsZW47CisJYXZ0YWJfZGF0dW1fdCAqYXZkYXRwOworCXVpbnQzMl90IGF2ID0gMDsK IAotCWFzc2VydCh0eXBlKTsKLQotCXRtcCA9IHN0cnJjaHIodHlwZSwgJy4nKTsKLQkvKiBu byAnLicgbWVhbnMgaXQgaGFzIG5vIHBhcmVudCAqLwotCWlmICghdG1wKSB7Ci0JCSpwYXJl bnQgPSBOVUxMOwotCQlyZXR1cm4gMDsKKwlhdmRhdHAgPSBhdnRhYl9zZWFyY2goYXJncy0+ ZXhwYSwga2V5KTsKKwlpZiAoYXZkYXRwKQorCQlhdiA9IGF2ZGF0cC0+ZGF0YTsKKwlpZiAo YXJncy0+b3B0X2NvbmRfbGlzdCkgeworCQlhdmRhdHAgPSBjb25kX2F2X2xpc3Rfc2VhcmNo KGtleSwgYXJncy0+b3B0X2NvbmRfbGlzdCk7CisJCWlmIChhdmRhdHApCisJCQlhdiB8PSBh dmRhdHAtPmRhdGE7CiAJfQogCi0JLyogYWxsb2NhdGUgYnVmZmVyIGZvciBwYXJ0IG9mIHN0 cmluZyBiZWZvcmUgdGhlICcuJyAqLwotCWxlbiA9IHRtcCAtIHR5cGU7Ci0JKnBhcmVudCA9 IChjaGFyICopbWFsbG9jKHNpemVvZihjaGFyKSAqIChsZW4gKyAxKSk7Ci0KLQlpZiAoISgq cGFyZW50KSkKLQkJcmV0dXJuIC0xOwotCW1lbWNweSgqcGFyZW50LCB0eXBlLCBsZW4pOwot CSgqcGFyZW50KVtsZW5dID0gJ1wwJzsKLQotCXJldHVybiAwOworCXJlc3VsdC0+ZGF0YSA9 IGF2OwogfQogCiAvKiBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIHRoYXQgdGhlIHR5cGUgcGFz c2VkIGluIGVpdGhlciBoYXMgYSBwYXJlbnQgb3IgaXMgaW4gdGhlIApAQCAtNzksNDEgKzEy NSwyNiBAQAogc3RhdGljIGludCBjaGVja190eXBlX2hpZXJhcmNoeV9jYWxsYmFjayhoYXNo dGFiX2tleV90IGssIGhhc2h0YWJfZGF0dW1fdCBkLAogCQkJCQkgdm9pZCAqYXJncykKIHsK LQljaGFyICpwYXJlbnQ7CiAJaGllcmFyY2h5X2FyZ3NfdCAqYTsKLQl0eXBlX2RhdHVtX3Qg KnQsICp0MjsKLQljaGFyICprZXk7CisJdHlwZV9kYXR1bV90ICp0LCAqdHA7CiAKIAlhID0g KGhpZXJhcmNoeV9hcmdzX3QgKikgYXJnczsKIAl0ID0gKHR5cGVfZGF0dW1fdCAqKSBkOwot CWtleSA9IChjaGFyICopazsKIAogCWlmICh0LT5mbGF2b3IgPT0gVFlQRV9BVFRSSUIpIHsK IAkJLyogSXQncyBhbiBhdHRyaWJ1dGUsIHdlIGRvbid0IGNhcmUgKi8KIAkJcmV0dXJuIDA7 CiAJfQotCi0JaWYgKGZpbmRfcGFyZW50KGtleSwgJnBhcmVudCkpCisJaWYgKGZpbmRfcGFy ZW50X3R5cGUoYSwgdCwgJnRwKSA8IDApCiAJCXJldHVybiAtMTsKIAotCWlmICghcGFyZW50 KSB7Ci0JCS8qIFRoaXMgdHlwZSBpcyBpbiB0aGUgcm9vdCBuYW1lc3BhY2UgKi8KLQkJcmV0 dXJuIDA7Ci0JfQotCi0JdDIgPSBoYXNodGFiX3NlYXJjaChhLT5wLT5wX3R5cGVzLnRhYmxl LCBwYXJlbnQpOwotCWlmICghdDIpIHsKLQkJLyogSWYgdGhlIHBhcmVudCBkb2VzIG5vdCBl eGlzdCB0aGlzIHR5cGUgaXMgYW4gb3JwaGFuLCBub3QgbGVnYWwgKi8KLQkJRVJSKGEtPmhh bmRsZSwgInR5cGUgJXMgZG9lcyBub3QgZXhpc3QsICVzIGlzIGFuIG9ycGhhbiIsCi0JCSAg ICBwYXJlbnQsIGEtPnAtPnBfdHlwZV92YWxfdG9fbmFtZVt0LT5zLnZhbHVlIC0gMV0pOwot CQlhLT5udW1lcnIrKzsKLQl9IGVsc2UgaWYgKHQyLT5mbGF2b3IgPT0gVFlQRV9BVFRSSUIp IHsKKwlpZiAodHAgJiYgdHAtPmZsYXZvciA9PSBUWVBFX0FUVFJJQikgewogCQkvKiBUaGUg cGFyZW50IGlzIGFuIGF0dHJpYnV0ZSBidXQgdGhlIGNoaWxkIGlzbid0LCBub3QgbGVnYWwg Ki8KLQkJRVJSKGEtPmhhbmRsZSwgInR5cGUgJXMgaXMgYSBjaGlsZCBvZiBhbiBhdHRyaWJ1 dGUiLAotCQkgICAgYS0+cC0+cF90eXBlX3ZhbF90b19uYW1lW3QtPnMudmFsdWUgLSAxXSk7 CisJCUVSUihhLT5oYW5kbGUsICJ0eXBlICVzIGlzIGEgY2hpbGQgb2YgYW4gYXR0cmlidXRl ICVzIiwKKwkJICAgIChjaGFyICopIGssIGEtPnAtPnBfdHlwZV92YWxfdG9fbmFtZVt0cC0+ cy52YWx1ZSAtIDFdKTsKIAkJYS0+bnVtZXJyKys7CisJCXJldHVybiAtMTsKIAl9Ci0JZnJl ZShwYXJlbnQpOwogCXJldHVybiAwOwogfQogCkBAIC0xMjYsMTM2ICsxNTcsMTc2IEBACiBz dGF0aWMgaW50IGNoZWNrX2F2dGFiX2hpZXJhcmNoeV9jYWxsYmFjayhhdnRhYl9rZXlfdCAq IGssIGF2dGFiX2RhdHVtX3QgKiBkLAogCQkJCQkgIHZvaWQgKmFyZ3MpCiB7Ci0JY2hhciAq cGFyZW50OwogCWF2dGFiX2tleV90IGtleTsKLQlhdnRhYl9kYXR1bV90ICphdmRhdHVtcDsK LQloaWVyYXJjaHlfYXJnc190ICphOwotCXVpbnQzMl90IGF2ID0gMDsKLQl0eXBlX2RhdHVt X3QgKnQgPSBOVUxMLCAqdDIgPSBOVUxMOworCWhpZXJhcmNoeV9hcmdzX3QgKmEgPSAoaGll cmFyY2h5X2FyZ3NfdCAqKSBhcmdzOworCXR5cGVfZGF0dW1fdCAqcywgKnQxID0gTlVMTCwg KnQyID0gTlVMTDsKKwlhdnRhYl9kYXR1bV90IGF2OwogCiAJaWYgKCEoay0+c3BlY2lmaWVk ICYgQVZUQUJfQUxMT1dFRCkpIHsKIAkJLyogVGhpcyBpcyBub3QgYW4gYWxsb3cgcnVsZSwg bm8gY2hlY2tpbmcgZG9uZSAqLwogCQlyZXR1cm4gMDsKIAl9CiAKLQlhID0gKGhpZXJhcmNo eV9hcmdzX3QgKikgYXJnczsKLQlpZiAoZmluZF9wYXJlbnQoYS0+cC0+cF90eXBlX3ZhbF90 b19uYW1lW2stPnNvdXJjZV90eXBlIC0gMV0sICZwYXJlbnQpKQorCS8qIHNlYXJjaCBmb3Ig cGFyZW50IGZpcnN0ICovCisJcyA9IGEtPnAtPnR5cGVfdmFsX3RvX3N0cnVjdFtrLT5zb3Vy Y2VfdHlwZSAtIDFdOworCWlmIChmaW5kX3BhcmVudF90eXBlKGEsIHMsICZ0MSkgPCAwKQog CQlyZXR1cm4gLTE7Ci0KLQkvKiBzZWFyY2ggZm9yIHBhcmVudCBmaXJzdCAqLwotCWlmIChw YXJlbnQpIHsKLQkJdCA9IGhhc2h0YWJfc2VhcmNoKGEtPnAtPnBfdHlwZXMudGFibGUsIHBh cmVudCk7Ci0JCWlmICghdCkgewotCQkJLyogVGhpcyBlcnJvciB3YXMgYWxyZWFkeSBjb3Zl cmVkIGJ5IHR5cGVfY2hlY2tfaGllcmFyY2h5ICovCi0JCQlmcmVlKHBhcmVudCk7Ci0JCQly ZXR1cm4gMDsKLQkJfQotCQlmcmVlKHBhcmVudCk7Ci0KLQkJa2V5LnNvdXJjZV90eXBlID0g dC0+cy52YWx1ZTsKKwlpZiAodDEpIHsKKwkJLyoKKwkJICogc2VhcmNoIGZvciBhY2Nlc3Mg YWxsb3dlZCBiZXR3ZWVuIHR5cGUgMSdzCisJCSAqIHBhcmVudCBhbmQgdHlwZSAyLgorCQkg Ki8KKwkJa2V5LnNvdXJjZV90eXBlID0gdDEtPnMudmFsdWU7CiAJCWtleS50YXJnZXRfdHlw ZSA9IGstPnRhcmdldF90eXBlOwogCQlrZXkudGFyZ2V0X2NsYXNzID0gay0+dGFyZ2V0X2Ns YXNzOwogCQlrZXkuc3BlY2lmaWVkID0gQVZUQUJfQUxMT1dFRDsKKwkJY29tcHV0ZV9hdnRh Yl9kYXR1bShhLCAma2V5LCAmYXYpOwogCi0JCWF2ZGF0dW1wID0gYXZ0YWJfc2VhcmNoKGEt PmV4cGEsICZrZXkpOwotCQlpZiAoYXZkYXR1bXApIHsKLQkJCS8qIHNlYXJjaCBmb3IgYWNj ZXNzIGFsbG93ZWQgYmV0d2VlbiB0eXBlIDEncyBwYXJlbnQgYW5kIHR5cGUgMiAqLwotCQkJ aWYgKChhdmRhdHVtcC0+ZGF0YSAmIGQtPmRhdGEpID09IGQtPmRhdGEpIHsKLQkJCQlyZXR1 cm4gMDsKLQkJCX0KLQkJCWF2ID0gYXZkYXR1bXAtPmRhdGE7Ci0JCX0KLQkJaWYgKGEtPm9w dF9jb25kX2xpc3QpIHsKLQkJCS8qIGlmIGEgY29uZGl0aW9uYWwgbGlzdCBpcyBwcmVzZW50 IHNlYXJjaCBpdCBiZWZvcmUgY29udGludWluZyAqLwotCQkJYXZkYXR1bXAgPSBjb25kX2F2 X2xpc3Rfc2VhcmNoKCZrZXksIGEtPm9wdF9jb25kX2xpc3QpOwotCQkJaWYgKGF2ZGF0dW1w KSB7Ci0JCQkJaWYgKCgoYXYgfCBhdmRhdHVtcC0+ZGF0YSkgJiBkLT5kYXRhKSA9PQotCQkJ CSAgICBkLT5kYXRhKSB7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCX0KLQkJfQorCQlp ZiAoKGF2LmRhdGEgJiBkLT5kYXRhKSA9PSBkLT5kYXRhKQorCQkJcmV0dXJuIDA7CiAJfQog CiAJLyogbmV4dCB3ZSB0cnkgdHlwZSAxIGFuZCB0eXBlIDIncyBwYXJlbnQgKi8KLQlpZiAo ZmluZF9wYXJlbnQoYS0+cC0+cF90eXBlX3ZhbF90b19uYW1lW2stPnRhcmdldF90eXBlIC0g MV0sICZwYXJlbnQpKQorCXMgPSBhLT5wLT50eXBlX3ZhbF90b19zdHJ1Y3Rbay0+dGFyZ2V0 X3R5cGUgLSAxXTsKKwlpZiAoZmluZF9wYXJlbnRfdHlwZShhLCBzLCAmdDIpIDwgMCkKIAkJ cmV0dXJuIC0xOwotCi0JaWYgKHBhcmVudCkgewotCQl0MiA9IGhhc2h0YWJfc2VhcmNoKGEt PnAtPnBfdHlwZXMudGFibGUsIHBhcmVudCk7Ci0JCWlmICghdDIpIHsKLQkJCS8qIFRoaXMg ZXJyb3Igd2FzIGFscmVhZHkgY292ZXJlZCBieSB0eXBlX2NoZWNrX2hpZXJhcmNoeSAqLwot CQkJZnJlZShwYXJlbnQpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJZnJlZShwYXJlbnQpOwot CisJaWYgKHQyKSB7CisJCS8qCisJCSAqIHNlYXJjaCBmb3IgYWNjZXNzIGFsbG93ZWQgYmV0 d2VlbiB0eXBlIDEgYW5kCisJCSAqIHR5cGUgMidzIHBhcmVudC4KKwkJICovCiAJCWtleS5z b3VyY2VfdHlwZSA9IGstPnNvdXJjZV90eXBlOwogCQlrZXkudGFyZ2V0X3R5cGUgPSB0Mi0+ cy52YWx1ZTsKIAkJa2V5LnRhcmdldF9jbGFzcyA9IGstPnRhcmdldF9jbGFzczsKIAkJa2V5 LnNwZWNpZmllZCA9IEFWVEFCX0FMTE9XRUQ7CisJCWNvbXB1dGVfYXZ0YWJfZGF0dW0oYSwg JmtleSwgJmF2KTsKIAotCQlhdmRhdHVtcCA9IGF2dGFiX3NlYXJjaChhLT5leHBhLCAma2V5 KTsKLQkJaWYgKGF2ZGF0dW1wKSB7Ci0JCQlpZiAoKGF2ZGF0dW1wLT5kYXRhICYgZC0+ZGF0 YSkgPT0gZC0+ZGF0YSkgewotCQkJCXJldHVybiAwOwotCQkJfQotCQkJYXYgPSBhdmRhdHVt cC0+ZGF0YTsKLQkJfQotCQlpZiAoYS0+b3B0X2NvbmRfbGlzdCkgewotCQkJLyogaWYgYSBj b25kaXRpb25hbCBsaXN0IGlzIHByZXNlbnQgc2VhcmNoIGl0IGJlZm9yZSBjb250aW51aW5n ICovCi0JCQlhdmRhdHVtcCA9IGNvbmRfYXZfbGlzdF9zZWFyY2goJmtleSwgYS0+b3B0X2Nv bmRfbGlzdCk7Ci0JCQlpZiAoYXZkYXR1bXApIHsKLQkJCQlpZiAoKChhdiB8IGF2ZGF0dW1w LT5kYXRhKSAmIGQtPmRhdGEpID09Ci0JCQkJICAgIGQtPmRhdGEpIHsKLQkJCQkJcmV0dXJu IDA7Ci0JCQkJfQotCQkJfQotCQl9CisJCWlmICgoYXYuZGF0YSAmIGQtPmRhdGEpID09IGQt PmRhdGEpCisJCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAodCAmJiB0MikgewotCQlrZXkuc291 cmNlX3R5cGUgPSB0LT5zLnZhbHVlOworCWlmICh0MSAmJiB0MikgeworCQkvKgorICAgICAg ICAgICAgICAgICAqIHNlYXJjaCBmb3IgYWNjZXNzIGFsbG93ZWQgYmV0d2VlbiB0eXBlIDEn cyBwYXJlbnQKKyAgICAgICAgICAgICAgICAgKiBhbmQgdHlwZSAyJ3MgcGFyZW50LgorICAg ICAgICAgICAgICAgICAqLworCQlrZXkuc291cmNlX3R5cGUgPSB0MS0+cy52YWx1ZTsKIAkJ a2V5LnRhcmdldF90eXBlID0gdDItPnMudmFsdWU7CiAJCWtleS50YXJnZXRfY2xhc3MgPSBr LT50YXJnZXRfY2xhc3M7CiAJCWtleS5zcGVjaWZpZWQgPSBBVlRBQl9BTExPV0VEOworCQlj b21wdXRlX2F2dGFiX2RhdHVtKGEsICZrZXksICZhdik7CiAKLQkJYXZkYXR1bXAgPSBhdnRh Yl9zZWFyY2goYS0+ZXhwYSwgJmtleSk7Ci0JCWlmIChhdmRhdHVtcCkgewotCQkJaWYgKChh dmRhdHVtcC0+ZGF0YSAmIGQtPmRhdGEpID09IGQtPmRhdGEpIHsKLQkJCQlyZXR1cm4gMDsK LQkJCX0KLQkJCWF2ID0gYXZkYXR1bXAtPmRhdGE7Ci0JCX0KLQkJaWYgKGEtPm9wdF9jb25k X2xpc3QpIHsKLQkJCS8qIGlmIGEgY29uZGl0aW9uYWwgbGlzdCBpcyBwcmVzZW50IHNlYXJj aCBpdCBiZWZvcmUgY29udGludWluZyAqLwotCQkJYXZkYXR1bXAgPSBjb25kX2F2X2xpc3Rf c2VhcmNoKCZrZXksIGEtPm9wdF9jb25kX2xpc3QpOwotCQkJaWYgKGF2ZGF0dW1wKSB7Ci0J CQkJaWYgKCgoYXYgfCBhdmRhdHVtcC0+ZGF0YSkgJiBkLT5kYXRhKSA9PQotCQkJCSAgICBk LT5kYXRhKSB7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCX0KLQkJfQorCQlpZiAoKGF2 LmRhdGEgJiBkLT5kYXRhKSA9PSBkLT5kYXRhKQorCQkJcmV0dXJuIDA7CiAJfQogCi0JaWYg KCF0ICYmICF0MikgewotCQkvKiBOZWl0aGVyIG9uZSBvZiB0aGVzZSB0eXBlcyBoYXZlIHBh cmVudHMgYW5kIAotCQkgKiB0aGVyZWZvcmUgdGhlIGhpZXJhcmNoaWNhbCBjb25zdHJhaW50 IGRvZXMgbm90IGFwcGx5ICovCisJLyoKKwkgKiBOZWl0aGVyIG9uZSBvZiB0aGVzZSB0eXBl cyBoYXZlIHBhcmVudHMgYW5kIAorCSAqIHRoZXJlZm9yZSB0aGUgaGllcmFyY2hpY2FsIGNv bnN0cmFpbnQgZG9lcyBub3QgYXBwbHkKKwkgKi8KKwlpZiAoIXQxICYmICF0MikKIAkJcmV0 dXJuIDA7Ci0JfQogCi0JLyogQXQgdGhpcyBwb2ludCB0aGVyZSBpcyBhIHZpb2xhdGlvbiBv ZiB0aGUgaGllcmFyY2hhbCBjb25zdHJhaW50LCBzZW5kIGVycm9yIGNvbmRpdGlvbiBiYWNr ICovCisJLyoKKwkgKiBBdCB0aGlzIHBvaW50IHRoZXJlIGlzIGEgdmlvbGF0aW9uIG9mIHRo ZSBoaWVyYXJjaGFsCisJICogY29uc3RyYWludCwgc2VuZCBlcnJvciBjb25kaXRpb24gYmFj aworCSAqLwogCUVSUihhLT5oYW5kbGUsCiAJICAgICJoaWVyYXJjaHkgdmlvbGF0aW9uIGJl dHdlZW4gdHlwZXMgJXMgYW5kICVzIDogJXMgeyAlcyB9IiwKIAkgICAgYS0+cC0+cF90eXBl X3ZhbF90b19uYW1lW2stPnNvdXJjZV90eXBlIC0gMV0sCiAJICAgIGEtPnAtPnBfdHlwZV92 YWxfdG9fbmFtZVtrLT50YXJnZXRfdHlwZSAtIDFdLAogCSAgICBhLT5wLT5wX2NsYXNzX3Zh bF90b19uYW1lW2stPnRhcmdldF9jbGFzcyAtIDFdLAotCSAgICBzZXBvbF9hdl90b19zdHJp bmcoYS0+cCwgay0+dGFyZ2V0X2NsYXNzLCBkLT5kYXRhICYgfmF2KSk7CisJICAgIHNlcG9s X2F2X3RvX3N0cmluZyhhLT5wLCBrLT50YXJnZXRfY2xhc3MsIGQtPmRhdGEgJiB+YXYuZGF0 YSkpOwogCWEtPm51bWVycisrOwogCXJldHVybiAwOwogfQogCisvKgorICogSWYgc2FtZSBw ZXJtaXNzaW9ucyBhcmUgYWxsb3dlZCBmb3Igc2FtZSBjb21iaW5hdGlvbiBvZgorICogc291 cmNlIGFuZCB0YXJnZXQsIHdlIGNhbiBldmFsdWF0ZSB0aGVtIGFzIHVuY29uZGl0aW9uYWwK KyAqIG9uZS4KKyAqIFNlZSB0aGUgZm9sbG93aW5nIGV4YW1wbGUuIEFfdCB0eXBlIGlzIGJv dW5kcyBvZiBCX3QgdHlwZSwKKyAqIHNvIEJfdCBjYW4gbmV2ZXIgaGF2ZSB3aWRlciBwZXJt aXNzaW9ucyB0aGVuIEFfdC4KKyAqIEFfdCBoYXMgY29uZGl0aW9uYWwgcGVybWlzc2lvbiBv biBYX3QsIGhvd2V2ZXIsIGEgcGFydCBvZgorICogdGhlbSAoZ2V0YXR0ciBhbmQgcmVhZCkg YXJlIHVuY29uZGl0aW9uYWx5IGFsbG93ZWQgdG8gQV90LgorICoKKyAqIEV4YW1wbGUpCisg KiB0eXBlYm91bmRzIEFfdCBCX3Q7CisgKgorICogYWxsb3cgQl90IFhfdCA6IGZpbGUgeyBn ZXRhdHRyIH07CisgKiBpZiAoZm9vX2Jvb2wpIHsKKyAqICAgICBhbGxvdyBBX3QgWF90IDog ZmlsZSB7IGdldGF0dHIgcmVhZCB9OworICogfSBlbHNlIHsKKyAqICAgICBhbGxvdyBBX3Qg WF90IDogZmlsZSB7IGdldGF0dHIgcmVhZCB3cml0ZSB9OworICogfQorICoKKyAqIFdlIGhh dmUgdG8gcHVsbCB1cCB0aGVtIGFzIHVuY29uZGl0aW9uYWwgb25lcyBpbiB0aGlzIGNhc2Us CisgKiBiZWNhdXNlIGl0IHNlZW1zIHRvIHVzIEJfdCBpcyB2aW9sYXRlZCB0byBib3VuZHMg Y29uc3RyYWludHMKKyAqIGR1cmluZyB1bmNvbmRpdGlvbmFsIHBvbGljeSBjaGVja2luZy4K KyAqLworc3RhdGljIGludCBwdWxsdXBfdW5jb25kaXRpb25hbF9wZXJtcyhjb25kX2xpc3Rf dCAqIGNvbmRfbGlzdCwKKwkJCQkgICAgICBoaWVyYXJjaHlfYXJnc190ICogYXJncykKK3sK Kwljb25kX2xpc3RfdCAqY3VyX25vZGU7CisJY29uZF9hdl9saXN0X3QgKmN1cl9hdiwgKmV4 cGxfdHJ1ZSA9IE5VTEwsICpleHBsX2ZhbHNlID0gTlVMTDsKKwlhdnRhYl90IGV4cGFfdHJ1 ZSwgZXhwYV9mYWxzZTsKKwlhdnRhYl9kYXR1bV90ICphdmRhdHA7CisJYXZ0YWJfZGF0dW1f dCBhdmRhdDsKKwlhdnRhYl9wdHJfdCBhdm5vZGU7CisKKwlmb3IgKGN1cl9ub2RlID0gY29u ZF9saXN0OyBjdXJfbm9kZTsgY3VyX25vZGUgPSBjdXJfbm9kZS0+bmV4dCkgeworCQlpZiAo YXZ0YWJfaW5pdCgmZXhwYV90cnVlKSkKKwkJCWdvdG8gb29tMDsKKwkJaWYgKGF2dGFiX2lu aXQoJmV4cGFfZmFsc2UpKQorCQkJZ290byBvb20xOworCQlpZiAoZXhwYW5kX2NvbmRfYXZf bGlzdChhcmdzLT5wLCBjdXJfbm9kZS0+dHJ1ZV9saXN0LAorCQkJCQkmZXhwbF90cnVlLCAm ZXhwYV90cnVlKSkKKwkJCWdvdG8gb29tMjsKKwkJaWYgKGV4cGFuZF9jb25kX2F2X2xpc3Qo YXJncy0+cCwgY3VyX25vZGUtPmZhbHNlX2xpc3QsCisJCQkJCSZleHBsX2ZhbHNlLCAmZXhw YV9mYWxzZSkpCisJCQlnb3RvIG9vbTM7CisJCWZvciAoY3VyX2F2ID0gZXhwbF90cnVlOyBj dXJfYXY7IGN1cl9hdiA9IGN1cl9hdi0+bmV4dCkgeworCQkJYXZkYXRwID0gYXZ0YWJfc2Vh cmNoKCZleHBhX2ZhbHNlLAorCQkJCQkgICAgICAmY3VyX2F2LT5ub2RlLT5rZXkpOworCQkJ aWYgKCFhdmRhdHApCisJCQkJY29udGludWU7CisKKwkJCWF2ZGF0LmRhdGEgPSAoY3VyX2F2 LT5ub2RlLT5kYXR1bS5kYXRhCisJCQkJICAgICAgJiBhdmRhdHAtPmRhdGEpOworCQkJaWYg KCFhdmRhdC5kYXRhKQorCQkJCWNvbnRpbnVlOworCisJCQlhdm5vZGUgPSBhdnRhYl9zZWFy Y2hfbm9kZShhcmdzLT5leHBhLAorCQkJCQkJICAgJmN1cl9hdi0+bm9kZS0+a2V5KTsKKwkJ CWlmIChhdm5vZGUpIHsKKwkJCQlhdm5vZGUtPmRhdHVtLmRhdGEgfD0gYXZkYXQuZGF0YTsK KwkJCX0gZWxzZSB7CisJCQkJaWYgKGF2dGFiX2luc2VydChhcmdzLT5leHBhLAorCQkJCQkJ ICZjdXJfYXYtPm5vZGUtPmtleSwKKwkJCQkJCSAmYXZkYXQpKQorCQkJCQlnb3RvIG9vbTQ7 CisJCQl9CisJCX0KKwkJY29uZF9hdl9saXN0X2Rlc3Ryb3koZXhwbF9mYWxzZSk7CisJCWNv bmRfYXZfbGlzdF9kZXN0cm95KGV4cGxfdHJ1ZSk7CisJCWF2dGFiX2Rlc3Ryb3koJmV4cGFf ZmFsc2UpOworCQlhdnRhYl9kZXN0cm95KCZleHBhX3RydWUpOworCX0KKwlyZXR1cm4gMDsK Kworb29tNDoKKwljb25kX2F2X2xpc3RfZGVzdHJveShleHBsX2ZhbHNlKTsKK29vbTM6CisJ Y29uZF9hdl9saXN0X2Rlc3Ryb3koZXhwbF90cnVlKTsKK29vbTI6CisJYXZ0YWJfZGVzdHJv eSgmZXhwYV9mYWxzZSk7Citvb20xOgorCWF2dGFiX2Rlc3Ryb3koJmV4cGFfdHJ1ZSk7Citv b20wOgorCUVSUihhcmdzLT5oYW5kbGUsICJvdXQgb2YgbWVtb3J5IG9uIGNvbmRpdGlvbmFs IGF2IGxpc3QgZXhwYW5zaW9uIik7CisgICAgICAgIHJldHVybiAxOworfQorCiBzdGF0aWMg aW50IGNoZWNrX2NvbmRfYXZ0YWJfaGllcmFyY2h5KGNvbmRfbGlzdF90ICogY29uZF9saXN0 LAogCQkJCSAgICAgIGhpZXJhcmNoeV9hcmdzX3QgKiBhcmdzKQogewpAQCAtMjY0LDM3ICsz MzUsNTEgQEAKIAljb25kX2F2X2xpc3RfdCAqY3VyX2F2LCAqZXhwbCA9IE5VTEw7CiAJYXZ0 YWJfdCBleHBhOwogCWhpZXJhcmNoeV9hcmdzX3QgKmEgPSAoaGllcmFyY2h5X2FyZ3NfdCAq KSBhcmdzOworCWF2dGFiX2RhdHVtX3QgYXZkYXQsICp1bmNvbmQ7CiAKLQlmb3IgKGN1cl9u b2RlID0gY29uZF9saXN0OyBjdXJfbm9kZSAhPSBOVUxMOyBjdXJfbm9kZSA9IGN1cl9ub2Rl LT5uZXh0KSB7CisJZm9yIChjdXJfbm9kZSA9IGNvbmRfbGlzdDsgY3VyX25vZGU7IGN1cl9u b2RlID0gY3VyX25vZGUtPm5leHQpIHsKKwkJLyoKKwkJICogQ2hlY2sgdHJ1ZSBjb25kaXRp b24KKwkJICovCiAJCWlmIChhdnRhYl9pbml0KCZleHBhKSkKIAkJCWdvdG8gb29tOwotCQlp ZiAoZXhwYW5kX2NvbmRfYXZfbGlzdAotCQkgICAgKGFyZ3MtPnAsIGN1cl9ub2RlLT50cnVl X2xpc3QsICZleHBsLCAmZXhwYSkpIHsKKwkJaWYgKGV4cGFuZF9jb25kX2F2X2xpc3QoYXJn cy0+cCwgY3VyX25vZGUtPnRydWVfbGlzdCwKKwkJCQkJJmV4cGwsICZleHBhKSkgewogCQkJ YXZ0YWJfZGVzdHJveSgmZXhwYSk7CiAJCQlnb3RvIG9vbTsKIAkJfQogCQlhcmdzLT5vcHRf Y29uZF9saXN0ID0gZXhwbDsKLQkJZm9yIChjdXJfYXYgPSBleHBsOyBjdXJfYXYgIT0gTlVM TDsgY3VyX2F2ID0gY3VyX2F2LT5uZXh0KSB7CisJCWZvciAoY3VyX2F2ID0gZXhwbDsgY3Vy X2F2OyBjdXJfYXYgPSBjdXJfYXYtPm5leHQpIHsKKwkJCWF2ZGF0LmRhdGEgPSBjdXJfYXYt Pm5vZGUtPmRhdHVtLmRhdGE7CisJCQl1bmNvbmQgPSBhdnRhYl9zZWFyY2goYS0+ZXhwYSwg JmN1cl9hdi0+bm9kZS0+a2V5KTsKKwkJCWlmICh1bmNvbmQpCisJCQkJYXZkYXQuZGF0YSB8 PSB1bmNvbmQtPmRhdGE7CiAJCQlyYyA9IGNoZWNrX2F2dGFiX2hpZXJhcmNoeV9jYWxsYmFj aygmY3VyX2F2LT5ub2RlLT5rZXksCi0JCQkJCQkJICAgICZjdXJfYXYtPm5vZGUtPgotCQkJ CQkJCSAgICBkYXR1bSwgYXJncyk7CisJCQkJCQkJICAgICZhdmRhdCwgYXJncyk7CiAJCQlp ZiAocmMpCi0JCQkJYS0+bnVtZXJyKys7CisJCQkJYXJncy0+bnVtZXJyKys7CiAJCX0KIAkJ Y29uZF9hdl9saXN0X2Rlc3Ryb3koZXhwbCk7Ci0JCWF2dGFiX2Rlc3Ryb3koJmV4cGEpOwor CisJCS8qCisJCSAqIENoZWNrIGZhbHNlIGNvbmRpdGlvbgorCQkgKi8KIAkJaWYgKGF2dGFi X2luaXQoJmV4cGEpKQogCQkJZ290byBvb207Ci0JCWlmIChleHBhbmRfY29uZF9hdl9saXN0 Ci0JCSAgICAoYXJncy0+cCwgY3VyX25vZGUtPmZhbHNlX2xpc3QsICZleHBsLCAmZXhwYSkp IHsKKwkJaWYgKGV4cGFuZF9jb25kX2F2X2xpc3QoYXJncy0+cCwgY3VyX25vZGUtPmZhbHNl X2xpc3QsCisJCQkJCSZleHBsLCAmZXhwYSkpIHsKIAkJCWF2dGFiX2Rlc3Ryb3koJmV4cGEp OwogCQkJZ290byBvb207CiAJCX0KIAkJYXJncy0+b3B0X2NvbmRfbGlzdCA9IGV4cGw7Ci0J CWZvciAoY3VyX2F2ID0gZXhwbDsgY3VyX2F2ICE9IE5VTEw7IGN1cl9hdiA9IGN1cl9hdi0+ bmV4dCkgeworCQlmb3IgKGN1cl9hdiA9IGV4cGw7IGN1cl9hdjsgY3VyX2F2ID0gY3VyX2F2 LT5uZXh0KSB7CisJCQlhdmRhdC5kYXRhID0gY3VyX2F2LT5ub2RlLT5kYXR1bS5kYXRhOwor CQkJdW5jb25kID0gYXZ0YWJfc2VhcmNoKGEtPmV4cGEsICZjdXJfYXYtPm5vZGUtPmtleSk7 CisJCQlpZiAodW5jb25kKQorCQkJCWF2ZGF0LmRhdGEgfD0gdW5jb25kLT5kYXRhOworCiAJ CQlyYyA9IGNoZWNrX2F2dGFiX2hpZXJhcmNoeV9jYWxsYmFjaygmY3VyX2F2LT5ub2RlLT5r ZXksCi0JCQkJCQkJICAgICZjdXJfYXYtPm5vZGUtPgotCQkJCQkJCSAgICBkYXR1bSwgYXJn cyk7CisJCQkJCQkJICAgICZhdmRhdCwgYXJncyk7CiAJCQlpZiAocmMpCiAJCQkJYS0+bnVt ZXJyKys7CiAJCX0KQEAgLTMxNyw0MCArNDAyLDIxIEBACiAJCQkJCSBfX2F0dHJpYnV0ZV9f ICgodW51c2VkKSksCiAJCQkJCSBoYXNodGFiX2RhdHVtX3QgZCwgdm9pZCAqYXJncykKIHsK LQljaGFyICpwYXJlbnQ7CiAJaGllcmFyY2h5X2FyZ3NfdCAqYTsKIAlyb2xlX2RhdHVtX3Qg KnIsICpycDsKIAogCWEgPSAoaGllcmFyY2h5X2FyZ3NfdCAqKSBhcmdzOwogCXIgPSAocm9s ZV9kYXR1bV90ICopIGQ7CiAKLQlpZiAoZmluZF9wYXJlbnQoYS0+cC0+cF9yb2xlX3ZhbF90 b19uYW1lW3ItPnMudmFsdWUgLSAxXSwgJnBhcmVudCkpCisJaWYgKGZpbmRfcGFyZW50X3Jv bGUoYSwgciwgJnJwKSA8IDApCiAJCXJldHVybiAtMTsKIAotCWlmICghcGFyZW50KSB7Ci0J CS8qIFRoaXMgcm9sZSBoYXMgbm8gcGFyZW50ICovCi0JCXJldHVybiAwOwotCX0KLQotCXJw ID0gaGFzaHRhYl9zZWFyY2goYS0+cC0+cF9yb2xlcy50YWJsZSwgcGFyZW50KTsKLQlpZiAo IXJwKSB7Ci0JCS8qIE9ycGhhbiByb2xlICovCi0JCUVSUihhLT5oYW5kbGUsICJyb2xlICVz IGRvZXNuJ3QgZXhpc3QsICVzIGlzIGFuIG9ycGhhbiIsCi0JCSAgICBwYXJlbnQsIGEtPnAt PnBfcm9sZV92YWxfdG9fbmFtZVtyLT5zLnZhbHVlIC0gMV0pOwotCQlmcmVlKHBhcmVudCk7 Ci0JCWEtPm51bWVycisrOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoIWViaXRtYXBfY29u dGFpbnMoJnJwLT50eXBlcy50eXBlcywgJnItPnR5cGVzLnR5cGVzKSkgewotCQkvKiBUaGlz IGlzIGEgdmlvbGF0aW9uIG9mIHRoZSBoaWVhcmNoYWwgY29uc3RyYWludCwgcmV0dXJuIGVy cm9yIGNvbmRpdGlvbiAqLworCWlmIChycCAmJiAhZWJpdG1hcF9jb250YWlucygmcnAtPnR5 cGVzLnR5cGVzLCAmci0+dHlwZXMudHlwZXMpKSB7CisJCS8qIGhpZXJhcmNoaWNhbCBjb25z dHJhaW50IHZpb2xhdGlvbiwgcmV0dXJuIGVycm9yICovCiAJCUVSUihhLT5oYW5kbGUsICJS b2xlIGhpZXJhcmNoeSB2aW9sYXRpb24sICVzIGV4Y2VlZHMgJXMiLAotCQkgICAgYS0+cC0+ cF9yb2xlX3ZhbF90b19uYW1lW3ItPnMudmFsdWUgLSAxXSwgcGFyZW50KTsKKwkJICAgIChj aGFyICopIGssIGEtPnAtPnBfcm9sZV92YWxfdG9fbmFtZVtycC0+cy52YWx1ZSAtIDFdKTsK IAkJYS0+bnVtZXJyKys7CiAJfQotCi0JZnJlZShwYXJlbnQpOwotCiAJcmV0dXJuIDA7CiB9 CiAKQEAgLTM2Miw0MCArNDI4LDIxIEBACiAJCQkJCSBfX2F0dHJpYnV0ZV9fICgodW51c2Vk KSksCiAJCQkJCSBoYXNodGFiX2RhdHVtX3QgZCwgdm9pZCAqYXJncykKIHsKLQljaGFyICpw YXJlbnQ7CiAJaGllcmFyY2h5X2FyZ3NfdCAqYTsKIAl1c2VyX2RhdHVtX3QgKnUsICp1cDsK IAogCWEgPSAoaGllcmFyY2h5X2FyZ3NfdCAqKSBhcmdzOwogCXUgPSAodXNlcl9kYXR1bV90 ICopIGQ7CiAKLQlpZiAoZmluZF9wYXJlbnQoYS0+cC0+cF91c2VyX3ZhbF90b19uYW1lW3Ut PnMudmFsdWUgLSAxXSwgJnBhcmVudCkpCisJaWYgKGZpbmRfcGFyZW50X3VzZXIoYSwgdSwg JnVwKSA8IDApCiAJCXJldHVybiAtMTsKIAotCWlmICghcGFyZW50KSB7Ci0JCS8qIFRoaXMg dXNlciBoYXMgbm8gcGFyZW50ICovCi0JCXJldHVybiAwOwotCX0KLQotCXVwID0gaGFzaHRh Yl9zZWFyY2goYS0+cC0+cF91c2Vycy50YWJsZSwgcGFyZW50KTsKLQlpZiAoIXVwKSB7Ci0J CS8qIE9ycGhhbiB1c2VyICovCi0JCUVSUihhLT5oYW5kbGUsICJ1c2VyICVzIGRvZXNuJ3Qg ZXhpc3QsICVzIGlzIGFuIG9ycGhhbiIsCi0JCSAgICBwYXJlbnQsIGEtPnAtPnBfdXNlcl92 YWxfdG9fbmFtZVt1LT5zLnZhbHVlIC0gMV0pOwotCQlmcmVlKHBhcmVudCk7Ci0JCWEtPm51 bWVycisrOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpZiAoIWViaXRtYXBfY29udGFpbnMoJnVw LT5yb2xlcy5yb2xlcywgJnUtPnJvbGVzLnJvbGVzKSkgeworCWlmICh1cCAmJiAhZWJpdG1h cF9jb250YWlucygmdXAtPnJvbGVzLnJvbGVzLCAmdS0+cm9sZXMucm9sZXMpKSB7CiAJCS8q IGhpZXJhcmNoaWNhbCBjb25zdHJhaW50IHZpb2xhdGlvbiwgcmV0dXJuIGVycm9yICovCiAJ CUVSUihhLT5oYW5kbGUsICJVc2VyIGhpZXJhcmNoeSB2aW9sYXRpb24sICVzIGV4Y2VlZHMg JXMiLAotCQkgICAgYS0+cC0+cF91c2VyX3ZhbF90b19uYW1lW3UtPnMudmFsdWUgLSAxXSwg cGFyZW50KTsKKwkJICAgIChjaGFyICopIGssIGEtPnAtPnBfdXNlcl92YWxfdG9fbmFtZVt1 cC0+cy52YWx1ZSAtIDFdKTsKIAkJYS0+bnVtZXJyKys7CiAJfQotCi0JZnJlZShwYXJlbnQp OwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQyMCw2ICs0NjcsOSBAQAogCWlmIChoYXNodGFi X21hcChwLT5wX3R5cGVzLnRhYmxlLCBjaGVja190eXBlX2hpZXJhcmNoeV9jYWxsYmFjaywg JmFyZ3MpKQogCQlnb3RvIGJhZDsKIAorCWlmIChwdWxsdXBfdW5jb25kaXRpb25hbF9wZXJt cyhwLT5jb25kX2xpc3QsICZhcmdzKSkKKwkJcmV0dXJuIC0xOworCiAJaWYgKGF2dGFiX21h cCgmZXhwYSwgY2hlY2tfYXZ0YWJfaGllcmFyY2h5X2NhbGxiYWNrLCAmYXJncykpCiAJCWdv dG8gYmFkOwogCkluZGV4OiBsaWJzZXBvbC9zcmMvZXhwYW5kLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gbGlic2Vwb2wvc3JjL2V4cGFuZC5jCShyZXZpc2lvbiAyOTUwKQorKysgbGlic2Vwb2wv c3JjL2V4cGFuZC5jCSh3b3JraW5nIGNvcHkpCkBAIC00NjYsNiArNDY2LDEwMCBAQAogCXJl dHVybiAwOwogfQogCisvKgorICogVGhlIGJvdW5kYXJpZXMgaGF2ZSB0byBiZSBjb3BpZWQg YWZ0ZXIgdGhlIHR5cGVzL3JvbGVzL3VzZXJzIGFyZSBjb3BpZWQsCisgKiBiZWNhdXNlIGl0 IHJlZmVycyBoYXNodGFiIHRvIGxvb2t1cCBkZXN0aW5hdGVkIG9iamVjdHMuCisgKi8KK3N0 YXRpYyBpbnQgdHlwZV9ib3VuZHNfY29weV9jYWxsYmFjayhoYXNodGFiX2tleV90IGtleSwK KwkJCQkgICAgIGhhc2h0YWJfZGF0dW1fdCBkYXR1bSwgdm9pZCAqZGF0YSkKK3sKKwlleHBh bmRfc3RhdGVfdCAqc3RhdGUgPSAoZXhwYW5kX3N0YXRlX3QgKikgZGF0YTsKKwl0eXBlX2Rh dHVtX3QgKnR5cGUgPSAodHlwZV9kYXR1bV90ICopIGRhdHVtOworCXR5cGVfZGF0dW1fdCAq ZGVzdDsKKwl1aW50MzJfdCBib3VuZHNfdmFsOworCisJaWYgKCF0eXBlLT5ib3VuZHMpCisJ CXJldHVybiAwOworCisJaWYgKCFpc19pZF9lbmFibGVkKChjaGFyICopa2V5LCBzdGF0ZS0+ YmFzZSwgU1lNX1RZUEVTKSkKKwkJcmV0dXJuIDA7CisKKwlib3VuZHNfdmFsID0gc3RhdGUt PnR5cGVtYXBbdHlwZS0+Ym91bmRzIC0gMV07CisKKwlkZXN0ID0gaGFzaHRhYl9zZWFyY2go c3RhdGUtPm91dC0+cF90eXBlcy50YWJsZSwgKGNoYXIgKilrZXkpOworCWlmICghZGVzdCkg eworCQlFUlIoc3RhdGUtPmhhbmRsZSwgIlR5cGUgbG9va3VwIGZhaWxlZCBmb3IgJXMiLCAo Y2hhciAqKWtleSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGRlc3QtPmJvdW5kcyAhPSAw ICYmIGRlc3QtPmJvdW5kcyAhPSBib3VuZHNfdmFsKSB7CisJCUVSUihzdGF0ZS0+aGFuZGxl LCAiSW5jb25zaXN0ZW50IGJvdW5kYXJ5IGZvciAlcyIsIChjaGFyICopa2V5KTsKKwkJcmV0 dXJuIC0xOworCX0KKwlkZXN0LT5ib3VuZHMgPSBib3VuZHNfdmFsOworCisJcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgcm9sZV9ib3VuZHNfY29weV9jYWxsYmFjayhoYXNodGFiX2tl eV90IGtleSwKKwkJCQkgICAgIGhhc2h0YWJfZGF0dW1fdCBkYXR1bSwgdm9pZCAqZGF0YSkK K3sKKwlleHBhbmRfc3RhdGVfdCAqc3RhdGUgPSAoZXhwYW5kX3N0YXRlX3QgKikgZGF0YTsK Kwlyb2xlX2RhdHVtX3QgKnJvbGUgPSAocm9sZV9kYXR1bV90ICopIGRhdHVtOworCXJvbGVf ZGF0dW1fdCAqZGVzdDsKKwl1aW50MzJfdCBib3VuZHNfdmFsOworCisJaWYgKCFyb2xlLT5i b3VuZHMpCisJCXJldHVybiAwOworCisJaWYgKCFpc19pZF9lbmFibGVkKChjaGFyICopa2V5 LCBzdGF0ZS0+YmFzZSwgU1lNX1JPTEVTKSkKKwkJcmV0dXJuIDA7CisKKwlib3VuZHNfdmFs ID0gc3RhdGUtPnJvbGVtYXBbcm9sZS0+Ym91bmRzIC0gMV07CisKKwlkZXN0ID0gaGFzaHRh Yl9zZWFyY2goc3RhdGUtPm91dC0+cF9yb2xlcy50YWJsZSwgKGNoYXIgKilrZXkpOworCWlm ICghZGVzdCkgeworCQlFUlIoc3RhdGUtPmhhbmRsZSwgIlJvbGUgbG9va3VwIGZhaWxlZCBm b3IgJXMiLCAoY2hhciAqKWtleSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYgKGRlc3QtPmJv dW5kcyAhPSAwICYmIGRlc3QtPmJvdW5kcyAhPSBib3VuZHNfdmFsKSB7CisJCUVSUihzdGF0 ZS0+aGFuZGxlLCAiSW5jb25zaXN0ZW50IGJvdW5kYXJ5IGZvciAlcyIsIChjaGFyICopa2V5 KTsKKwkJcmV0dXJuIC0xOworCX0KKwlkZXN0LT5ib3VuZHMgPSBib3VuZHNfdmFsOworCisJ cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdXNlcl9ib3VuZHNfY29weV9jYWxsYmFjayho YXNodGFiX2tleV90IGtleSwKKwkJCQkgICAgIGhhc2h0YWJfZGF0dW1fdCBkYXR1bSwgdm9p ZCAqZGF0YSkKK3sKKwlleHBhbmRfc3RhdGVfdCAqc3RhdGUgPSAoZXhwYW5kX3N0YXRlX3Qg KikgZGF0YTsKKwl1c2VyX2RhdHVtX3QgKnVzZXIgPSAodXNlcl9kYXR1bV90ICopIGRhdHVt OworCXVzZXJfZGF0dW1fdCAqZGVzdDsKKwl1aW50MzJfdCBib3VuZHNfdmFsOworCisJaWYg KCF1c2VyLT5ib3VuZHMpCisJCXJldHVybiAwOworCisJaWYgKCFpc19pZF9lbmFibGVkKChj aGFyICopa2V5LCBzdGF0ZS0+YmFzZSwgU1lNX1VTRVJTKSkKKwkJcmV0dXJuIDA7CisKKwli b3VuZHNfdmFsID0gc3RhdGUtPnVzZXJtYXBbdXNlci0+Ym91bmRzIC0gMV07CisKKwlkZXN0 ID0gaGFzaHRhYl9zZWFyY2goc3RhdGUtPm91dC0+cF91c2Vycy50YWJsZSwgKGNoYXIgKilr ZXkpOworCWlmICghZGVzdCkgeworCQlFUlIoc3RhdGUtPmhhbmRsZSwgIlVzZXIgbG9va3Vw IGZhaWxlZCBmb3IgJXMiLCAoY2hhciAqKWtleSk7CisJCXJldHVybiAtMTsKKwl9CisJaWYg KGRlc3QtPmJvdW5kcyAhPSAwICYmIGRlc3QtPmJvdW5kcyAhPSBib3VuZHNfdmFsKSB7CisJ CUVSUihzdGF0ZS0+aGFuZGxlLCAiSW5jb25zaXN0ZW50IGJvdW5kYXJ5IGZvciAlcyIsIChj aGFyICopa2V5KTsKKwkJcmV0dXJuIC0xOworCX0KKwlkZXN0LT5ib3VuZHMgPSBib3VuZHNf dmFsOworCisJcmV0dXJuIDA7Cit9CisKIC8qIFRoZSBhbGlhc2VzIGhhdmUgdG8gYmUgY29w aWVkIGFmdGVyIHRoZSB0eXBlcyBhbmQgYXR0cmlidXRlcyB0byBiZSBjZXJ0YWluIHRoYXQK ICAqIHRoZSBvdXQgc3ltYm9sIHRhYmxlIHdpbGwgaGF2ZSB0aGUgdHlwZSB0aGF0IHRoZSBh bGlhcyByZWZlcnMuIE90aGVyd2lzZSwgd2UKICAqIHdvbid0IGJlIGFibGUgdG8gZmluZCB0 aGUgdHlwZSB2YWx1ZSBmb3IgdGhlIGFsaWFzLiBXZSBjYW4ndCBkZXBlbmQgb24gdGhlCkBA IC0xODY1LDMxICsxOTU5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdHlw ZV9kZXN0cm95KGhhc2h0YWJfa2V5X3Qga2V5LCBoYXNodGFiX2RhdHVtX3QgZGF0dW0sIHZv aWQgKnAKLQkJCSBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCi17Ci0JZnJlZShrZXkpOwot CXR5cGVfZGF0dW1fZGVzdHJveSgodHlwZV9kYXR1bV90ICopIGRhdHVtKTsKLQlmcmVlKGRh dHVtKTsKLX0KLQotc3RhdGljIGludCB0eXBlX2F0dHJfcmVtb3ZlKGhhc2h0YWJfa2V5X3Qg a2V5Ci0JCQkgICAgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBoYXNodGFiX2RhdHVtX3Qg ZGF0dW0sCi0JCQkgICAgdm9pZCAqYXJncykKLXsKLQl0eXBlX2RhdHVtX3QgKnR5cGRhdHVt OwotCXBvbGljeWRiX3QgKnA7Ci0KLQl0eXBkYXR1bSA9ICh0eXBlX2RhdHVtX3QgKikgZGF0 dW07Ci0JcCA9IChwb2xpY3lkYl90ICopIGFyZ3M7Ci0JaWYgKHR5cGRhdHVtLT5mbGF2b3Ig PT0gVFlQRV9BVFRSSUIpIHsKLQkJcC0+dHlwZV92YWxfdG9fc3RydWN0W3R5cGRhdHVtLT5z LnZhbHVlIC0gMV0gPSBOVUxMOwotCQlwLT5wX3R5cGVfdmFsX3RvX25hbWVbdHlwZGF0dW0t PnMudmFsdWUgLSAxXSA9IE5VTEw7Ci0JCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0K LQogLyogY29udmVydHMgdHlwZXNldCB1c2luZyB0eXBlbWFwIGFuZCBleHBhbmRzIGludG8g ZWJpdG1hcF90IHR5cGVzIHVzaW5nIHRoZSBhdHRyaWJ1dGVzIGluIHRoZSBwYXNzZWQgaW4g cG9saWN5LgogICogdGhpcyBzaG91bGQgbm90IGJlIGNhbGxlZCB1bnRpbCBhZnRlciBhbGwg dGhlIGJsb2NrcyBoYXZlIGJlZW4gcHJvY2Vzc2VkIGFuZCB0aGUgYXR0cmlidXRlcyBpbiB0 YXJnZXQgcG9saWN5CiAgKiBhcmUgY29tcGxldGUuICovCkBAIC0yMzkzLDYgKzI0NjIsMTEg QEAKIAkJZ290byBjbGVhbnVwOwogCX0KIAorCS8qIGNvcHkgdHlwZSBib3VuZHMgKi8KKwlp ZiAoaGFzaHRhYl9tYXAoc3RhdGUuYmFzZS0+cF90eXBlcy50YWJsZSwKKwkJCXR5cGVfYm91 bmRzX2NvcHlfY2FsbGJhY2ssICZzdGF0ZSkpCisJCWdvdG8gY2xlYW51cDsKKwogCS8qIGNv cHkgYWxpYXNlcyAqLwogCWlmIChoYXNodGFiX21hcChzdGF0ZS5iYXNlLT5wX3R5cGVzLnRh YmxlLCBhbGlhc19jb3B5X2NhbGxiYWNrLCAmc3RhdGUpKQogCQlnb3RvIGNsZWFudXA7CkBA IC0yNDA2LDYgKzI0ODAsOSBAQAogCS8qIGNvcHkgcm9sZXMgKi8KIAlpZiAoaGFzaHRhYl9t YXAoc3RhdGUuYmFzZS0+cF9yb2xlcy50YWJsZSwgcm9sZV9jb3B5X2NhbGxiYWNrLCAmc3Rh dGUpKQogCQlnb3RvIGNsZWFudXA7CisJaWYgKGhhc2h0YWJfbWFwKHN0YXRlLmJhc2UtPnBf cm9sZXMudGFibGUsCisJCQlyb2xlX2JvdW5kc19jb3B5X2NhbGxiYWNrLCAmc3RhdGUpKQor CQlnb3RvIGNsZWFudXA7CiAKIAkvKiBjb3B5IE1MUydzIHNlbnNpdGl2aXR5IGxldmVsIGFu ZCBjYXRlZ29yaWVzIC0gdGhpcyBuZWVkcyB0byBiZSBkb25lCiAJICogYmVmb3JlIGV4cGFu ZGluZyB1c2VycyAodGhleSBuZWVkIHRvIGJlIGluZGV4ZWQgdG9vKSAqLwpAQCAtMjQyMSw2 ICsyNDk4LDkgQEAKIAkvKiBjb3B5IHVzZXJzICovCiAJaWYgKGhhc2h0YWJfbWFwKHN0YXRl LmJhc2UtPnBfdXNlcnMudGFibGUsIHVzZXJfY29weV9jYWxsYmFjaywgJnN0YXRlKSkKIAkJ Z290byBjbGVhbnVwOworCWlmIChoYXNodGFiX21hcChzdGF0ZS5iYXNlLT5wX3VzZXJzLnRh YmxlLAorCQkJdXNlcl9ib3VuZHNfY29weV9jYWxsYmFjaywgJnN0YXRlKSkKKwkJZ290byBj bGVhbnVwOwogCiAJLyogY29weSBib29scyAqLwogCWlmIChoYXNodGFiX21hcChzdGF0ZS5i YXNlLT5wX2Jvb2xzLnRhYmxlLCBib29sX2NvcHlfY2FsbGJhY2ssICZzdGF0ZSkpCkBAIC0y NTEwLDggKzI1OTAsNiBAQAogCX0KIAlpZiAoaGFzaHRhYl9tYXAoc3RhdGUub3V0LT5wX3R5 cGVzLnRhYmxlLCB0eXBlX2F0dHJfbWFwLCAmc3RhdGUpKQogCQlnb3RvIGNsZWFudXA7Ci0J aGFzaHRhYl9tYXBfcmVtb3ZlX29uX2Vycm9yKHN0YXRlLm91dC0+cF90eXBlcy50YWJsZSwK LQkJCQkgICAgdHlwZV9hdHRyX3JlbW92ZSwgdHlwZV9kZXN0cm95LCBzdGF0ZS5vdXQpOwog CWlmIChjaGVjaykgewogCQlpZiAoaGllcmFyY2h5X2NoZWNrX2NvbnN0cmFpbnRzKGhhbmRs ZSwgc3RhdGUub3V0KSkKIAkJCWdvdG8gY2xlYW51cDsKSW5kZXg6IGxpYnNlcG9sL3NyYy93 cml0ZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpYnNlcG9sL3NyYy93cml0ZS5jCShyZXZpc2lv biAyOTUwKQorKysgbGlic2Vwb2wvc3JjL3dyaXRlLmMJKHdvcmtpbmcgY29weSkKQEAgLTky MCw2ICs5MjAsOCBAQAogCWl0ZW1zID0gMDsKIAlidWZbaXRlbXMrK10gPSBjcHVfdG9fbGUz MihsZW4pOwogCWJ1ZltpdGVtcysrXSA9IGNwdV90b19sZTMyKHJvbGUtPnMudmFsdWUpOwor CWlmIChwb2xpY3lkYl9oYXNfYm91bmRhcnlfZmVhdHVyZShwKSkKKwkJYnVmW2l0ZW1zKytd ID0gY3B1X3RvX2xlMzIocm9sZS0+Ym91bmRzKTsKIAlpdGVtczIgPSBwdXRfZW50cnkoYnVm LCBzaXplb2YodWludDMyX3QpLCBpdGVtcywgZnApOwogCWlmIChpdGVtcyAhPSBpdGVtczIp CiAJCXJldHVybiBQT0xJQ1lEQl9FUlJPUjsKQEAgLTk1MiwxOSArOTU0LDUxIEBACiAKIAl0 eXBkYXR1bSA9ICh0eXBlX2RhdHVtX3QgKikgZGF0dW07CiAKKwkvKgorCSAqIFRoZSBrZXJu ZWwgcG9saWN5IHZlcnNpb24gbGVzcyB0aGFuIDI0ICg9IFBPTElDWURCX1ZFUlNJT05fQk9V TkRBUlkpCisJICogZG9lcyBub3Qgc3VwcG9ydCB0byBsb2FkIGVudHJpZXMgb2YgYXR0cmli dXRlLCBzbyB3ZSBza2lwIHRvIHdyaXRlIGl0LgorCSAqLworCWlmIChwLT5wb2xpY3lfdHlw ZSA9PSBQT0xJQ1lfS0VSTgorCSAgICAmJiBwLT5wb2xpY3l2ZXJzIDwgUE9MSUNZREJfVkVS U0lPTl9CT1VOREFSWQorCSAgICAmJiB0eXBkYXR1bS0+Zmxhdm9yID09IFRZUEVfQVRUUklC KQorCQlyZXR1cm4gUE9MSUNZREJfU1VDQ0VTUzsKKwogCWxlbiA9IHN0cmxlbihrZXkpOwog CWl0ZW1zID0gMDsKIAlidWZbaXRlbXMrK10gPSBjcHVfdG9fbGUzMihsZW4pOwogCWJ1Zltp dGVtcysrXSA9IGNwdV90b19sZTMyKHR5cGRhdHVtLT5zLnZhbHVlKTsKLQlidWZbaXRlbXMr K10gPSBjcHVfdG9fbGUzMih0eXBkYXR1bS0+cHJpbWFyeSk7Ci0JaWYgKHAtPnBvbGljeV90 eXBlICE9IFBPTElDWV9LRVJOKSB7Ci0JCWJ1ZltpdGVtcysrXSA9IGNwdV90b19sZTMyKHR5 cGRhdHVtLT5mbGF2b3IpOwotCQlpZiAocC0+cG9saWN5dmVycyA+PSBNT0RfUE9MSUNZREJf VkVSU0lPTl9QRVJNSVNTSVZFKQotCQkJYnVmW2l0ZW1zKytdID0gY3B1X3RvX2xlMzIodHlw ZGF0dW0tPmZsYWdzKTsKLQkJZWxzZSBpZiAodHlwZGF0dW0tPmZsYWdzICYgVFlQRV9GTEFH U19QRVJNSVNTSVZFKQotCQkJV0FSTihmcC0+aGFuZGxlLCAiV2FybmluZyEgTW9kdWxlIHBv bGljeSB2ZXJzaW9uICVkIGNhbm5ub3QgIgotCQkJICAgICAic3VwcG9ydCBwZXJtaXNzaXZl IHR5cGVzLCBidXQgb25lIHdhcyBkZWZpbmVkIiwKLQkJCSAgICAgcC0+cG9saWN5dmVycyk7 CisJaWYgKHBvbGljeWRiX2hhc19ib3VuZGFyeV9mZWF0dXJlKHApKSB7CisJCXVpbnQzMl90 IHByb3BlcnRpZXMgPSAwOworCisJCWlmICh0eXBkYXR1bS0+cHJpbWFyeSkKKwkJCXByb3Bl cnRpZXMgfD0gVFlQRURBVFVNX1BST1BFUlRZX1BSSU1BUlk7CisKKwkJaWYgKHR5cGRhdHVt LT5mbGF2b3IgPT0gVFlQRV9BVFRSSUIpIHsKKwkJCXByb3BlcnRpZXMgfD0gVFlQRURBVFVN X1BST1BFUlRZX0FUVFJJQlVURTsKKwkJfSBlbHNlIGlmICh0eXBkYXR1bS0+Zmxhdm9yID09 IFRZUEVfQUxJQVMKKwkJCSAgICYmIHAtPnBvbGljeV90eXBlICE9IFBPTElDWV9LRVJOKQor CQkJcHJvcGVydGllcyB8PSBUWVBFREFUVU1fUFJPUEVSVFlfQUxJQVM7CisKKwkJaWYgKHR5 cGRhdHVtLT5mbGFncyAmIFRZUEVfRkxBR1NfUEVSTUlTU0lWRQorCQkgICAgJiYgcC0+cG9s aWN5X3R5cGUgIT0gUE9MSUNZX0tFUk4pCisJCQlwcm9wZXJ0aWVzIHw9IFRZUEVEQVRVTV9Q Uk9QRVJUWV9QRVJNSVNTSVZFOworCisJCWJ1ZltpdGVtcysrXSA9IGNwdV90b19sZTMyKHBy b3BlcnRpZXMpOworCQlidWZbaXRlbXMrK10gPSBjcHVfdG9fbGUzMih0eXBkYXR1bS0+Ym91 bmRzKTsKKwl9IGVsc2UgeworCQlidWZbaXRlbXMrK10gPSBjcHVfdG9fbGUzMih0eXBkYXR1 bS0+cHJpbWFyeSk7CisKKwkJaWYgKHAtPnBvbGljeV90eXBlICE9IFBPTElDWV9LRVJOKSB7 CisJCQlidWZbaXRlbXMrK10gPSBjcHVfdG9fbGUzMih0eXBkYXR1bS0+Zmxhdm9yKTsKKwor CQkJaWYgKHAtPnBvbGljeXZlcnMgPj0gTU9EX1BPTElDWURCX1ZFUlNJT05fUEVSTUlTU0lW RSkKKwkJCQlidWZbaXRlbXMrK10gPSBjcHVfdG9fbGUzMih0eXBkYXR1bS0+ZmxhZ3MpOwor CQkJZWxzZSBpZiAodHlwZGF0dW0tPmZsYWdzICYgVFlQRV9GTEFHU19QRVJNSVNTSVZFKQor CQkJCVdBUk4oZnAtPmhhbmRsZSwgIldhcm5pbmchIE1vZHVsZSBwb2xpY3kgIgorCQkJCSAg ICAgInZlcnNpb24gJWQgY2Fubm5vdCBzdXBvcnQgcGVybWlzc2l2ZSAiCisJCQkJICAgICAi dHlwZXMsIGJ1dCBvbmUgd2FzIGRlZmluZWQiLAorCQkJCSAgICAgcC0+cG9saWN5dmVycyk7 CisJCX0KIAl9CiAJaXRlbXMyID0gcHV0X2VudHJ5KGJ1Ziwgc2l6ZW9mKHVpbnQzMl90KSwg aXRlbXMsIGZwKTsKIAlpZiAoaXRlbXMgIT0gaXRlbXMyKQpAQCAtOTk3LDYgKzEwMzEsOCBA QAogCWl0ZW1zID0gMDsKIAlidWZbaXRlbXMrK10gPSBjcHVfdG9fbGUzMihsZW4pOwogCWJ1 ZltpdGVtcysrXSA9IGNwdV90b19sZTMyKHVzcmRhdHVtLT5zLnZhbHVlKTsKKwlpZiAocG9s aWN5ZGJfaGFzX2JvdW5kYXJ5X2ZlYXR1cmUocCkpCisJCWJ1ZltpdGVtcysrXSA9IGNwdV90 b19sZTMyKHVzcmRhdHVtLT5ib3VuZHMpOwogCWl0ZW1zMiA9IHB1dF9lbnRyeShidWYsIHNp emVvZih1aW50MzJfdCksIGl0ZW1zLCBmcCk7CiAJaWYgKGl0ZW1zICE9IGl0ZW1zMikKIAkJ cmV0dXJuIFBPTElDWURCX0VSUk9SOwpJbmRleDogbGlic2Vwb2wvc3JjL2xpbmsuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci0tLSBsaWJzZXBvbC9zcmMvbGluay5jCShyZXZpc2lvbiAyOTUwKQorKysg bGlic2Vwb2wvc3JjL2xpbmsuYwkod29ya2luZyBjb3B5KQpAQCAtNjYwLDYgKzY2MCw5NyBA QAogCSAgICB1c2VyX2NvcHlfY2FsbGJhY2ssIGJvb2xfY29weV9jYWxsYmFjaywgc2Vuc19j b3B5X2NhbGxiYWNrLAogCSAgICBjYXRfY29weV9jYWxsYmFja307CiAKKy8qCisgKiBUaGUg Ym91bmRhcmllcyBoYXZlIHRvIGJlIGNvcGllZCBhZnRlciB0aGUgdHlwZXMvcm9sZXMvdXNl cnMgYXJlIGNvcGllZCwKKyAqIGJlY2F1c2UgaXQgcmVmZXJzIGhhc2h0YWIgdG8gbG9va3Vw IGRlc3RpbmF0ZWQgb2JqZWN0cy4KKyAqLworc3RhdGljIGludCB0eXBlX2JvdW5kc19jb3B5 X2NhbGxiYWNrKGhhc2h0YWJfa2V5X3Qga2V5LAorCQkJCSAgICAgaGFzaHRhYl9kYXR1bV90 IGRhdHVtLCB2b2lkICpkYXRhKQoreworCWxpbmtfc3RhdGVfdCAqc3RhdGUgPSAobGlua19z dGF0ZV90ICopIGRhdGE7CisJdHlwZV9kYXR1bV90ICp0eXBlID0gKHR5cGVfZGF0dW1fdCAq KSBkYXR1bTsKKwl0eXBlX2RhdHVtX3QgKmRlc3Q7CisJdWludDMyX3QgYm91bmRzX3ZhbDsK KworCWlmICghdHlwZS0+Ym91bmRzKQorCQlyZXR1cm4gMDsKKworCWJvdW5kc192YWwgPSBz dGF0ZS0+Y3VyLT5tYXBbU1lNX1RZUEVTXVt0eXBlLT5ib3VuZHMgLSAxXTsKKworCWRlc3Qg PSBoYXNodGFiX3NlYXJjaChzdGF0ZS0+YmFzZS0+cF90eXBlcy50YWJsZSwga2V5KTsKKwlp ZiAoIWRlc3QpIHsKKwkJRVJSKHN0YXRlLT5oYW5kbGUsCisJCSAgICAiVHlwZSBsb29rdXAg ZmFpbGVkIGZvciAlcyIsIChjaGFyICopa2V5KTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAo ZGVzdC0+Ym91bmRzICE9IDAgJiYgZGVzdC0+Ym91bmRzICE9IGJvdW5kc192YWwpIHsKKwkJ RVJSKHN0YXRlLT5oYW5kbGUsCisJCSAgICAiSW5jb25zaXN0ZW50IGJvdW5kYXJ5IGZvciAl cyIsIChjaGFyICopa2V5KTsKKwkJcmV0dXJuIC0xOworCX0KKwlkZXN0LT5ib3VuZHMgPSBi b3VuZHNfdmFsOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcm9sZV9ib3VuZHNf Y29weV9jYWxsYmFjayhoYXNodGFiX2tleV90IGtleSwKKwkJCQkgICAgIGhhc2h0YWJfZGF0 dW1fdCBkYXR1bSwgdm9pZCAqZGF0YSkKK3sKKwlsaW5rX3N0YXRlX3QgKnN0YXRlID0gKGxp bmtfc3RhdGVfdCAqKSBkYXRhOworCXJvbGVfZGF0dW1fdCAqcm9sZSA9IChyb2xlX2RhdHVt X3QgKikgZGF0dW07CisJcm9sZV9kYXR1bV90ICpkZXN0OworCXVpbnQzMl90IGJvdW5kc192 YWw7CisKKwlpZiAoIXJvbGUtPmJvdW5kcykKKwkJcmV0dXJuIDA7CisKKwlib3VuZHNfdmFs ID0gc3RhdGUtPmN1ci0+bWFwW1NZTV9ST0xFU11bcm9sZS0+Ym91bmRzIC0gMV07CisKKwlk ZXN0ID0gaGFzaHRhYl9zZWFyY2goc3RhdGUtPmJhc2UtPnBfcm9sZXMudGFibGUsIGtleSk7 CisJaWYgKCFkZXN0KSB7CisJCUVSUihzdGF0ZS0+aGFuZGxlLAorCQkgICAgIlJvbGUgbG9v a3VwIGZhaWxlZCBmb3IgJXMiLCAoY2hhciAqKWtleSk7CisJCXJldHVybiAtMTsKKwl9CisJ aWYgKGRlc3QtPmJvdW5kcyAhPSAwICYmIGRlc3QtPmJvdW5kcyAhPSBib3VuZHNfdmFsKSB7 CisJCUVSUihzdGF0ZS0+aGFuZGxlLAorCQkgICAgIkluY29uc2lzdGVudCBib3VuZGFyeSBm b3IgJXMiLCAoY2hhciAqKWtleSk7CisJCXJldHVybiAtMTsKKwl9CisJZGVzdC0+Ym91bmRz ID0gYm91bmRzX3ZhbDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzZXJfYm91 bmRzX2NvcHlfY2FsbGJhY2soaGFzaHRhYl9rZXlfdCBrZXksCisJCQkJICAgICBoYXNodGFi X2RhdHVtX3QgZGF0dW0sIHZvaWQgKmRhdGEpCit7CisJbGlua19zdGF0ZV90ICpzdGF0ZSA9 IChsaW5rX3N0YXRlX3QgKikgZGF0YTsKKwl1c2VyX2RhdHVtX3QgKnVzZXIgPSAodXNlcl9k YXR1bV90ICopIGRhdHVtOworCXVzZXJfZGF0dW1fdCAqZGVzdDsKKwl1aW50MzJfdCBib3Vu ZHNfdmFsOworCisJaWYgKCF1c2VyLT5ib3VuZHMpCisJCXJldHVybiAwOworCisJYm91bmRz X3ZhbCA9IHN0YXRlLT5jdXItPm1hcFtTWU1fVVNFUlNdW3VzZXItPmJvdW5kcyAtIDFdOwor CisJZGVzdCA9IGhhc2h0YWJfc2VhcmNoKHN0YXRlLT5iYXNlLT5wX3VzZXJzLnRhYmxlLCBr ZXkpOworCWlmICghZGVzdCkgeworCQlFUlIoc3RhdGUtPmhhbmRsZSwKKwkJICAgICJVc2Vy IGxvb2t1cCBmYWlsZWQgZm9yICVzIiwgKGNoYXIgKilrZXkpOworCQlyZXR1cm4gLTE7CisJ fQorCWlmIChkZXN0LT5ib3VuZHMgIT0gMCAmJiBkZXN0LT5ib3VuZHMgIT0gYm91bmRzX3Zh bCkgeworCQlFUlIoc3RhdGUtPmhhbmRsZSwKKwkJICAgICJJbmNvbnNpc3RlbnQgYm91bmRh cnkgZm9yICVzIiwgKGNoYXIgKilrZXkpOworCQlyZXR1cm4gLTE7CisJfQorCWRlc3QtPmJv dW5kcyA9IGJvdW5kc192YWw7CisKKwlyZXR1cm4gMDsKK30KKwogLyogVGhlIGFsaWFzZXMg aGF2ZSB0byBiZSBjb3BpZWQgYWZ0ZXIgdGhlIHR5cGVzIGFuZCBhdHRyaWJ1dGVzIHRvIGJl CiAgKiBjZXJ0YWluIHRoYXQgdGhlIGJhc2Ugc3ltYm9sIHRhYmxlIHdpbGwgaGF2ZSB0aGUg dHlwZSB0aGF0IHRoZQogICogYWxpYXMgcmVmZXJzLiBPdGhlcndpc2UsIHdlIHdvbid0IGJl IGFibGUgdG8gZmluZCB0aGUgdHlwZSB2YWx1ZQpAQCAtMTM2MiwxMSArMTQ1MywyMiBAQAog CQl9CiAJfQogCi0JaWYgKGhhc2h0YWJfbWFwCi0JICAgIChzcmNfc3ltdGFiW1NZTV9UWVBF U10udGFibGUsIGFsaWFzX2NvcHlfY2FsbGJhY2ssIHN0YXRlKSkgeworCWlmIChoYXNodGFi X21hcChzcmNfc3ltdGFiW1NZTV9UWVBFU10udGFibGUsCisJCQl0eXBlX2JvdW5kc19jb3B5 X2NhbGxiYWNrLCBzdGF0ZSkpCiAJCXJldHVybiAtMTsKLQl9CiAKKwlpZiAoaGFzaHRhYl9t YXAoc3JjX3N5bXRhYltTWU1fVFlQRVNdLnRhYmxlLAorCQkJYWxpYXNfY29weV9jYWxsYmFj aywgc3RhdGUpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoaGFzaHRhYl9tYXAoc3JjX3N5bXRh YltTWU1fUk9MRVNdLnRhYmxlLAorCQkJcm9sZV9ib3VuZHNfY29weV9jYWxsYmFjaywgc3Rh dGUpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoaGFzaHRhYl9tYXAoc3JjX3N5bXRhYltTWU1f VVNFUlNdLnRhYmxlLAorCQkJdXNlcl9ib3VuZHNfY29weV9jYWxsYmFjaywgc3RhdGUpKQor CQlyZXR1cm4gLTE7CisKIAkvKiB0aGVuIGZpeCBiaXRtYXBzIGFzc29jaWF0ZWQgd2l0aCB0 aG9zZSBuZXdseSBjb3BpZWQgaWRlbnRpZmllcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgU1lN X05VTTsgaSsrKSB7CiAJCWlmIChmaXhfY2FsbGJhY2tfZltpXSAhPSBOVUxMICYmCg== --------------040108050802090505010207-- -- This message was distributed to subscribers of the selinux mailing list. If you no longer wish to subscribe, send mail to majordomo@tycho.nsa.gov with the words "unsubscribe selinux" without quotes as the message.