From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============6281590379881211648==" MIME-Version: 1.0 From: Mark Wielaard To: elfutils-devel@lists.fedorahosted.org Subject: Re: [PATCH] libelf: find 1st section instead of assuming Date: Fri, 24 Jun 2016 15:49:49 +0200 Message-ID: <20160624134949.GB3056@blokker> In-Reply-To: 8760szudjk.fsf@linutronix.de --===============6281590379881211648== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi John, On Thu, Jun 23, 2016 at 05:31:59PM +0200, John Ogness wrote: > The situation occurs when adding sections to an existing ELF file that > has none. You can see that in: > = > libelf/elf_begin.c:file_read_elf() > = > When an ELF file is opened with ELF_C_RDWR or ELF_C_RDWR_MMAP, scnmax is > set to 1. That leads to the first section being placed on the second > section list when elf_newscn() is called. > = > Below is a relatively simple program to demonstrate this. Thanks. None of our existing tests cover this. So I adapted one of them and created a testcase that fails before your fix and succeeds after. It does the same test for all combinations of ELF class 32/64 and ELF_C_RDWR[_MMAP] to make sure all different code paths are hit. I also added a ChangeLog entry. Cheers, Mark --===============6281590379881211648== Content-Type: text/plain MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-libelf-find-1st-section-instead-of-assuming.patch" RnJvbSBiZWMxODMxNDY1MmVhYTZlMDM5MWJjZjFiMDFiYWNjNjJjOTU4ZjMwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKb2huIE9nbmVzcyA8am9obi5vZ25lc3NAbGludXRyb25peC5k ZT4KRGF0ZTogVGh1LCAyMyBKdW4gMjAxNiAxNjowMzo1OCArMDIwMApTdWJqZWN0OiBbUEFUQ0hd IGxpYmVsZjogZmluZCAxc3Qgc2VjdGlvbiBpbnN0ZWFkIG9mIGFzc3VtaW5nCgpXaGVuIGdldHRp bmcgc2VjdGlvbiBoZWFkZXJzIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZmlyc3Qgc2VjdGlvbgpp cyBvbiB0aGUgZmlyc3Qgc2VjdGlvbiBsaXN0LiBIb3dldmVyLCBpdCBpcyBwb3NzaWJsZSB0aGF0 IHRoZQpmaXJzdCBzZWN0aW9uIGxpc3Qgb25seSBjb250YWlucyB0aGUgemVyb3RoIHNlY3Rpb24s IGluIHdoaWNoCmNhc2UgZWl0aGVyIGlsbGVnYWwgbWVtb3J5IGFjY2VzcyBvY2N1cnMgb3IgZWxm X25leHRzY24oKQplcnJvbmVvdXNseSByZXR1cm5zIE5VTEwuCgpXaXRoIHRoaXMgcGF0Y2gsIGNo ZWNrcyBhcmUgYWRkZWQgdG8gYXZvaWQgdGhlIGlsbGVnYWwgbWVtb3J5CmFjY2VzcyBhbmQgKGlm IGF2YWlsYWJsZSkgdGhlIHNlY29uZCBzZWN0aW9uIGxpc3QgaXMgbG9va2VkIGF0CnRvIGZpbmQg dGhlIGZpcnN0IHNlY3Rpb24uCgpBIG5ldyB0ZXN0IGVtcHR5ZmlsZSBpcyBhZGRlZCB0aGF0IHRl c3RzIGFkZGluZyBhIHNlY3Rpb24gdG8KYW5kICJlbXB0eSIgRUxGIGZpbGUgMzIvNjQgY2xhc3Mg d2l0aCBFTEZfQ19SRFdSW19NTUFQXS4KClNpZ25lZC1vZmYtYnk6IEpvaG4gT2duZXNzIDxqb2hu Lm9nbmVzc0BsaW51dHJvbml4LmRlPgpTaWduZWQtb2ZmLWJ5OiBNYXJrIFdpZWxhYXJkIDxtandA cmVkaGF0LmNvbT4KLS0tCiBsaWJlbGYvQ2hhbmdlTG9nICAgICAgICAgIHwgICA2ICsKIGxpYmVs Zi9lbGYzMl91cGRhdGVudWxsLmMgfCAgMTEgKy0KIGxpYmVsZi9lbGZfbmV4dHNjbi5jICAgICAg fCAgMzggKysrLS0tLQogdGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICB8ICAgNyArKwogdGVzdHMv TWFrZWZpbGUuYW0gICAgICAgICB8ICAgNiArLQogdGVzdHMvZW1wdHlmaWxlLmMgICAgICAgICB8 IDI3NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiA2IGZp bGVzIGNoYW5nZWQsIDMyMCBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBt b2RlIDEwMDY0NCB0ZXN0cy9lbXB0eWZpbGUuYwoKZGlmZiAtLWdpdCBhL2xpYmVsZi9DaGFuZ2VM b2cgYi9saWJlbGYvQ2hhbmdlTG9nCmluZGV4IDY2ODY4N2QuLjBkOGRkNzMgMTAwNjQ0Ci0tLSBh L2xpYmVsZi9DaGFuZ2VMb2cKKysrIGIvbGliZWxmL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkgQEAK KzIwMTYtMDYtMjQgIEpvaG4gT2duZXNzICA8am9obi5vZ25lc3NAbGludXRyb25peC5kZT4KKwor CSogZWxmMzJfdXBkYXRlbnVsbC5jICh1cGRhdGVudWxsX3dybG9jayk6IEZpbmQgZmlyc3Qgc2Vj dGlvbi4KKwkqIGVsZl9uZXh0c2NuLmMgKGVsZl9uZXh0c2NuKTogV2hlbiBzY24gaXMgTlVMTCBz dGFydCBmcm9tIDB0aAorCXNlY3Rpb24uCisKIDIwMTYtMDQtMTQgIE1hcmsgV2llbGFhcmQgIDxt andAcmVkaGF0LmNvbT4KIAogCSogZWxmX2NvbXByZXNzLmMgKF9fbGliZWxmX2NvbXByZXNzKTog RnJlZSBvdXRfYnVmIGlmIGRlZmxhdGVJbml0CmRpZmYgLS1naXQgYS9saWJlbGYvZWxmMzJfdXBk YXRlbnVsbC5jIGIvbGliZWxmL2VsZjMyX3VwZGF0ZW51bGwuYwppbmRleCAwM2RlMDMyLi43NTA3 MDYyIDEwMDY0NAotLS0gYS9saWJlbGYvZWxmMzJfdXBkYXRlbnVsbC5jCisrKyBiL2xpYmVsZi9l bGYzMl91cGRhdGVudWxsLmMKQEAgLTE4MCw2ICsxODAsNyBAQCBfX2VsZncyKExJQkVMRkJJVFMs dXBkYXRlbnVsbF93cmxvY2spIChFbGYgKmVsZiwgaW50ICpjaGFuZ2VfYm9wLCBzaXplX3Qgc2hu dW0pCiAKICAgaWYgKHNobnVtID4gMCkKICAgICB7CisgICAgICBzdHJ1Y3QgRWxmX1NjbiAqc2Nu MSA9IE5VTEw7CiAgICAgICBFbGZfU2NuTGlzdCAqbGlzdDsKICAgICAgIGJvb2wgZmlyc3QgPSB0 cnVlOwogCkBAIC0xOTgsMTAgKzE5OSwxNiBAQCBfX2VsZncyKExJQkVMRkJJVFMsdXBkYXRlbnVs bF93cmxvY2spIChFbGYgKmVsZiwgaW50ICpjaGFuZ2VfYm9wLCBzaXplX3Qgc2hudW0pCiAgICAg ICAvKiBHbyBvdmVyIGFsbCBzZWN0aW9ucyBhbmQgZmluZCBvdXQgaG93IGxhcmdlIHRoZXkgYXJl LiAgKi8KICAgICAgIGxpc3QgPSAmZWxmLT5zdGF0ZS5FTEZXKGVsZixMSUJFTEZCSVRTKS5zY25z OwogCisgICAgICAvKiBGaW5kIHRoZSBmaXJzdCBzZWN0aW9uLiAqLworICAgICAgaWYgKGxpc3Qt PmNudCA+IDEpCisJc2NuMSA9ICZsaXN0LT5kYXRhWzFdOworICAgICAgZWxzZSBpZiAobGlzdC0+ bmV4dCAhPSBOVUxMKQorCXNjbjEgPSAmbGlzdC0+bmV4dC0+ZGF0YVswXTsKKwogICAgICAgLyog TG9hZCB0aGUgc2VjdGlvbiBoZWFkZXJzIGlmIG5lY2Vzc2FyeS4gIFRoaXMgbG9hZHMgdGhlCiAJ IGhlYWRlcnMgZm9yIGFsbCBzZWN0aW9ucy4gICovCi0gICAgICBpZiAobGlzdC0+ZGF0YVsxXS5z aGRyLkVMRlcoZSxMSUJFTEZCSVRTKSA9PSBOVUxMKQotCSh2b2lkKSBfX2VsZncyKExJQkVMRkJJ VFMsZ2V0c2hkcl93cmxvY2spICgmbGlzdC0+ZGF0YVsxXSk7CisgICAgICBpZiAoc2NuMSAhPSBO VUxMICYmIHNjbjEtPnNoZHIuRUxGVyhlLExJQkVMRkJJVFMpID09IE5VTEwpCisJKHZvaWQpIF9f ZWxmdzIoTElCRUxGQklUUyxnZXRzaGRyX3dybG9jaykgKHNjbjEpOwogCiAgICAgICBkbwogCXsK ZGlmZiAtLWdpdCBhL2xpYmVsZi9lbGZfbmV4dHNjbi5jIGIvbGliZWxmL2VsZl9uZXh0c2NuLmMK aW5kZXggNjJjYjg5MS4uZDJmM2U3YyAxMDA2NDQKLS0tIGEvbGliZWxmL2VsZl9uZXh0c2NuLmMK KysrIGIvbGliZWxmL2VsZl9uZXh0c2NuLmMKQEAgLTQxLDYgKzQxLDcgQEAKIEVsZl9TY24gKgog ZWxmX25leHRzY24gKEVsZiAqZWxmLCBFbGZfU2NuICpzY24pCiB7CisgIEVsZl9TY25MaXN0ICps aXN0OwogICBFbGZfU2NuICpyZXN1bHQgPSBOVUxMOwogCiAgIGlmIChlbGYgPT0gTlVMTCkKQEAg LTUwLDM0ICs1MSwyOSBAQCBlbGZfbmV4dHNjbiAoRWxmICplbGYsIEVsZl9TY24gKnNjbikKIAog ICBpZiAoc2NuID09IE5VTEwpCiAgICAgewotICAgICAgLyogSWYgbm8gc2VjdGlvbiBoYW5kbGUg aXMgZ2l2ZW4gcmV0dXJuIHRoZSBmaXJzdCAobm90IDB0aCkgc2VjdGlvbi4gICovCisgICAgICAv KiBJZiBubyBzZWN0aW9uIGhhbmRsZSBpcyBnaXZlbiByZXR1cm4gdGhlIGZpcnN0IChub3QgMHRo KSBzZWN0aW9uLgorCSBTZXQgc2NuIHRvIHRoZSAwdGggc2VjdGlvbiBhbmQgcGVyZm9ybSBuZXh0 c2NuLiAgKi8KICAgICAgIGlmIChlbGYtPmNsYXNzID09IEVMRkNMQVNTMzIKIAkgICB8fCAob2Zm c2V0b2YgKEVsZiwgc3RhdGUuZWxmMzIuc2NucykKIAkgICAgICAgPT0gb2Zmc2V0b2YgKEVsZiwg c3RhdGUuZWxmNjQuc2NucykpKQotCXsKLQkgIGlmIChlbGYtPnN0YXRlLmVsZjMyLnNjbnMuY250 ID4gMSkKLQkgICAgcmVzdWx0ID0gJmVsZi0+c3RhdGUuZWxmMzIuc2Nucy5kYXRhWzFdOwotCX0K KwlsaXN0ID0gJmVsZi0+c3RhdGUuZWxmMzIuc2NuczsKICAgICAgIGVsc2UKLQl7Ci0JICBpZiAo ZWxmLT5zdGF0ZS5lbGY2NC5zY25zLmNudCA+IDEpCi0JICAgIHJlc3VsdCA9ICZlbGYtPnN0YXRl LmVsZjY0LnNjbnMuZGF0YVsxXTsKLQl9CisJbGlzdCA9ICZlbGYtPnN0YXRlLmVsZjY0LnNjbnM7 CisKKyAgICAgIHNjbiA9ICZsaXN0LT5kYXRhWzBdOwogICAgIH0KICAgZWxzZQorICAgIGxpc3Qg PSBzY24tPmxpc3Q7CisKKyAgaWYgKHNjbiArIDEgPCAmbGlzdC0+ZGF0YVtsaXN0LT5jbnRdKQor ICAgIHJlc3VsdCA9IHNjbiArIDE7CisgIGVsc2UgaWYgKHNjbiArIDEgPT0gJmxpc3QtPmRhdGFb bGlzdC0+bWF4XQorCSAgICYmIChsaXN0ID0gbGlzdC0+bmV4dCkgIT0gTlVMTCkKICAgICB7Ci0g ICAgICBFbGZfU2NuTGlzdCAqbGlzdCA9IHNjbi0+bGlzdDsKLQotICAgICAgaWYgKHNjbiArIDEg PCAmbGlzdC0+ZGF0YVtsaXN0LT5jbnRdKQotCXJlc3VsdCA9IHNjbiArIDE7Ci0gICAgICBlbHNl IGlmIChzY24gKyAxID09ICZsaXN0LT5kYXRhW2xpc3QtPm1heF0KLQkgICAgICAgJiYgKGxpc3Qg PSBsaXN0LT5uZXh0KSAhPSBOVUxMKQotCXsKLQkgIC8qIElmIHRoZXJlIGlzIGFub3RoZXIgZWxl bWVudCBpbiB0aGUgc2VjdGlvbiBsaXN0IGl0IG11c3QKLQkgICAgIGhhdmUgYXQgbGVhc3Qgb25l IGVudHJ5LiAgKi8KLQkgIGFzc2VydCAobGlzdC0+Y250ID4gMCk7Ci0JICByZXN1bHQgPSAmbGlz dC0+ZGF0YVswXTsKLQl9CisgICAgICAvKiBJZiB0aGVyZSBpcyBhbm90aGVyIGVsZW1lbnQgaW4g dGhlIHNlY3Rpb24gbGlzdCBpdCBtdXN0CisgICAgICAgICBoYXZlIGF0IGxlYXN0IG9uZSBlbnRy eS4gICovCisgICAgICBhc3NlcnQgKGxpc3QtPmNudCA+IDApOworICAgICAgcmVzdWx0ID0gJmxp c3QtPmRhdGFbMF07CiAgICAgfQogCiAgIHJ3bG9ja191bmxvY2sgKGVsZi0+bG9jayk7CmRpZmYg LS1naXQgYS90ZXN0cy9DaGFuZ2VMb2cgYi90ZXN0cy9DaGFuZ2VMb2cKaW5kZXggYmNjMjk2Zi4u ZjU1NTIyNCAxMDA2NDQKLS0tIGEvdGVzdHMvQ2hhbmdlTG9nCisrKyBiL3Rlc3RzL0NoYW5nZUxv ZwpAQCAtMSwzICsxLDEwIEBACisyMDE2LTA2LTI0ICBNYXJrIFdpZWxhYXJkICA8bWp3QHJlZGhh dC5jb20+CisKKwkqIE1ha2VmaWxlLmFtIChjaGVja19QUk9HUkFNUyk6IEFkZCBlbXB0eWZpbGUu CisJKFRFU1RTKTogTGlrZXdpc2UuCisJKGVtcHR5ZmlsZV9MREFERCk6IE5ldyB2YXJpYWJsZS4K KwkqIGVtcHR5ZmlsZS5jOiBOZXcgdGVzdC4KKwogMjAxNi0wMi0wOSAgTWFyayBXaWVsYWFyZCAg PG1qd0ByZWRoYXQuY29tPgogCiAJKiB0ZXN0ZmlsZS1zMzkweC1oYXNoLWJvdGguYnoyOiBOZXcg dGVzdGZpbGUuCmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5hbSBiL3Rlc3RzL01ha2VmaWxl LmFtCmluZGV4IGZlZGNiMzkuLjkxNTI2YzAgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLmFt CisrKyBiL3Rlc3RzL01ha2VmaWxlLmFtCkBAIC01Myw3ICs1Myw3IEBAIGNoZWNrX1BST0dSQU1T ID0gYXJleHRyYWN0IGFyc3ltdGVzdCBuZXdmaWxlIHNhcmlkeCBzY25uYW1lcyBzZWN0aW9uZHVt cCBcCiAJCSAgYnVpbGRpZCBkZWxldGVkIGRlbGV0ZWQtbGliLnNvIGFnZ3JlZ2F0ZV9zaXplIHZk c29zeW1zIFwKIAkJICBnZXRzcmNfZGllIHN0cnB0ciBuZXdkYXRhIGVsZnN0cnRhYiBkd2ZsLXBy b2MtYXR0YWNoIFwKIAkJICBlbGZzaHBoZWhkciBlbGZzdHJtZXJnZSBkd2VsZmdudWNvbXByZXNz ZWQgZWxmZ2V0Y2hkciBcCi0JCSAgZWxmZ2V0emRhdGEgZWxmcHV0emRhdGEgenN0cnB0cgorCQkg IGVsZmdldHpkYXRhIGVsZnB1dHpkYXRhIHpzdHJwdHIgZW1wdHlmaWxlCiAKIGFzbV9URVNUUyA9 IGFzbS10c3QxIGFzbS10c3QyIGFzbS10c3QzIGFzbS10c3Q0IGFzbS10c3Q1IFwKIAkgICAgYXNt LXRzdDYgYXNtLXRzdDcgYXNtLXRzdDggYXNtLXRzdDkKQEAgLTEyNiw3ICsxMjYsOCBAQCBURVNU UyA9IHJ1bi1hcmV4dHJhY3Quc2ggcnVuLWFyc3ltdGVzdC5zaCBuZXdmaWxlIHRlc3Qtbmxpc3Qg XAogCXJ1bi1lbGZnZXRjaGRyLnNoIFwKIAlydW4tZWxmZ2V0emRhdGEuc2ggcnVuLWVsZnB1dHpk YXRhLnNoIHJ1bi16c3RycHRyLnNoIFwKIAlydW4tY29tcHJlc3MtdGVzdC5zaCBcCi0JcnVuLXJl YWRlbGYtemRlYnVnLnNoIHJ1bi1yZWFkZWxmLXpkZWJ1Zy1yZWwuc2gKKwlydW4tcmVhZGVsZi16 ZGVidWcuc2ggcnVuLXJlYWRlbGYtemRlYnVnLXJlbC5zaCBcCisJZW1wdHlmaWxlCiAKIGlmICFC SUFSQ0gKIGV4cG9ydCBFTEZVVElMU19ESVNBQkxFX0JJQVJDSCA9IDEKQEAgLTQ3Niw2ICs0Nzcs NyBAQCBlbGZnZXRjaGRyX0xEQUREID0gJChsaWJlbGYpICQobGliZHcpCiBlbGZnZXR6ZGF0YV9M REFERCA9ICQobGliZWxmKQogZWxmcHV0emRhdGFfTERBREQgPSAkKGxpYmVsZikKIHpzdHJwdHJf TERBREQgPSAkKGxpYmVsZikKK2VtcHR5ZmlsZV9MREFERCA9ICQobGliZWxmKQogCiAjIFdlIHdh bnQgdG8gdGVzdCB0aGUgbGliZWxmIGhlYWRlciBhZ2FpbnN0IHRoZSBzeXN0ZW0gZWxmLmggaGVh ZGVyLgogIyBEb24ndCBpbmNsdWRlIGFueSAtSSBDUFBGTEFHUy4KZGlmZiAtLWdpdCBhL3Rlc3Rz L2VtcHR5ZmlsZS5jIGIvdGVzdHMvZW1wdHlmaWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uNmQwODYyNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2VtcHR5ZmlsZS5j CkBAIC0wLDAgKzEsMjc3IEBACisvKiBUZXN0IHByb2dyYW0gZm9yIGFkZGluZyBhIHNlY3Rpb24g dG8gYW4gZW1wdHkgRUxGIGZpbGUuCisgICBDb3B5cmlnaHQgKEMpIDIwMTYgUmVkIEhhdCwgSW5j LgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgZWxmdXRpbHMuCisKKyAgIFRoaXMgZmlsZSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl cnNpb24uCisKKyAgIGVsZnV0aWxzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsIGJ1dAorICAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LiAgKi8KKworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorIyBpbmNsdWRlIDxjb25maWcuaD4KKyNl bmRpZgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUg PGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNp bmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgRUxGVVRJ TFNfSEVBREVSKGVsZikKKyNpbmNsdWRlIDxnZWxmLmg+CisKKworLyogSW5kZXggb2YgbGFzdCBz dHJpbmcgYWRkZWQuICBSZXR1cm5lZCBieSBhZGRfc3RyaW5nICgpLiAgKi8KK3N0YXRpYyBzaXpl X3Qgc3RyaWR4ID0gMDsKKworLyogQWRkcyBhIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgb2Zmc2V0 IGluIHRoZSBzZWN0aW9uLiAgKi8KK3N0YXRpYyBzaXplX3QKK2FkZF9zdHJpbmcgKEVsZl9TY24g KnNjbiwgY2hhciAqc3RyKQoreworICBzaXplX3QgbGFzdGlkeCA9IHN0cmlkeDsKKyAgc2l6ZV90 IHNpemUgPSBzdHJsZW4gKHN0cikgKyAxOworCisgIEVsZl9EYXRhICpkYXRhID0gZWxmX25ld2Rh dGEgKHNjbik7CisgIGlmIChkYXRhID09IE5VTEwpCisgICAgeworICAgICAgcHJpbnRmICgiY2Fu bm90IGNyZWF0ZSBkYXRhIFNIU1RSVEFCIHNlY3Rpb246ICVzXG4iLCBlbGZfZXJybXNnICgtMSkp OworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIGRhdGEtPmRfYnVmID0gc3RyOworICBkYXRh LT5kX3R5cGUgPSBFTEZfVF9CWVRFOworICBkYXRhLT5kX3NpemUgPSBzaXplOworICBkYXRhLT5k X2FsaWduID0gMTsKKyAgZGF0YS0+ZF92ZXJzaW9uID0gRVZfQ1VSUkVOVDsKKworICBzdHJpZHgg Kz0gc2l6ZTsKKyAgcHJpbnRmICgiYWRkX3N0cmluZzogJyVzJywgc3RyaWR4OiAlemQsIGxhc3Rp ZHg6ICV6ZFxuIiwKKwkgIHN0ciwgc3RyaWR4LCBsYXN0aWR4KTsKKyAgcmV0dXJuIGxhc3RpZHg7 Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja19lbGYgKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgY2xh c3MsIGludCB1c2VfbW1hcCkKK3sKKyAgcHJpbnRmICgiXG5mbmFtZTogJXNcbiIsIGZuYW1lKTsK KyAgc3RyaWR4ID0gMDsgLy8gUmVzZXQgc3RydGFiIHN0cmluZ3MgaW5kZXgKKworICBpbnQgZmQg PSBvcGVuIChmbmFtZSwgT19SRFdSIHwgT19DUkVBVCB8IE9fVFJVTkMsIDA2NjYpOworICBpZiAo ZmQgPT0gLTEpCisgICAgeworICAgICAgcHJpbnRmICgiY2Fubm90IG9wZW4gYCVzJzogJXNcbiIs IGZuYW1lLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBF bGYgKmVsZiA9IGVsZl9iZWdpbiAoZmQsIHVzZV9tbWFwID8gRUxGX0NfV1JJVEVfTU1BUCA6IEVM Rl9DX1dSSVRFLCBOVUxMKTsKKyAgaWYgKGVsZiA9PSBOVUxMKQorICAgIHsKKyAgICAgIHByaW50 ZiAoImNhbm5vdCBjcmVhdGUgRUxGIGRlc2NyaXB0b3I6ICVzXG4iLCBlbGZfZXJybXNnICgtMSkp OworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIC8vIENyZWF0ZSBhbiBFTEYgaGVhZGVyLgor ICBpZiAoZ2VsZl9uZXdlaGRyIChlbGYsIGNsYXNzKSA9PSAwKQorICAgIHsKKyAgICAgIHByaW50 ZiAoImNhbm5vdCBjcmVhdGUgRUxGIGhlYWRlcjogJXNcbiIsIGVsZl9lcnJtc2cgKC0xKSk7Cisg ICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgR0VsZl9FaGRyIGVoZHJfbWVtOworICBHRWxmX0Vo ZHIgKmVoZHIgPSBnZWxmX2dldGVoZHIgKGVsZiwgJmVoZHJfbWVtKTsKKyAgaWYgKGVoZHIgPT0g TlVMTCkKKyAgICB7CisgICAgICBwcmludGYgKCJjYW5ub3QgZ2V0IEVMRiBoZWFkZXI6ICVzXG4i LCBlbGZfZXJybXNnICgtMSkpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIC8vIEluaXRp YWxpemUgaGVhZGVyLgorICBlaGRyLT5lX2lkZW50W0VJX0RBVEFdID0gY2xhc3MgPT0gRUxGQ0xB U1M2NCA/IEVMRkRBVEEyTFNCIDogRUxGREFUQTJNU0I7CisgIGVoZHItPmVfaWRlbnRbRUlfT1NB QkldID0gRUxGT1NBQklfR05VOworICBlaGRyLT5lX3R5cGUgPSBFVF9OT05FOworICBlaGRyLT5l X21hY2hpbmUgPSBFTV9YODZfNjQ7CisgIGVoZHItPmVfdmVyc2lvbiA9IEVWX0NVUlJFTlQ7CisK KyAgaWYgKGdlbGZfdXBkYXRlX2VoZHIgKGVsZiwgZWhkcikgPT0gMCkKKyAgICB7CisgICAgICBw cmludGYgKCJjYW5ub3QgdXBkYXRlIEVMRiBoZWFkZXI6ICVzXG4iLCBlbGZfZXJybXNnICgtMSkp OworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIC8vIFdyaXRlIGV2ZXJ5dGhpbmcgdG8gZGlz ay4KKyAgaWYgKGVsZl91cGRhdGUgKGVsZiwgRUxGX0NfV1JJVEUpIDwgMCkKKyAgICB7CisgICAg ICBwcmludGYgKCJmYWlsdXJlIGluIGVsZl91cGRhdGUoV1JJVEUpOiAlc1xuIiwgZWxmX2Vycm1z ZyAoLTEpKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBpZiAoZWxmX2VuZCAoZWxmKSAh PSAwKQorICAgIHsKKyAgICAgIHByaW50ZiAoImZhaWx1cmUgaW4gZWxmX2VuZDogJXNcbiIsIGVs Zl9lcnJtc2cgKC0xKSk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgY2xvc2UgKGZkKTsK KworICAvKiBSZXJlYWQgdGhlIEVMRiBmcm9tIGRpc2sgbm93LiAgKi8KKyAgZmQgPSBvcGVuIChm bmFtZSwgT19SRFdSLCAwNjY2KTsKKyAgaWYgKGZkID09IC0xKQorICAgIHsKKyAgICAgIHByaW50 ZiAoImNhbm5vdCAocmUpb3BlbiBgJXMnOiAlc1xuIiwgZm5hbWUsIHN0cmVycm9yIChlcnJubykp OworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIGVsZiA9IGVsZl9iZWdpbiAoZmQsIHVzZV9t bWFwID8gRUxGX0NfUkRXUl9NTUFQIDogRUxGX0NfUkRXUiwgTlVMTCk7CisgIGlmIChlbGYgPT0g TlVMTCkKKyAgICB7CisgICAgICBwcmludGYgKCJjYW5ub3QgY3JlYXRlIEVMRiBkZXNjcmlwdG9y IHJlYWQtb25seTogJXNcbiIsIGVsZl9lcnJtc2cgKC0xKSk7CisgICAgICBleGl0ICgxKTsKKyAg ICB9CisKKyAgLy8gVGhlcmUgYXJlIG5vIHNlY3Rpb25zIHlldC4KKyAgaWYgKGVsZl9uZXh0c2Nu IChlbGYsIE5VTEwpICE9IE5VTEwpCisgICAgeworICAgICAgcHJpbnRmICgiRW1wdHkgZWxmIGhh ZCBhIHNlY3Rpb24/Pz9cbiIpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIC8vIENyZWF0 ZSBzdHJ0YWIgc2VjdGlvbi4KKyAgRWxmX1NjbiAqc2NuID0gZWxmX25ld3NjbiAoZWxmKTsKKyAg aWYgKHNjbiA9PSBOVUxMKQorICAgIHsKKyAgICAgIHByaW50ZiAoImNhbm5vdCBjcmVhdGUgc3Ry aW5ncyBzZWN0aW9uOiAlc1xuIiwgZWxmX2Vycm1zZyAoLTEpKTsKKyAgICAgIGV4aXQgKDEpOwor ICAgIH0KKworICAvLyBBZGQgYW4gZW1wdHkgc3RyaW5nIHRvIHRoZSB0YWJsZSBhcyBOVUwgZW50 cnkgZm9yIHNlY3Rpb24gemVyby4KKyAgYWRkX3N0cmluZyAoc2NuLCAiIik7CisKKyAgR0VsZl9T aGRyIHNoZHJfbWVtOworICBHRWxmX1NoZHIgKnNoZHIgPSBnZWxmX2dldHNoZHIgKHNjbiwgJnNo ZHJfbWVtKTsKKyAgaWYgKHNoZHIgPT0gTlVMTCkKKyAgICB7CisgICAgICBwcmludGYgKCJjYW5u b3QgZ2V0IGhlYWRlciBmb3Igc3RyaW5ncyBzZWN0aW9uOiAlc1xuIiwgZWxmX2Vycm1zZyAoLTEp KTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICBzaGRyLT5zaF90eXBlID0gU0hUX1NUUlRB QjsKKyAgc2hkci0+c2hfZmxhZ3MgPSAwOworICBzaGRyLT5zaF9hZGRyID0gMDsKKyAgc2hkci0+ c2hfbGluayA9IFNITl9VTkRFRjsKKyAgc2hkci0+c2hfaW5mbyA9IFNITl9VTkRFRjsKKyAgc2hk ci0+c2hfYWRkcmFsaWduID0gMTsKKyAgc2hkci0+c2hfZW50c2l6ZSA9IDA7CisgIHNoZHItPnNo X25hbWUgPSBhZGRfc3RyaW5nIChzY24sICIuc3RydGFiIik7CisKKyAgLy8gV2UgaGF2ZSB0byBz dG9yZSB0aGUgc2VjdGlvbiBzdHJ0YWIgaW5kZXggaW4gdGhlIEVMRiBoZWFkZXIuCisgIC8vIFNv IHNlY3Rpb25zIGhhdmUgYWN0dWFsIG5hbWVzLgorICBpbnQgbmR4ID0gZWxmX25keHNjbiAoc2Nu KTsKKyAgZWhkci0+ZV9zaHN0cm5keCA9IG5keDsKKworICBpZiAoZ2VsZl91cGRhdGVfZWhkciAo ZWxmLCBlaGRyKSA9PSAwKQorICAgIHsKKyAgICAgIHByaW50ZiAoImNhbm5vdCB1cGRhdGUgRUxG IGhlYWRlcjogJXNcbiIsIGVsZl9lcnJtc2cgKC0xKSk7CisgICAgICBleGl0ICgxKTsKKyAgICB9 CisKKyAgLy8gRmluaXNoZWQgc3RydGFiIHNlY3Rpb24sIHVwZGF0ZSB0aGUgaGVhZGVyLgorICBp ZiAoZ2VsZl91cGRhdGVfc2hkciAoc2NuLCBzaGRyKSA9PSAwKQorICAgIHsKKyAgICAgIHByaW50 ZiAoImNhbm5vdCB1cGRhdGUgU1RSVEFCIHNlY3Rpb24gaGVhZGVyOiAlc1xuIiwgZWxmX2Vycm1z ZyAoLTEpKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0KKworICAvLyBXcml0ZSBldmVyeXRoaW5n IHRvIGRpc2suCisgIGlmIChlbGZfdXBkYXRlIChlbGYsIEVMRl9DX1dSSVRFKSA8IDApCisgICAg eworICAgICAgcHJpbnRmICgiZmFpbHVyZSBpbiBlbGZfdXBkYXRlKFdSSVRFKTogJXNcbiIsIGVs Zl9lcnJtc2cgKC0xKSk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgaWYgKGVsZl9lbmQg KGVsZikgIT0gMCkKKyAgICB7CisgICAgICBwcmludGYgKCJmYWlsdXJlIGluIGVsZl9lbmQ6ICVz XG4iLCBlbGZfZXJybXNnICgtMSkpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIGNsb3Nl IChmZCk7CisKKyAgLy8gQW5kIHJlYWQgaXQgaW4gb25lIGxhc3QgdGltZS4KKyAgZmQgPSBvcGVu IChmbmFtZSwgT19SRE9OTFksIDA2NjYpOworICBpZiAoZmQgPT0gLTEpCisgICAgeworICAgICAg cHJpbnRmICgiY2Fubm90IG9wZW4gYCVzJyByZWFkLW9ubHk6ICVzXG4iLCBmbmFtZSwgc3RyZXJy b3IgKGVycm5vKSk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgZWxmID0gZWxmX2JlZ2lu IChmZCwgdXNlX21tYXAgPyBFTEZfQ19SRUFEX01NQVAgOiBFTEZfQ19SRUFELCBOVUxMKTsKKyAg aWYgKGVsZiA9PSBOVUxMKQorICAgIHsKKyAgICAgIHByaW50ZiAoImNhbm5vdCBjcmVhdGUgRUxG IGRlc2NyaXB0b3IgcmVhZC1vbmx5OiAlc1xuIiwgZWxmX2Vycm1zZyAoLTEpKTsKKyAgICAgIGV4 aXQgKDEpOworICAgIH0KKworICAvLyBJcyBvdXIgbmV3IHNlY3Rpb24gdGhlcmU/CisgIHNjbiA9 IGVsZl9uZXh0c2NuIChlbGYsIE5VTEwpOworICBpZiAoc2NuID09IE5VTEwpCisgICAgeworICAg ICAgcHJpbnRmICgiY2Fubm90IGdldCBuZXcgc2VjdGlvbjogJXNcbiIsIGVsZl9lcnJtc2cgKC0x KSk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgc2hkciA9IGdlbGZfZ2V0c2hkciAoc2Nu LCAmc2hkcl9tZW0pOworICBpZiAoc2hkciA9PSBOVUxMKQorICAgIHsKKyAgICAgIHByaW50ZiAo ImNhbm5vdCBnZXQgaGVhZGVyIGZvciBuZXcgc2VjdGlvbjogJXNcbiIsIGVsZl9lcnJtc2cgKC0x KSk7CisgICAgICBleGl0ICgxKTsKKyAgICB9CisKKyAgc2l6ZV90IHNoc3RybmR4OworICBpZiAo ZWxmX2dldHNoZHJzdHJuZHggKGVsZiwgJnNoc3RybmR4KSA8IDApCisgICAgeworICAgICAgcHJp bnRmICgiZWxmX2dldHNoZHJzdHJuZHg6ICVzXG4iLCBlbGZfZXJybXNnICgtMSkpOworICAgICAg ZXhpdCAoMSk7CisgICAgfQorCisgIGNvbnN0IGNoYXIgKnNuYW1lID0gZWxmX3N0cnB0ciAoZWxm LCBzaHN0cm5keCwgc2hkci0+c2hfbmFtZSk7CisgIGlmIChzbmFtZSA9PSBOVUxMIHx8IHN0cmNt cCAoc25hbWUsICIuc3RydGFiIikgIT0gMCkKKyAgICB7CisgICAgICBwcmludGYgKCJCYWQgc2Vj dGlvbiBuYW1lOiAlc1xuIiwgc25hbWUpOworICAgICAgZXhpdCAoMSk7CisgICAgfQorCisgIGlm IChlbGZfZW5kIChlbGYpICE9IDApCisgICAgeworICAgICAgcHJpbnRmICgiZmFpbHVyZSBpbiBl bGZfZW5kOiAlc1xuIiwgZWxmX2Vycm1zZyAoLTEpKTsKKyAgICAgIGV4aXQgKDEpOworICAgIH0K KworICBjbG9zZSAoZmQpOworCisgIHVubGluayAoZm5hbWUpOworfQorCitpbnQKK21haW4gKGlu dCBhcmdjIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKKyAgICAgIGNoYXIgKmFyZ3ZbXSBfX2F0 dHJpYnV0ZV9fICgodW51c2VkKSkpCit7CisgIGVsZl92ZXJzaW9uIChFVl9DVVJSRU5UKTsKKwor ICBjaGVja19lbGYgKCJlbXB0eS5lbGYuMzIiLCBFTEZDTEFTUzMyLCAwKTsKKyAgY2hlY2tfZWxm ICgiZW1wdHkuZWxmLjMyLm1tYXAiLCBFTEZDTEFTUzMyLCAxKTsKKyAgY2hlY2tfZWxmICgiZW1w dHkuZWxmLjY0IiwgRUxGQ0xBU1M2NCwgMCk7CisgIGNoZWNrX2VsZiAoImVtcHR5LmVsZi42NC5t bWFwIiwgRUxGQ0xBU1M2NCwgMSk7CisKKyAgcmV0dXJuIDA7Cit9Ci0tIAoyLjcuNAoK --===============6281590379881211648==--