From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Lucas C. Villa Real" Subject: [RFC][PATCH] GoboHide: allows to hide directories and symlinks Date: Tue, 1 Aug 2006 15:38:36 -0300 Message-ID: <2c03f9590608011138r3db06418i960e94af2aa729cd@mail.gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_47074_18654926.1154457516789" Cc: "Felipe W Damasio" Return-path: Received: from ug-out-1314.google.com ([66.249.92.168]:51301 "EHLO ug-out-1314.google.com") by vger.kernel.org with ESMTP id S1751778AbWHASii (ORCPT ); Tue, 1 Aug 2006 14:38:38 -0400 Received: by ug-out-1314.google.com with SMTP id m3so1435136ugc for ; Tue, 01 Aug 2006 11:38:36 -0700 (PDT) To: linux-fsdevel@vger.kernel.org Sender: linux-fsdevel-owner@vger.kernel.org List-Id: linux-fsdevel.vger.kernel.org ------=_Part_47074_18654926.1154457516789 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi, This is a request for comments on GoboHide, a patch developed as part of the GoboLinux project. Its purpose is to hide directories and symlinks from the filesystem, while still allowing them to be reachable and executed. The big motif came from the fact that Gobo doesn't use the traditional *NIX hierarchy of directories, but still needed to maintain backwards compatibility with it. The implementation itself is pretty simple: it has a private linked list of inodes registered by the super-user to be hidden from readdir(), which is done by skipping their copy on filldir(). This list can be manipulated in order to add, remove and list its contents, and these operations are performed through an ioctl() interface. Until recently, the support on filesystems was done by introducing a few hooks at their readdir() implementation, and after a cleanup this check was merged into the VFS, allowing a less intrusive implementation. The function names chosen are probably not the best ones, as we were still keeping the patch tied to the Gobo kernel, but of course we're open to new suggestions. Also, while we pretty much understand that this feature might not fit a place mainline due to its nature of hiding things, we'd really like to hear from you to make it a better patch. The gobohide tool can be used in order to test it: http://gobolinux.org/download/gobohide/GoboHide-0.09.tar.bz2 Thanks in advance for taking your time, Lucas && Felipe ------=_Part_47074_18654926.1154457516789 Content-Type: text/x-diff; name=01-gobohide.patch; charset=ANSI_X3.4-1968 Content-Transfer-Encoding: base64 X-Attachment-Id: f_eqclxxwl Content-Disposition: attachment; filename="01-gobohide.patch" ZGlmZiAtWCBkb250ZGlmZiAtTnVycCBsaW51eC0yLjYuMTgtcmMzLWdpdDEub3JpZy9mcy9nb2Jv aGlkZS5jIGxpbnV4LTIuNi4xOC1yYzMtZ2l0MS9mcy9nb2JvaGlkZS5jCi0tLSBsaW51eC0yLjYu MTgtcmMzLWdpdDEub3JpZy9mcy9nb2JvaGlkZS5jCTE5NjktMTItMzEgMjE6MDA6MDAuMDAwMDAw MDAwIC0wMzAwCisrKyBsaW51eC0yLjYuMTgtcmMzLWdpdDEvZnMvZ29ib2hpZGUuYwkyMDA2LTA4 LTAxIDEwOjA1OjQ2LjAwMDAwMDAwMCAtMDMwMApAQCAtMCwwICsxLDMyMyBAQAorLyoKKyAqIENv cHlyaWdodCAoQykgMjAwMiBDU2NpZW5jZS5PUkcgV29ybGQgRG9taW5hdGlvbiBJbmMuCisgKgor ICogVGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgcmVsZWFzZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgb3IgbGF0ZXIsIGluY29ycG9yYXRlZCBoZXJl aW4gYnkgcmVmZXJlbmNlLgorICogTW9kaWZpY2F0aW9ucy9mZWF0dXJlcy9idWcgZml4ZXMgYmFz ZWQgb24gb3IgZGVyaXZlZCBmcm9tIHRoaXMgY29kZSAKKyAqIGZhbGwgdW5kZXIgdGhlIEdQTCBh bmQgbXVzdCByZXRhaW4gdGhlIGF1dGhvcnNoaXAsIGNvcHlyaWdodCBhbmQgbGljZW5zZSAKKyAq IG5vdGljZS4gIFRoaXMgZmlsZSBpcyBub3QgYSBjb21wbGV0ZSBwcm9ncmFtIGFuZCBtYXkgb25s eSBiZSB1c2VkIHdoZW4gCisgKiB0aGUgZW50aXJlIG9wZXJhdGluZyBzeXN0ZW0gaXMgbGljZW5z ZWQgdW5kZXIgdGhlIEdQTC4gCisgKgorICogU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhpcyBk aXN0cmlidXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogQXV0aG9yOiBGZWxpcGUg VyBEYW1hc2lvIDxmZWxpcGV3ZEBnbWFpbC5jb20+LgorICogT3JpZ2luYWwgaWRlYTogTHVjYXMg Qy4gVmlsbGEgUmVhbCA8bHVjYXN2ckBnb2JvbGludXgub3JnPgorICoKKyAqIENoYW5nZXM6Cisg KiAwNC1KdWwtMjAwNiAtIEx1Y2FzIEMuIFZpbGxhIFJlYWwKKyAqICAgICAgICAgICAgICAgQWRk ZWQgR29ib0hpZGUgc3VwcG9ydCB0byBhbGwgZmlsZXN5c3RlbXMgdGhyb3VnaCB0aGUgVkZTLgor ICogICAgICAgICAgICAgICAKKyAqIDIxLUZlYi0yMDA0IC0gTHVjYXMgQy4gVmlsbGEgUmVhbAor ICogICAgICAgICAgICAgICBBZGRlZCBhbiBleHRyYSBjaGVjayBmb3IgdGhlIGlub2RlJ3MgVkZT IHJvb3QsIHNvIHRoYXQKKyAqICAgICAgICAgICAgICAgdGhlIHNhbWUgaW5vZGUgbnVtYmVyIG9u IGRpZmZlcmVudCBwYXJ0aXRpb25zIGRvbid0IGdldAorICogICAgICAgICAgICAgICBoaWRkZW4g bWlzdGFrZW5seS4KKyAqICAgICAgICAgICAgICAKKyAqIDExLU5vdi0yMDAzIC0gTHVjYXMgQy4g VmlsbGEgUmVhbAorICogICAgICAgICAgICAgICBSZW1vdmVkIHRoZSBzcGlubG9ja3MgZnJvbSBn b2JvbGludXhfc2hvd19oaWRkZW4oKSwgc2luY2UKKyAqICAgICAgICAgICAgICAgd2Ugd2VyZSBh bHJlYWR5IHdvcmtpbmcgd2l0aCBsaXN0X2Zvcl9lYWNoX3NhZmUoKSwgd2hpY2gKKyAqICAgICAg ICAgICAgICAgaXRlcmF0ZXMgc2FmZWx5IGFnYWluc3QgcmVtb3ZhbCBvZiBsaXN0IGVudHJpZXMu CisgKgorICogMDUtTWF5LTIwMDMgLSBGZWxpcGUgVyBEYW1hc2lvCisgKiAgICAgICAgICAgICAg IFVzaW5nIHJlYWQtd3JpdGUgbG9ja3MgaW5zdGVhZCBvZiBzcGlubG9ja3MsCisgKiAgICAgICAg ICAgICAgIGltcHJvdmluZyBxdWl0ZSBhIGJpdCByZWFkIG9wZXJhdGlvbnMKKyAqICAgICAgICAg ICAgICAgKGFsbG93IGNvbmN1cnJlbnQgcmVhZGVycywgYnV0IG9ubHkgYSBzaW5nbGUgd3JpdGVy KQorICoKKyAqIDI4LUFwci0yMDAzIC0gTHVjYXMgQy4gVmlsbGEgUmVhbAorICogICAgICAgICAg ICAgICBDZW50cmFsaXplZCBjaGVja3MgZm9yIFVJRCBvbiBnb2JvbGludXgvZnMvaW9jdGwuYy4K KyAqICAgICAgICAgICAgICAgRml4ZWQgZ2V0X2ZyZWVfcGFnZSgpIHRvIHdvcmsgb24gNjQtYml0 IGFyY2hzIGFzIHdlbGwuCisgKgorICogMTItQXByLTIwMDMgLSBMdWNhcyBDLiBWaWxsYSBSZWFs CisgKiAgICAgICAgICAgICAgIFJlbW92ZWQgc3VwcG9ydCBmb3IgVUlEJ3MgZGlmZmVyZW50IHRo YW4gMCBoaWRlIGlub2Rlcy4KKyAqICAgICAgICAgICAgICAKKyAqIDI0LU1hci0yMDAzIC0gTHVj YXMgQy4gVmlsbGEgUmVhbAorICogICAgICAgICAgICAgICBNb2RpZmllZCBzdHJ1Y3QgaGlkZSBh bmQgY2FsbHMgc28gd2UgaGF2ZSBwYXRobmFtZXMgcmVsYXRlZAorICogICAgICAgICAgICAgICB0 byB0aGUgInJlYWwiIHJvb3QgZGlyIGFuZCBub3QgdGhlIHRoZSBtb3VudCBwb2ludC4KKyAqICAg ICAgICAgICAgICAKKyAqIDE3LU1hci0yMDAzIC0gTHVjYXMgQy4gVmlsbGEgUmVhbAorICogICAg ICAgICAgICAgICBBZGRlZCBzdXBwb3J0IGZvciBmdWxsIHBhdGhuYW1lLCByYXRoZXIgdGhhbiBk ZWFsaW5nIG9ubHkKKyAqICAgICAgICAgICAgICAgd2l0aCBpbm9kZSBudW1iZXJzLgorICoKKyAq IDEwLUphbi0yMDAzIC0gTHVjYXMgQy4gVmlsbGEgUmVhbAorICogICAgICAgICAgICAgICBBZGRl ZCBzdGF0aXN0aWNzIHN1cHBvcnQuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1 ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxs aW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxl Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+ CisjaW5jbHVkZSA8bGludXgvZ29ib2hpZGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5o PgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+Cisj aW5jbHVkZSA8bGludXgvbW91bnQuaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKK3N0 YXRpYyBMSVNUX0hFQUQoaW5vZGVfbGlzdCk7CitzdGF0aWMgcndsb2NrX3QgaW5vZGVfbG9jayA9 IFJXX0xPQ0tfVU5MT0NLRUQ7CisKKy8qKiAKKyAqIGdvYm9saW51eF9mc19pb2N0bCAtIEhhbmRs ZSBmcy1yZWxhdGVkIGlvY3RscyAKKyAqIEBpbm9kZTogaW5vZGUgbnVtYmVyIGJlaW5nIGFkZGVk L3JlbW92ZWQgZnJvbSB0aGUgaGlkZS1saXN0CisgKiBAaGlkZTogc3RydWN0dXJlIGNvbnRhaW5p bmcgdGhlIHVzZXIncyByZXF1ZXN0IAorICovCitpbnQgZ29ib2xpbnV4X2ZzX2lvY3RsKHN0cnVj dCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBnb2JvbGludXhfaGlkZSAqaGlkZSkKK3sKKwlpbnQgZXJy b3IgPSAwOworCQorCWlmICghaGlkZSkgeworCQllcnJvciA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0 OworCX0KKworCS8qIFdlIG9ubHkgc3VwcG9ydCBzeW1ib2xpYyBsaW5rcyBhbmQgZGlyZWN0b3Jp ZXMgKi8KKwlpZiAoaGlkZS0+aW5vZGUgJiYgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgJiYgIVNf SVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJZXJyb3IgPSAtRUlOVkFMOworCQlnb3RvIG91dDsK Kwl9CisKKwkvKiBXZSBvbmx5IGFsbG93IHByb2Nlc3Mgd2l0aCBhZG1pbiBwcml2aWxlZ2VzIAor CSAqIHRvIHVzZSB0aGUgZnMtcmVsYXRlZCBnb2JvIGlvY3RscyAKKwkgKi8KKwlpZiAoY3VycmVu dC0+dWlkICE9IDAgJiYgY3VycmVudC0+ZXVpZCAhPSAwKSB7CisJCWVycm9yID0gLUVQRVJNOwor CQlnb3RvIG91dDsKKwl9CisKKwlzd2l0Y2ggKGhpZGUtPm9wZXJhdGlvbikgeworCQljYXNlIEdP Qk9MSU5VWF9ISURFSU5PREU6CisJCQllcnJvciA9IGdvYm9saW51eF9pbm9kZV9hZGQoaGlkZS0+ aW5vZGUsIGhpZGUtPnBhdGhuYW1lKTsKKwkJCWJyZWFrOworCQljYXNlIEdPQk9MSU5VWF9VTkhJ REVJTk9ERToKKwkJCWVycm9yID0gZ29ib2xpbnV4X2lub2RlX2RlbChoaWRlLT5pbm9kZSk7CisJ CQlicmVhazsKKwkJY2FzZSBHRVRTVEFUU1VJRE5VTUJFUjoKKwkJCWVycm9yID0gZ29ib2xpbnV4 X2NvdW50X2hpZGRlbihoaWRlKTsKKwkJCWJyZWFrOworCQljYXNlIEdFVFNUQVRTVUlEOgorCQkJ ZXJyb3IgPSBnb2JvbGludXhfc2hvd19oaWRkZW4oaGlkZSk7CisJCQlicmVhazsKKwkJZGVmYXVs dDoKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9CisKK291dDoKKwlyZXR1cm4gZXJyb3I7Cit9 CisKKy8qKiAKKyAqIGdvYm9saW51eF9yZXNvbHZlX3BhdGggLSBSZXNvbHZlcyB0aGUgcGF0aG5h bWUgb2YgYSBnaXZlbiBkZW50cnkKKyAqIEBpbm9kZTogc3RydWN0dXJlIGhvbGRpbmcgdGhlIGRl bnRyeSBzdHJ1Y3R1cmUgYW5kIHRoZSBkZXN0aW5hdGlvbiBidWZmZXIKKyAqLworaW50IGdvYm9s aW51eF9yZXNvbHZlX3BhdGgoc3RydWN0IGhpZGUgKmlub2RlKQoreworCWludCBsZW47CisJc3Ry dWN0IGZpbGUgKmZpbHAgPSBpbm9kZS0+ZmlscDsKKwkKKwlpbm9kZS0+cGFnZSA9IF9fZ2V0X2Zy ZWVfcGFnZShHRlBfVVNFUik7CisJaWYgKCEgaW5vZGUtPnBhZ2UpCisJCXJldHVybiAtRU5PTUVN OworCQorCWlub2RlLT5wYXRobmFtZSA9IGRfcGF0aChmaWxwLT5mX2RlbnRyeSwgZmlscC0+Zl92 ZnNtbnQsIAorCQkJKGNoYXIgKikgaW5vZGUtPnBhZ2UsIFBBR0VfU0laRSk7CisJbGVuID0gUEFH RV9TSVpFICsgaW5vZGUtPnBhZ2UgLSAodW5zaWduZWQgbG9uZykgaW5vZGUtPnBhdGhuYW1lOwor CisJcmV0dXJuIGxlbiA8IFBBVEhfTUFYID8gbGVuIDogUEFUSF9NQVg7Cit9CisKKy8qKgorICog Z29ib2xpbnV4X2NvdW50X2hpZGRlbiAtIENvdW50cyBob3cgbWFueSBpbm9kZXMgYXJlIGhpZGRl bi4KKyAqIEBoaWRlOiB0aGUgc3RydWN0dXJlIGNvbnRhaW5pbmcgYSBwb2ludGVyIHRvIHN0b3Jl IHRoZSBudW1iZXIgb2YgaW5vZGVzIAorICogICAgICAgIGhpZGRlbi4KKyAqLworaW50IGdvYm9s aW51eF9jb3VudF9oaWRkZW4oc3RydWN0IGdvYm9saW51eF9oaWRlICpoaWRlKQoreworCXN0cnVj dCBsaXN0X2hlYWQgKnAsICpuZXh0OworCXN0cnVjdCBoaWRlICppbm9kZTsKKwl1bnNpZ25lZCBs b25nIGZsYWdzOworCQorCWhpZGUtPnN0YXRzLmhpZGRlbl9pbm9kZXMgPSAwOworCQorCXJlYWRf bG9ja19pcnFzYXZlKCZpbm9kZV9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKHAs IG5leHQsICZpbm9kZV9saXN0KSB7CisJCWlub2RlID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgaGlk ZSwgaGVhZCk7CisJCWlmIChpbm9kZSkKKwkJCWhpZGUtPnN0YXRzLmhpZGRlbl9pbm9kZXMrKzsK Kwl9CisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmaW5vZGVfbG9jaywgZmxhZ3MpOworCXJldHVy biAwOworfQorCisvKioKKyAqIGdvYm9saW51eF9zaG93X2hpZGRlbiAtIExpc3RzIHRoZSBjdXJy ZW50bHkgaGlkZGVuIGlub2Rlcy4KKyAqIEBoaWRlOiB0aGUgc3RydWN0dXJlIGNvbnRhaW5pbmcg YSBwb2ludGVyIHRvIGEgcHJldmlvdXMtYWxsb2NhdGVkIGFycmF5CisgKiAgICAgICAgb2Ygbm8g bW9yZSB0aGFuIEBoaWRlLT5zdGF0cy5oaWRkZW5faW5vZGVzIGVsZW1lbnRzIG9mIHVuc2lnbmVk IGxvbmcuIAorICoKKyAqIFRoaXMgYXJyYXkgaXMgZmlsbGVkIHdpdGggdGhlIGRpcmVjdG9yaWVz IGJlaW5nIGhpZGRlbi4KKyAqLworaW50IGdvYm9saW51eF9zaG93X2hpZGRlbihzdHJ1Y3QgZ29i b2xpbnV4X2hpZGUgKmhpZGUpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqcCwgKm5leHQ7CisJc3Ry dWN0IGhpZGUgKmlub2RlOworCXN0cnVjdCBnb2JvbGludXhfaGlkZV9zdGF0cyAqc3RhdHM7CisJ CisJaGlkZS0+c3RhdHMuZmlsbGVkX3NpemUgPSAwOworCQorCWxpc3RfZm9yX2VhY2hfc2FmZShw LCBuZXh0LCAmaW5vZGVfbGlzdCkgeworCQlpbm9kZSA9IGxpc3RfZW50cnkocCwgc3RydWN0IGhp ZGUsIGhlYWQpOworCQlzdGF0cyA9ICZoaWRlLT5zdGF0czsKKwkJaWYgKGlub2RlICYmIChzdGF0 cy0+ZmlsbGVkX3NpemUgPCBzdGF0cy0+aGlkZGVuX2lub2RlcykpIHsJCisJCQlpZiAoY29weV90 b191c2VyKHN0YXRzLT5oaWRkZW5fbGlzdFtzdGF0cy0+ZmlsbGVkX3NpemUrK10sCisJCQkJaW5v ZGUtPnBhdGhuYW1lLCBzdHJsZW4oaW5vZGUtPnBhdGhuYW1lKSkpIHsKKwkJCQlyZXR1cm4gLUVG QVVMVDsKKwkJCX0KKwkJfSAKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZ29ib2xpbnV4 X2dldF9maWxwIC0gUmV0dXJucyB0aGUgc3RydWN0IGZpbGUgcmVsYXRlZCB0byBhIGdpdmVuIGRl c2NyaXB0b3IuCisgKiBAaW5vOiB0aGUgaW5vZGUgbnVtYmVyCisgKiBAcGF0aG5hbWU6IHRoZSBw YXRobmFtZSBhc3NvY2lhdGVkIHdpdGggQGlubworICogQHJldDogYSBwb2ludGVyIHdoaWNoIGhv bGRzIHRoZSByZXN1bHQgb2YgdGhlIHVzZXJfcGF0aF93YWxrX2xpbmsgb3BlcmF0aW9uCisgKi8K K3N0cnVjdCBmaWxlICpnb2JvbGludXhfZ2V0X2ZpbHAoaW5vX3QgaW5vLCBjb25zdCBjaGFyICpw YXRobmFtZSwgaW50ICpyZXQpCit7CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKwkKKwkqcmV0ID0g dXNlcl9wYXRoX3dhbGtfbGluayhwYXRobmFtZSwgJm5kKTsKKwlpZiAoKnJldCkKKwkJcmV0dXJu IE5VTEw7CisKKwlpZiAobmQuZGVudHJ5LT5kX2lub2RlLT5pX2lubyA9PSBpbm8pCisJCXJldHVy biBkZW50cnlfb3BlbihuZC5kZW50cnksIG5kLm1udCwgMCk7CisJCisJcmV0dXJuIE5VTEw7Cit9 CisKKy8qKgorICogZ29ib2xpbnV4X2lub2RlX2FkZCAtIEFkZCB0aGUgaW5vZGUgdG8gdGhlICJt dXN0IGhpZGUiIGxpc3QgCisgKiBAaW5vOiBpbm9kZSB0byBiZSBhZGRlZAorICogQHBhdGhuYW1l OiB0aGUgcGF0aG5hbWUgYXNzb2NpYXRlZCB3aXRoIEBpbm8KKyAqLworaW50IGdvYm9saW51eF9p bm9kZV9hZGQoaW5vX3QgaW5vLCBjb25zdCBjaGFyICpwYXRobmFtZSkKK3sKKwlpbnQgbGVuLCBy ZXQgPSAwOworCXN0cnVjdCBoaWRlICpuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCisJbiA9 IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoaWRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuKQorCQly ZXR1cm4gLUVOT01FTTsKKwkKKwluLT5maWxwID0gZ29ib2xpbnV4X2dldF9maWxwKGlubywgcGF0 aG5hbWUsICZyZXQpOworCWlmICghbi0+ZmlscCkgCisJCWdvdG8gb3V0OworCisJbGVuID0gZ29i b2xpbnV4X3Jlc29sdmVfcGF0aChuKTsKKwlpZiAobGVuIDwgMCkgeworCQlyZXQgPSBsZW47CisJ CWdvdG8gb3V0OworCX0KKwkKKwlpZiAoZ29ib2xpbnV4X2hpZGUoaW5vLCBuLT5maWxwLT5mX2Rl bnRyeS0+ZF9zYikpIHsKKwkJcmV0ID0gLUVFWElTVDsKKwkJZ290byBvdXQ7CisJfQkKKwkKKwl3 cml0ZV9sb2NrX2lycXNhdmUoJmlub2RlX2xvY2ssIGZsYWdzKTsKKwlJTklUX0xJU1RfSEVBRCgm bi0+aGVhZCk7CisJCisJbGlzdF9hZGQoJm4tPmhlYWQsICZpbm9kZV9saXN0KTsKKwl3cml0ZV91 bmxvY2tfaXJxcmVzdG9yZSgmaW5vZGVfbG9jaywgZmxhZ3MpOworb3V0OgorCXJldHVybiByZXQ7 Cit9CisKKy8qKgorICogZ29ib2xpbnV4X2lub2RlX2RlbCAtIFJlbW92ZSB0aGUgaW5vZGUgZnJv bSB0aGUgIm11c3QgaGlkZSIgbGlzdCAKKyAqIEBpbm86IGlub2RlIHRvIGJlIHJlbW92ZWQKKyAq LworaW50IGdvYm9saW51eF9pbm9kZV9kZWwoaW5vX3QgaW5vKQoreworCXN0cnVjdCBsaXN0X2hl YWQgKnAsICpuZXh0OworCXN0cnVjdCBoaWRlICppbm9kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdz OworCQorCXdyaXRlX2xvY2tfaXJxc2F2ZSgmaW5vZGVfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9y X2VhY2hfc2FmZShwLCBuZXh0LCAmaW5vZGVfbGlzdCkgeworCQlpbm9kZSA9IGxpc3RfZW50cnko cCwgc3RydWN0IGhpZGUsIGhlYWQpOworCQlpZiAoaW5vZGUgJiYgKGlub2RlLT5maWxwLT5mX2Rl bnRyeS0+ZF9pbm9kZS0+aV9pbm89PSBpbm8pKSB7CisJCQlsaXN0X2RlbCgmaW5vZGUtPmhlYWQp OworCQkJZnJlZV9wYWdlKGlub2RlLT5wYWdlKTsKKwkJCWZpbHBfY2xvc2UoaW5vZGUtPmZpbHAs IGN1cnJlbnQtPmZpbGVzKTsKKwkJCWtmcmVlKGlub2RlKTsKKwkJCWJyZWFrOworCQl9CisJfQor CisJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmlub2RlX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4g MDsKK30KKworLyoqIAorICogZ29ib2xpbnV4X2hpZGVfaW5vZGUgLSBUZXN0IGlmIHRoZSBpbm9k ZSBpcyBpbiB0aGUgIm11c3QgaGlkZSIgbGlzdCwKKyAqICAgICAgIGNvbXBhcmluZyBhZ2FpbnN0 IHRoZSBpbm9kZSBudW1iZXIgYW5kIHRoZSBzdXBlcmJsb2NrLgorICoKKyAqIEBpbm86IGlub2Rl IGJlaW5nIHJlYWRkaXInZAorICogQGlub2RlX3NiOiB0aGUgc3VwZXJibG9jayBvbiB3aGljaCB0 aGUgZ2l2ZW4gaW5vZGUgY2FuIGJlIGZvdW5kLgorICoKKyAqIFNob3VsZCBiZSBwcmV0dHkgc3Ry YWlnaHQtZm9yd2FyZDogSWYgdGhlIGlub2RlIG51bWJlciBpcyBpbgorICogdGhlIGlub2RlX2xp c3QsIHJldHVybnMgMS4gSWYgaXQgaXNuJ3QsIHJldHVybnMgMC4KKyAqIFJldHVybnMgLTEgaWYg YW4gaW52YWxpZCBpbm9kZSBpcyByZWNlaXZlZCAKKyAqLworaW50IGdvYm9saW51eF9oaWRlKGlu b190IGlubywgc3RydWN0IHN1cGVyX2Jsb2NrICppbm9kZV9zYikKK3sKKwlzdHJ1Y3QgbGlzdF9o ZWFkICpwOworCWludCByZXQgPSAtMTsKKwlzdHJ1Y3QgaGlkZSAqaW5vZGU7CisJdW5zaWduZWQg bG9uZyBmbGFnczsKKwkKKwlpZiAoIWlubykKKwkJZ290byBvdXQ7CisKKwlyZXQgPSAwOworCXJl YWRfbG9ja19pcnFzYXZlKCZpbm9kZV9sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaChwLCAm aW5vZGVfbGlzdCkgeworCQlpbm9kZSA9IGxpc3RfZW50cnkocCwgc3RydWN0IGhpZGUsIGhlYWQp OworCQlpZiAoaW5vZGUtPmZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX2lubyA9PSBpbm8pIHsK KwkJCWlmIChpbm9kZS0+ZmlscC0+Zl9kZW50cnktPmRfc2IgPT0gaW5vZGVfc2IpCisJCQkJcmV0 ID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmlub2Rl X2xvY2ssIGZsYWdzKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKiBXZSBuZWVkIHRvIGV4 cG9ydCB0aGlzIGZ1bmN0aW9uIHRvIGFkZCBzdXBwb3J0IG9uIHRoZSBWRlMgKi8KK0VYUE9SVF9T WU1CT0woZ29ib2xpbnV4X2hpZGUpOworCisvKioKKyAqIFRoZXNlIGFyZSBvbmx5IGV4cG9ydGVk IGZvciB0aGUgaW9jdGwgaGFuZGxlcidzIHNha2UgCisgKi8KK0VYUE9SVF9TWU1CT0woZ29ib2xp bnV4X2ZzX2lvY3RsKTsKK0VYUE9SVF9TWU1CT0woZ29ib2xpbnV4X2lub2RlX2FkZCk7CitFWFBP UlRfU1lNQk9MKGdvYm9saW51eF9pbm9kZV9kZWwpOworRVhQT1JUX1NZTUJPTChnb2JvbGludXhf c2hvd19oaWRkZW4pOworRVhQT1JUX1NZTUJPTChnb2JvbGludXhfY291bnRfaGlkZGVuKTsKZGlm ZiAtWCBkb250ZGlmZiAtTnVycCBsaW51eC0yLjYuMTgtcmMzLWdpdDEub3JpZy9mcy9pb2N0bC5j IGxpbnV4LTIuNi4xOC1yYzMtZ2l0MS9mcy9pb2N0bC5jCi0tLSBsaW51eC0yLjYuMTgtcmMzLWdp dDEub3JpZy9mcy9pb2N0bC5jCTIwMDYtMDgtMDEgMTA6MzU6MDAuMDAwMDAwMDAwIC0wMzAwCisr KyBsaW51eC0yLjYuMTgtcmMzLWdpdDEvZnMvaW9jdGwuYwkyMDA2LTA4LTAxIDA5OjU2OjUxLjAw MDAwMDAwMCAtMDMwMApAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAj aW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNp bmNsdWRlIDxsaW51eC9nb2JvaGlkZS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNp bmNsdWRlIDxhc20vaW9jdGxzLmg+CkBAIC0xNDYsNiArMTQ3LDE5IEBAIGludCB2ZnNfaW9jdGwo c3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmUKIAkJCWVsc2UKIAkJCQllcnJvciA9IC1FTk9UVFk7 CiAJCQlicmVhazsKKyNpZmRlZiBDT05GSUdfR09CT0hJREVfRlMKKwkJY2FzZSBGSUdPQk9MSU5V WDoKKwkJCWRvIHsKKwkJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRf aW5vZGU7CisKKwkJCQlpZiAoIWFyZykgeworCQkJCQllcnJvciA9IC1FSU5WQUw7CisJCQkJCWJy ZWFrOworCQkJCX0KKwkJCQllcnJvciA9IGdvYm9saW51eF9mc19pb2N0bChpbm9kZSwgKHN0cnVj dCBnb2JvbGludXhfaGlkZSAqKSBhcmcpOworCQkJfSB3aGlsZSAoMCk7CisJCQlicmVhazsKKyNl bmRpZgogCQlkZWZhdWx0OgogCQkJaWYgKFNfSVNSRUcoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUt PmlfbW9kZSkpCiAJCQkJZXJyb3IgPSBmaWxlX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKZGlmZiAt WCBkb250ZGlmZiAtTnVycCBsaW51eC0yLjYuMTgtcmMzLWdpdDEub3JpZy9mcy9LY29uZmlnIGxp bnV4LTIuNi4xOC1yYzMtZ2l0MS9mcy9LY29uZmlnCi0tLSBsaW51eC0yLjYuMTgtcmMzLWdpdDEu b3JpZy9mcy9LY29uZmlnCTIwMDYtMDgtMDEgMTA6MzU6MDAuMDAwMDAwMDAwIC0wMzAwCisrKyBs aW51eC0yLjYuMTgtcmMzLWdpdDEvZnMvS2NvbmZpZwkyMDA2LTA4LTAxIDA5OjU2OjUxLjAwMDAw MDAwMCAtMDMwMApAQCAtMTI2NSw2ICsxMjY1LDE4IEBAIGNvbmZpZyBWWEZTX0ZTCiAJICBUbyBj b21waWxlIHRoaXMgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbCBi ZQogCSAgY2FsbGVkIGZyZWV2eGZzLiAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIEdPQk9I SURFX0ZTCisJYm9vbCAiR29ib0hpZGUgc3VwcG9ydCBvbiBmaWxlIHN5c3RlbXMiCisJZGVmYXVs dCB5CisJaGVscAorCSAgR29ib0hpZGUgaXMgYSBnZW5lcmFsIGludGVyZmFjZSBmb3IgcHJvdmlk aW5nIHJlYWwgaGlkZGVuIGZpbGVzIAorCSAgaW4gYSBmaWxlc3lzdGVtLiBHb2JvSGlkZSBub3cg c3VwcG9ydHMgYWxsIGZpbGVzeXN0ZW1zLCBpbmNsdWRpbmcKKwkgIEVYVDMsIFNxdWFzaEZTIGFu ZCBhbnkgb3RoZXIgc2l0dGVkIG9uIHRoZSB0b3Agb2YgdGhlIFZGUy4KKwkgIFRoaXMgcGF0Y2gg d2FzIGNyZWF0ZWQgZXNwZWNpYWxseSBmb3IgR29ib0xpbnV4LCBpbiBvcmRlciB0byByZW1vdmUK KwkgIHRoZSBsZWdhY3kgdHJlZSBmcm9tIHRoZSB1c3VhbCBzeXN0ZW0gdmlldy4KKwkgIFRvIHVz ZSBpdCwgc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBnb2JvaGlkZSB1c2Vyc3BhY2UgdG9v bC4KKworCSAgR29ib0xpbnV4IHVzZXJzIHdpbGwgbm9ybWFsbHkgd2FudCB0byBzYXkgWS4KIAog Y29uZmlnIEhQRlNfRlMKIAl0cmlzdGF0ZSAiT1MvMiBIUEZTIGZpbGUgc3lzdGVtIHN1cHBvcnQi CmRpZmYgLVggZG9udGRpZmYgLU51cnAgbGludXgtMi42LjE4LXJjMy1naXQxLm9yaWcvZnMvTWFr ZWZpbGUgbGludXgtMi42LjE4LXJjMy1naXQxL2ZzL01ha2VmaWxlCi0tLSBsaW51eC0yLjYuMTgt cmMzLWdpdDEub3JpZy9mcy9NYWtlZmlsZQkyMDA2LTA4LTAxIDEwOjM1OjAwLjAwMDAwMDAwMCAt MDMwMAorKysgbGludXgtMi42LjE4LXJjMy1naXQxL2ZzL01ha2VmaWxlCTIwMDYtMDgtMDEgMTA6 Mjc6NTcuMDAwMDAwMDAwIC0wMzAwCkBAIC00Miw2ICs0Miw3IEBAIG9iai0kKENPTkZJR19RRk1U X1YyKQkJKz0gcXVvdGFfdjIubwogb2JqLSQoQ09ORklHX1FVT1RBQ1RMKQkJKz0gcXVvdGEubwog CiBvYmotJChDT05GSUdfRE5PVElGWSkJCSs9IGRub3RpZnkubworb2JqLSQoQ09ORklHX0dPQk9I SURFX0ZTKQkrPSBnb2JvaGlkZS5vCiAKIG9iai0kKENPTkZJR19QUk9DX0ZTKQkJKz0gcHJvYy8K IG9iai15CQkJCSs9IHBhcnRpdGlvbnMvCmRpZmYgLVggZG9udGRpZmYgLU51cnAgbGludXgtMi42 LjE4LXJjMy1naXQxLm9yaWcvZnMvbmFtZWkuYyBsaW51eC0yLjYuMTgtcmMzLWdpdDEvZnMvbmFt ZWkuYwotLS0gbGludXgtMi42LjE4LXJjMy1naXQxLm9yaWcvZnMvbmFtZWkuYwkyMDA2LTA4LTAx IDEwOjM1OjAwLjAwMDAwMDAwMCAtMDMwMAorKysgbGludXgtMi42LjE4LXJjMy1naXQxL2ZzL25h bWVpLmMJMjAwNi0wOC0wMSAxNToxOToyNS4wMDAwMDAwMDAgLTAzMDAKQEAgLTMyLDYgKzMyLDcg QEAKICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KICNp bmNsdWRlIDxsaW51eC9uYW1laS5oPgorI2luY2x1ZGUgPGxpbnV4L2dvYm9oaWRlLmg+CiAjaW5j bHVkZSA8YXNtL25hbWVpLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtMTk4MSw2 ICsxOTgyLDEwIEBAIGludCB2ZnNfcm1kaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCAKIAl9 CiAJbXV0ZXhfdW5sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCWlmICghZXJyb3Ip IHsKKyNpZmRlZiBDT05GSUdfR09CT0hJREVfRlMKKwkJaWYgKGdvYm9saW51eF9oaWRlKGRlbnRy eS0+ZF9pbm9kZS0+aV9pbm8sIGRlbnRyeS0+ZF9zYikgPiAwKQorCQkJZ29ib2xpbnV4X2lub2Rl X2RlbChkZW50cnktPmRfaW5vZGUtPmlfaW5vKTsKKyNlbmRpZgogCQlkX2RlbGV0ZShkZW50cnkp OwogCX0KIAlkcHV0KGRlbnRyeSk7CkBAIC0yMDU4LDYgKzIwNjMsMTIgQEAgaW50IHZmc191bmxp bmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdAogCiAJLyogV2UgZG9uJ3QgZF9kZWxldGUoKSBO RlMgc2lsbHlyZW5hbWVkIGZpbGVzLS10aGV5IHN0aWxsIGV4aXN0LiAqLwogCWlmICghZXJyb3Ig JiYgIShkZW50cnktPmRfZmxhZ3MgJiBEQ0FDSEVfTkZTRlNfUkVOQU1FRCkpIHsKKyNpZmRlZiBD T05GSUdfR09CT0hJREVfRlMKKwkJaWYgKGRlbnRyeS0+ZF9pbm9kZSAmJiAoU19JU0xOSyhkZW50 cnktPmRfaW5vZGUtPmlfbW9kZSkgfHwgU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkp KSB7CisJCQlpZiAoZ29ib2xpbnV4X2hpZGUoZGVudHJ5LT5kX2lub2RlLT5pX2lubywgZGVudHJ5 LT5kX3NiKSA+IDApCisJCQkJZ29ib2xpbnV4X2lub2RlX2RlbChkZW50cnktPmRfaW5vZGUtPmlf aW5vKTsKKwkJfQorI2VuZGlmCiAJCWRfZGVsZXRlKGRlbnRyeSk7CiAJfQogCmRpZmYgLVggZG9u dGRpZmYgLU51cnAgbGludXgtMi42LjE4LXJjMy1naXQxLm9yaWcvZnMvcmVhZGRpci5jIGxpbnV4 LTIuNi4xOC1yYzMtZ2l0MS9mcy9yZWFkZGlyLmMKLS0tIGxpbnV4LTIuNi4xOC1yYzMtZ2l0MS5v cmlnL2ZzL3JlYWRkaXIuYwkyMDA2LTA2LTE3IDIyOjQ5OjM1LjAwMDAwMDAwMCAtMDMwMAorKysg bGludXgtMi42LjE4LXJjMy1naXQxL2ZzL3JlYWRkaXIuYwkyMDA2LTA4LTAxIDE1OjIxOjA3LjAw MDAwMDAwMCAtMDMwMApAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5 Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC91bmlzdGQu aD4KKyNpbmNsdWRlIDxsaW51eC9nb2JvaGlkZS5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3Mu aD4KIApAQCAtNjYsNiArNjcsOSBAQCBzdHJ1Y3Qgb2xkX2xpbnV4X2RpcmVudCB7CiBzdHJ1Y3Qg cmVhZGRpcl9jYWxsYmFjayB7CiAJc3RydWN0IG9sZF9saW51eF9kaXJlbnQgX191c2VyICogZGly ZW50OwogCWludCByZXN1bHQ7CisjaWZkZWYgQ09ORklHX0dPQk9ISURFX0ZTCisJc3RydWN0IHN1 cGVyX2Jsb2NrICppbm9kZV9zYjsKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBmaWxsb25lZGly KHZvaWQgKiBfX2J1ZiwgY29uc3QgY2hhciAqIG5hbWUsIGludCBuYW1sZW4sIGxvZmZfdCBvZmZz ZXQsCkBAIC0xMDcsNiArMTExLDkgQEAgYXNtbGlua2FnZSBsb25nIG9sZF9yZWFkZGlyKHVuc2ln bmVkIGludAogCiAJYnVmLnJlc3VsdCA9IDA7CiAJYnVmLmRpcmVudCA9IGRpcmVudDsKKyNpZmRl ZiBDT05GSUdfR09CT0hJREVfRlMKKwlidWYuaW5vZGVfc2IgPSBmaWxlLT5mX2RlbnRyeS0+ZF9z YjsKKyNlbmRpZgogCiAJZXJyb3IgPSB2ZnNfcmVhZGRpcihmaWxlLCBmaWxsb25lZGlyLCAmYnVm KTsKIAlpZiAoZXJyb3IgPj0gMCkKQEAgLTEzNSw2ICsxNDIsOSBAQCBzdHJ1Y3QgZ2V0ZGVudHNf Y2FsbGJhY2sgewogCXN0cnVjdCBsaW51eF9kaXJlbnQgX191c2VyICogcHJldmlvdXM7CiAJaW50 IGNvdW50OwogCWludCBlcnJvcjsKKyNpZmRlZiBDT05GSUdfR09CT0hJREVfRlMKKwlzdHJ1Y3Qg c3VwZXJfYmxvY2sgKmlub2RlX3NiOworI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IGZpbGxkaXIo dm9pZCAqIF9fYnVmLCBjb25zdCBjaGFyICogbmFtZSwgaW50IG5hbWxlbiwgbG9mZl90IG9mZnNl dCwKQEAgLTE0NCw2ICsxNTQsMTEgQEAgc3RhdGljIGludCBmaWxsZGlyKHZvaWQgKiBfX2J1Ziwg Y29uc3QgYwogCXN0cnVjdCBnZXRkZW50c19jYWxsYmFjayAqIGJ1ZiA9IChzdHJ1Y3QgZ2V0ZGVu dHNfY2FsbGJhY2sgKikgX19idWY7CiAJaW50IHJlY2xlbiA9IFJPVU5EX1VQKE5BTUVfT0ZGU0VU KGRpcmVudCkgKyBuYW1sZW4gKyAyKTsKIAorI2lmZGVmIENPTkZJR19HT0JPSElERV9GUworCWlm IChnb2JvbGludXhfaGlkZShpbm8sIGJ1Zi0+aW5vZGVfc2IpKQorCQlyZXR1cm4gMDsKKyNlbmRp ZgorCiAJYnVmLT5lcnJvciA9IC1FSU5WQUw7CS8qIG9ubHkgdXNlZCBpZiB3ZSBmYWlsLi4gKi8K IAlpZiAocmVjbGVuID4gYnVmLT5jb3VudCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xOTMsNiAr MjA4LDkgQEAgYXNtbGlua2FnZSBsb25nIHN5c19nZXRkZW50cyh1bnNpZ25lZCBpbgogCWJ1Zi5w cmV2aW91cyA9IE5VTEw7CiAJYnVmLmNvdW50ID0gY291bnQ7CiAJYnVmLmVycm9yID0gMDsKKyNp ZmRlZiBDT05GSUdfR09CT0hJREVfRlMKKwlidWYuaW5vZGVfc2IgPSBmaWxlLT5mX2RlbnRyeS0+ ZF9zYjsKKyNlbmRpZgogCiAJZXJyb3IgPSB2ZnNfcmVhZGRpcihmaWxlLCBmaWxsZGlyLCAmYnVm KTsKIAlpZiAoZXJyb3IgPCAwKQpAQCAtMjE5LDYgKzIzNyw5IEBAIHN0cnVjdCBnZXRkZW50c19j YWxsYmFjazY0IHsKIAlzdHJ1Y3QgbGludXhfZGlyZW50NjQgX191c2VyICogcHJldmlvdXM7CiAJ aW50IGNvdW50OwogCWludCBlcnJvcjsKKyNpZmRlZiBDT05GSUdfR09CT0hJREVfRlMKKwlzdHJ1 Y3Qgc3VwZXJfYmxvY2sgKmlub2RlX3NiOworI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IGZpbGxk aXI2NCh2b2lkICogX19idWYsIGNvbnN0IGNoYXIgKiBuYW1lLCBpbnQgbmFtbGVuLCBsb2ZmX3Qg b2Zmc2V0LApAQCAtMjI4LDYgKzI0OSwxMSBAQCBzdGF0aWMgaW50IGZpbGxkaXI2NCh2b2lkICog X19idWYsIGNvbnN0CiAJc3RydWN0IGdldGRlbnRzX2NhbGxiYWNrNjQgKiBidWYgPSAoc3RydWN0 IGdldGRlbnRzX2NhbGxiYWNrNjQgKikgX19idWY7CiAJaW50IHJlY2xlbiA9IFJPVU5EX1VQNjQo TkFNRV9PRkZTRVQoZGlyZW50KSArIG5hbWxlbiArIDEpOwogCisjaWZkZWYgQ09ORklHX0dPQk9I SURFX0ZTCisJaWYgKGdvYm9saW51eF9oaWRlKGlubywgYnVmLT5pbm9kZV9zYikpCisJCXJldHVy biAwOworI2VuZGlmCisKIAlidWYtPmVycm9yID0gLUVJTlZBTDsJLyogb25seSB1c2VkIGlmIHdl IGZhaWwuLiAqLwogCWlmIChyZWNsZW4gPiBidWYtPmNvdW50KQogCQlyZXR1cm4gLUVJTlZBTDsK QEAgLTI3OSw2ICszMDUsOSBAQCBhc21saW5rYWdlIGxvbmcgc3lzX2dldGRlbnRzNjQodW5zaWdu ZWQgCiAJYnVmLnByZXZpb3VzID0gTlVMTDsKIAlidWYuY291bnQgPSBjb3VudDsKIAlidWYuZXJy b3IgPSAwOworI2lmZGVmIENPTkZJR19HT0JPSElERV9GUworCWJ1Zi5pbm9kZV9zYiA9IGZpbGUt PmZfZGVudHJ5LT5kX3NiOworI2VuZGlmCiAKIAllcnJvciA9IHZmc19yZWFkZGlyKGZpbGUsIGZp bGxkaXI2NCwgJmJ1Zik7CiAJaWYgKGVycm9yIDwgMCkKZGlmZiAtWCBkb250ZGlmZiAtTnVycCBs aW51eC0yLjYuMTgtcmMzLWdpdDEub3JpZy9pbmNsdWRlL2xpbnV4L2ZzLmggbGludXgtMi42LjE4 LXJjMy1naXQxL2luY2x1ZGUvbGludXgvZnMuaAotLS0gbGludXgtMi42LjE4LXJjMy1naXQxLm9y aWcvaW5jbHVkZS9saW51eC9mcy5oCTIwMDYtMDgtMDEgMTA6MzU6MDIuMDAwMDAwMDAwIC0wMzAw CisrKyBsaW51eC0yLjYuMTgtcmMzLWdpdDEvaW5jbHVkZS9saW51eC9mcy5oCTIwMDYtMDgtMDEg MDk6NTY6NTEuMDAwMDAwMDAwIC0wMzAwCkBAIC0yMTUsNiArMjE1LDcgQEAgZXh0ZXJuIGludCBk aXJfbm90aWZ5X2VuYWJsZTsKICNkZWZpbmUgQk1BUF9JT0NUTCAxCQkvKiBvYnNvbGV0ZSAtIGtl cHQgZm9yIGNvbXBhdGliaWxpdHkgKi8KICNkZWZpbmUgRklCTUFQCSAgIF9JTygweDAwLDEpCS8q IGJtYXAgYWNjZXNzICovCiAjZGVmaW5lIEZJR0VUQlNaICAgX0lPKDB4MDAsMikJLyogZ2V0IHRo ZSBibG9jayBzaXplIHVzZWQgZm9yIGJtYXAgKi8KKyNkZWZpbmUgRklHT0JPTElOVVggX0lPVygw eDAwLCAweDIyLHNpemVfdCkgLyogZ29ib2xpbnV4LWZzIGlvY3RsICovCiAKICNkZWZpbmUgU1lO Q19GSUxFX1JBTkdFX1dBSVRfQkVGT1JFCTEKICNkZWZpbmUgU1lOQ19GSUxFX1JBTkdFX1dSSVRF CQkyCmRpZmYgLVggZG9udGRpZmYgLU51cnAgbGludXgtMi42LjE4LXJjMy1naXQxLm9yaWcvaW5j bHVkZS9saW51eC9nb2JvaGlkZS5oIGxpbnV4LTIuNi4xOC1yYzMtZ2l0MS9pbmNsdWRlL2xpbnV4 L2dvYm9oaWRlLmgKLS0tIGxpbnV4LTIuNi4xOC1yYzMtZ2l0MS5vcmlnL2luY2x1ZGUvbGludXgv Z29ib2hpZGUuaAkxOTY5LTEyLTMxIDIxOjAwOjAwLjAwMDAwMDAwMCAtMDMwMAorKysgbGludXgt Mi42LjE4LXJjMy1naXQxL2luY2x1ZGUvbGludXgvZ29ib2hpZGUuaAkyMDA2LTA4LTAxIDA5OjU5 OjE5LjAwMDAwMDAwMCAtMDMwMApAQCAtMCwwICsxLDQ1IEBACisjaWZuZGVmIF9MSU5VWF9HT0JP TElOVVhfSAorI2RlZmluZSBfTElOVVhfR09CT0xJTlVYX0gKKworI2lmZGVmIENPTkZJR19HT0JP SElERV9GUworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKKy8qIEdvYm9saW51eCBpbnRlcm5hbCBp b2N0bHMgKi8KKworI2RlZmluZSBHT0JPTElOVVhfSElERUlOT0RFICAgMHgwMDAwMDAxIC8qIEhp ZGUgYSBnaXZlbiBpbm9kZSBudW1iZXIgKi8KKyNkZWZpbmUgR09CT0xJTlVYX1VOSElERUlOT0RF IDB4MDAwMDAwMiAvKiBVbmhpZGUgYSBnaXZlbiBpbm9kZSBudW1iZXIgKi8KKyNkZWZpbmUgR0VU U1RBVFNVSUROVU1CRVIgICAgIDB4MDAwMDAwMyAvKiBHZXQgdGhlIF9udW1iZXJfIG9mIGlub2Rl cyAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWluZyBoaWRk ZW4gKi8KKyNkZWZpbmUgR0VUU1RBVFNVSUQgICAgICAgICAgIDB4MDAwMDAwNCAvKiBHZXQgdGhl IGlub2RlcyBoaWRkZW4gKi8KKworc3RydWN0IGhpZGUgeworCXN0cnVjdCBmaWxlICpmaWxwOyAg ICAgIC8qIHVzZWQgdG8gcmVjb3ZlciB0aGUgaW5vZGUncyBwYXRobmFtZSAqLworCWNoYXIgKnBh dGhuYW1lOyAgICAgICAgIC8qIGEgZnJlc2ggY2FjaGUgb2YgdGhlIGlub2RlJ3MgcGF0aG5hbWUg Ki8KKwl1bnNpZ25lZCBsb25nIHBhZ2U7CS8qIHBhZ2Ugb24gd2hpY2ggcGF0aG5hbWUgaGFzIGJl ZW4gY29waWVkICovCisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOyAgLyogYSBzaW1wbGUgZG91Ymx5 IGxpbmtlZCBsaXN0ICovCit9OworCitzdHJ1Y3QgZ29ib2xpbnV4X2hpZGVfc3RhdHMgeworCWlu dCBoaWRkZW5faW5vZGVzOyAgICAgIC8qIGhvdyBtYW55IGlub2RlcyB3ZSdyZSBoaWRpbmcgKi8K KwlpbnQgZmlsbGVkX3NpemU7ICAgICAgICAvKiBob3cgbWFueSBpbm9kZXMgd2UgZmlsbGVkIGlu IGhpZGRlbl9saXN0ICovCisJY2hhciAqKmhpZGRlbl9saXN0OyAgICAgLyogdGhlIGhpZGRlbiBs aXN0ICovCit9OworCitzdHJ1Y3QgZ29ib2xpbnV4X2hpZGUgeworCWlub190IGlub2RlOyAgICAg ICAgICAgICAgICAgICAgICAgIC8qIHRoZSBpbm9kZSBudW1iZXIgKi8KKwljb25zdCBjaGFyICpw YXRobmFtZTsgICAgICAgICAgICAgICAvKiB0aGUgcGF0aG5hbWUgYmVpbmcgc3VibWl0dGVkICov CisJY2hhciBzeW1saW5rOyAgICAgICAgICAgICAgICAgICAgICAgLyogaXMgaW5vZGUgYSBzeW1s aW5rPyAqLworCWNoYXIgb3BlcmF0aW9uOyAgICAgICAgICAgICAgICAgICAgIC8qIHRoZSBvcGVy YXRpb24gdG8gYmUgcGVyZm9ybWVkICovCisJc3RydWN0IGdvYm9saW51eF9oaWRlX3N0YXRzIHN0 YXRzOyAgLyogaG9sZHMgc3RhdGlzdGljcyAqLworfTsKKworc3RydWN0IGRlbnRyeSAqZ29ib2xp bnV4X2dldF9kZW50cnkoaW5vX3QgaW5vLCBjb25zdCBjaGFyICpwYXRobmFtZSk7CitpbnQgIGdv Ym9saW51eF9jb3VudF9oaWRkZW4oc3RydWN0IGdvYm9saW51eF9oaWRlICpoaWRlKTsKK2ludCAg Z29ib2xpbnV4X3Nob3dfaGlkZGVuKHN0cnVjdCBnb2JvbGludXhfaGlkZSAqaGlkZSk7CitpbnQg IGdvYm9saW51eF9oaWRlKGlub190IGlubywgc3RydWN0IHN1cGVyX2Jsb2NrICppbm9kZV9zYik7 CitpbnQgIGdvYm9saW51eF9pbm9kZV9hZGQoaW5vX3QgaW5vLCBjb25zdCBjaGFyICpwYXRobmFt ZSk7CitpbnQgIGdvYm9saW51eF9pbm9kZV9kZWwoaW5vX3QgaW5vKTsKK2ludCAgZ29ib2xpbnV4 X2ZzX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBnb2JvbGludXhfaGlkZSAqaGlk ZSk7CisKKyNlbmRpZiAgLyogQ09ORklHX0dPQk9ISURFX0ZTICovCisjZW5kaWYgIC8qIF9MSU5V WF9HT0JPTElOVVhfSCAqLwo= ------=_Part_47074_18654926.1154457516789--