From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sc8-sf-mx1-b.sourceforge.net ([10.3.1.11] helo=sc8-sf-mx1.sourceforge.net) by sc8-sf-list1.sourceforge.net with esmtp (Cipher TLSv1:DES-CBC3-SHA:168) (Exim 3.31-VA-mm2 #1 (Debian)) id 1A9GGq-0003JR-00 for ; Mon, 13 Oct 2003 20:54:52 -0700 Received: from bay7-f67.bay7.hotmail.com ([64.4.11.67] helo=hotmail.com) by sc8-sf-mx1.sourceforge.net with esmtp (Exim 4.22) id 1A9GGp-0004aC-Sa for User-mode-linux-devel@lists.sourceforge.net; Mon, 13 Oct 2003 20:54:51 -0700 From: "Steve Schmidtke" Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_1749_266a_fc3" Message-ID: Subject: [uml-devel] filemap feature 2.4.22-5um Sender: user-mode-linux-devel-admin@lists.sourceforge.net Errors-To: user-mode-linux-devel-admin@lists.sourceforge.net List-Help: List-Post: List-Subscribe: , List-Id: The user-mode Linux development list List-Unsubscribe: , List-Archive: Date: Tue, 14 Oct 2003 03:54:18 +0000 To: User-mode-linux-devel@lists.sourceforge.net This is a multi-part message in MIME format. ------=_NextPart_000_1749_266a_fc3 Content-Type: text/plain; format=flowed This patch adds filemap support to 2.4.22-5um. The function of this patch is an awkard and convoluted solution to an arcane problem. Unless you know this is what you need, you may just want to skip this post. Filemaping is a method of mapping open file descriptors to arbitrary file names within a UML. Once a file name has been mapped, all UML file requests on that name act upon the open file descriptor. The main purpose of filemap is to support empty chroot environments, allowing the UML to access files, such as /proc/cpuinfo and virtual memory files, without requiring those files to be present within the chroot directory. The filemap boot string syntax lookes like this: filemap=,
There are two tables available, "file" and "vm". "file" type filemaps handle fd/filename pairs, while "vm" type filemaps handle pools of fd's that represent virtual memory files. For example, a "file" table boot string may look like this: filemap=file,12,/proc/cpuinfo which redirects the UML to file descriptor 12 when accessing the file /proc/cpuinfo. In this case, file descriptor 12 must be opened beforehand, possibly like this on the UMLs command line: 12/dev/shm/vm1 21<>/dev/shm/vm2 This invocation tells the chrooted UML to use file descriptors 20 and 21 for (some of) its virtual memory files. How do you know how many to specify? The number is proportional to how much memory you have given the UML. Start with booting the UML with a bunch of zero length files, and review how many end up with non-zero file sizes. Adjust to suit. Note the above examples read+write redirection on the vm files. umlwrap -bind=22,/dev/shm/mconsole1 -dir=/home/uml -- \ /bin/linux mem=48M uml_dir=/uml/ umid=um1 filemap=22,/uml/um1/pid \ 22/home/uml/cow-$$.cow \ filemap=file,15,/uml/um$$/mconsole \ filemap=file,16,/uml/um$$/pid 16/dev/shm/vm-$$.0 21<>/dev/shm/vm-$$.1 \ 22<>/dev/shm/vm-$$.2 23<>/dev/shm/vm-$$.3 \ Ugly, isn't it. If you find a nicer way to do this let me know. Notice how networking is carried out here via the daemon transport, connecting to the /tmp/uml.ctl socket run by uml_switch. Your mileage may vary. Other filemap issues I know about: - Reboots may not work as expected. Best is to shutdown and restart. - A given file may be corrupted if access to it is not serialized. - Hostfs accessed files are NOT filemapped. See above. - Directories cannot be filemapped. - Vm files are visible and persistent! Bug or feature: you decide. - Notify feature of mconsole is not supported. Why so complicated? - You can bet this patch won't make it into Jeff's official source tree. I'm cool with that. Enjoy! Steve Schmidtke _________________________________________________________________ The new MSN 8: advanced junk mail protection and 2 months FREE* http://join.msn.com/?page=features/junkmail ------=_NextPart_000_1749_266a_fc3 Content-Type: application/octet-stream; name="filemap5-01.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="filemap5-01.diff" ZGlmZiAtTmF1ciBsaW51eC0yLjQuMjItNXVtLm9yaWcvYXJjaC91bS9pbmNs dWRlL2ZpbGVtYXAuaCBsaW51eC0yLjQuMjItNXVtLm5ldy9hcmNoL3VtL2lu Y2x1ZGUvZmlsZW1hcC5oCi0tLSBsaW51eC0yLjQuMjItNXVtLm9yaWcvYXJj aC91bS9pbmNsdWRlL2ZpbGVtYXAuaAlXZWQgRGVjIDMxIDE5OjAwOjAwIDE5 NjkKKysrIGxpbnV4LTIuNC4yMi01dW0ubmV3L2FyY2gvdW0vaW5jbHVkZS9m aWxlbWFwLmgJVGh1IFNlcCAyNSAyMDoyOToxNyAyMDAzCkBAIC0wLDAgKzEs MTMgQEAKKy8qIAorICogQ29weXJpZ2h0IChDKSAyMDAzIFN0ZXZlIFNjaG1p ZHRrZSAKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaWZu ZGVmIF9fRklMRU1BUF9IX18KKyNkZWZpbmUgX19GSUxFTUFQX0hfXworCitl eHRlcm4gaW50IGZpbGVtYXBfYWNjZXNzKGNvbnN0IGNoYXIqIHRhYmxlX25h bWUsIGNvbnN0IGNoYXIqIGZpbGVfbmFtZSk7CitleHRlcm4gaW50IGZpbGVt YXBfYXF1aXJlKGNvbnN0IGNoYXIqIHRhYmxlX25hbWUsIGNvbnN0IGNoYXIq IGZpbGVfbmFtZSk7CitleHRlcm4gaW50IGZpbGVtYXBfcmVsZWFzZShjb25z dCBjaGFyKiB0YWJsZV9uYW1lLCBpbnQgZmQpOworCisjZW5kaWYKZGlmZiAt TmF1ciBsaW51eC0yLjQuMjItNXVtLm9yaWcvYXJjaC91bS9rZXJuZWwvTWFr ZWZpbGUgbGludXgtMi40LjIyLTV1bS5uZXcvYXJjaC91bS9rZXJuZWwvTWFr ZWZpbGUKLS0tIGxpbnV4LTIuNC4yMi01dW0ub3JpZy9hcmNoL3VtL2tlcm5l bC9NYWtlZmlsZQlUaHUgU2VwIDI1IDE5OjI5OjQ1IDIwMDMKKysrIGxpbnV4 LTIuNC4yMi01dW0ubmV3L2FyY2gvdW0va2VybmVsL01ha2VmaWxlCVRodSBT ZXAgMjUgMjA6Mjk6MTcgMjAwMwpAQCAtMTEsNyArMTEsNyBAQAogCXNpZ2lv X3VzZXIubyBzaWdpb19rZXJuLm8gc2lnbmFsX2tlcm4ubyBzaWduYWxfdXNl ci5vIHNtcC5vIFwKIAlzeXNjYWxsX2tlcm4ubyBzeXNjYWxsX3VzZXIubyBz eXNycS5vIHN5c19jYWxsX3RhYmxlLm8gdGVtcGZpbGUubyBcCiAJdGltZS5v IHRpbWVfa2Vybi5vIHRsYi5vIHRyYXBfa2Vybi5vIHRyYXBfdXNlci5vIHVh Y2Nlc3NfdXNlci5vIFwKLQl1bV9hcmNoLm8gdW1pZC5vIHVzZXJfc3ltcy5v IHVzZXJfdXRpbC5vCisJdW1fYXJjaC5vIHVtaWQubyB1c2VyX3N5bXMubyB1 c2VyX3V0aWwubyBmaWxlbWFwLm8KIAogb2JqLSQoQ09ORklHX0JMS19ERVZf SU5JVFJEKSArPSBpbml0cmRfa2Vybi5vIGluaXRyZF91c2VyLm8KIG9iai0k KENPTkZJR19HUFJPRikgKz0gZ3Byb2Zfc3ltcy5vCkBAIC0yOSw3ICsyOSw3 IEBACiAjIGJ1aWxkaW5nIGFueXRoaW5nIGluIGV4cG9ydC1vYmpzCiAKIFVT RVJfT0JKUyA9ICQoZmlsdGVyICVfdXNlci5vLCQob2JqLXkpKSAkKHVzZXIt b2Jqcy15KSBjb25maWcubyBoZWxwZXIubyBcCi0JcHJvY2Vzcy5vIHRlbXBm aWxlLm8gdGltZS5vIHVtaWQubyB1c2VyX3V0aWwubyAKKwlwcm9jZXNzLm8g dGVtcGZpbGUubyB0aW1lLm8gdW1pZC5vIHVzZXJfdXRpbC5vIGZpbGVtYXAu bwogCiBETU9EVUxFUy0kKENPTkZJR19NT0RVTEVTKSA9IC1EX19DT05GSUdf TU9EVUxFU19fCiBETU9EVkVSU0lPTlMtJChDT05GSUdfTU9EVkVSU0lPTlMp ID0gLURfX0NPTkZJR19NT0RWRVJTSU9OU19fCmRpZmYgLU5hdXIgbGludXgt Mi40LjIyLTV1bS5vcmlnL2FyY2gvdW0va2VybmVsL2ZpbGVtYXAuYyBsaW51 eC0yLjQuMjItNXVtLm5ldy9hcmNoL3VtL2tlcm5lbC9maWxlbWFwLmMKLS0t IGxpbnV4LTIuNC4yMi01dW0ub3JpZy9hcmNoL3VtL2tlcm5lbC9maWxlbWFw LmMJV2VkIERlYyAzMSAxOTowMDowMCAxOTY5CisrKyBsaW51eC0yLjQuMjIt NXVtLm5ldy9hcmNoL3VtL2tlcm5lbC9maWxlbWFwLmMJVGh1IFNlcCAyNSAy MDoyOToxNyAyMDAzCkBAIC0wLDAgKzEsNjU1IEBACisvKiAKKyAqIENvcHly aWdodCAoQykgMjAwMyBTdGV2ZSBTY2htaWR0a2UgCisgKiBMaWNlbnNlZCB1 bmRlciB0aGUgR1BMCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPiAKKyNp bmNsdWRlIDxzdHJpbmcuaD4gCisjaW5jbHVkZSA8dW5pc3RkLmg+IAorI2lu Y2x1ZGUgPGVycm5vLmg+IAorI2luY2x1ZGUgImluaXQuaCIKKyNpbmNsdWRl ICJzeXMvdHlwZXMuaCIKKyNpbmNsdWRlICJ1bmlzdGQuaCIKKyNpbmNsdWRl ICJmY250bC5oIgorCisjZGVmaW5lIFNUUkZEX0lTRU5EKGMpICAoKGMgPT0g J1wwJykgfHwgKGMgPT0gJywnKSB8fCAoYyA9PSAnLScpKQorCitzdHJ1Y3Qg ZmlsZW1hcF9lbnRyeSB7CisJc3RydWN0IGZpbGVtYXBfZW50cnkqIG5leHQ7 CisJY2hhciogbmFtZTsKKwlpbnQgZmQ7CisJaW50IGNvdW50OworCWludCBj ZjsgLyogaW5pdGlhbCBjbG9zZSBvbiBleGVjIGZsYWcgKi8KK307ICAKKwor c3RydWN0IGZpbGVtYXBfb3BzIHsKKwlpbnQgKCpwYXJzZSkodm9pZCogdGFi bGUsIGNoYXIqIHN0cik7CisJaW50ICgqYWNjZXNzKSh2b2lkKiB0YWJsZSwg Y2hhciogZmlsZW5hbWUpOworCWludCAoKmFxdWlyZSkodm9pZCogdGFibGUs IGNoYXIqIGZpbGVuYW1lKTsKKwlpbnQgKCpyZWxlYXNlKSh2b2lkKiB0YWJs ZSwgaW50IGZkKTsKKwlpbnQgKCpzaHV0ZG93bikodm9pZCogdGFibGUpOwor fTsKKworc3RydWN0IGZpbGVtYXBfdGFibGUgeworCWNoYXIqIG5hbWU7CisJ c3RydWN0IGZpbGVtYXBfZW50cnkqIGVudHJpZXM7CisJc3RydWN0IGZpbGVt YXBfb3BzKiBvcHM7Cit9OworCitzdGF0aWMgc3RydWN0IGZpbGVtYXBfZW50 cnkqIGZpbGVtYXBfZW50cnlfYWxsb2Modm9pZCkKK3sKKwlyZXR1cm4obWFs bG9jKHNpemVvZihzdHJ1Y3QgZmlsZW1hcF9lbnRyeSkpKTsKK30KKworLyog RklYTUU6IHRoZSBvc18qIHZlcnNpb25zIG9mIHRoZXNlIHJvdXRpbmVzIGJl bG93IG1heSByZWN1cnNlPyAqLworCitzdGF0aWMgdm9pZCBzZWVrX2ZpbGUo aW50IGZkLCBvZmZfdCBvZmZzZXQpCit7CisJbHNlZWsoZmQsIG9mZnNldCwg U0VFS19TRVQpOworfQorCitzdGF0aWMgaW50IGdldF9jbG9zZV9vbl9leGVj KGludCBmZCwgaW50KiBjbG9zZV9vbl9leGVjKQoreworCWludCByZXQ7CisK KwlkbyB7CisJCXJldCA9IGZjbnRsKGZkLCBGX0dFVEZEKTsKKwl9IHdoaWxl KHJldDwwICYmIGVycm5vPT1FSU5UUikgOworCisJaWYocmV0IDwgMCkKKwkJ cmV0dXJuKC1lcnJubyk7CisKKwkqY2xvc2Vfb25fZXhlYyA9IChyZXQmRkRf Q0xPRVhFQykgPyAxIDogMDsKKworCXJldHVybihyZXQpOworfQorCitzdGF0 aWMgaW50IHNldF9jbG9zZV9vbl9leGVjKGludCBmZCwgaW50IGNsb3NlX29u X2V4ZWMpCit7CisJaW50IGZsYWcsIGVycjsKKworCWlmKGNsb3NlX29uX2V4 ZWMpIGZsYWcgPSBGRF9DTE9FWEVDOworCWVsc2UgZmxhZyA9IDA7CisKKwlk byB7CisJCWVyciA9IGZjbnRsKGZkLCBGX1NFVEZELCBmbGFnKTsKKwl9IHdo aWxlKGVycjwwICYmIGVycm5vPT1FSU5UUikgOworCisJaWYoZXJyIDwgMCkK KwkJcmV0dXJuKC1lcnJubyk7CisKKwlyZXR1cm4oZXJyKTsKK30KKworLyoK KyAqIEFkZCBhIGZkIChhbmQgZmlsZW5hbWUpIHRvIGEgdGFibGUgaW4gdGhl IGRiLgorICovCitzdGF0aWMgaW50IGZpbGVtYXBfYWRkX2VudHJ5KHN0cnVj dCBmaWxlbWFwX3RhYmxlKiB0YWJsZSwKKyAgICBpbnQgZmRlc2MsIGNoYXIq IGZpbGVfbmFtZSkKK3sKKwlzdHJ1Y3QgZmlsZW1hcF9lbnRyeSogZW50cnk7 CisJc3RydWN0IGZpbGVtYXBfZW50cnkqIGR1cDsKKwlpbnQgY29lZmxhZzsK KwlpbnQgZXJyOworCisJaWYoKHRhYmxlID09IE5VTEwpIHx8IChmZGVzYyA8 IDApKSB7CisJCXJldHVybigtRUlOVkFMKTsKKwl9CisKKwlkdXAgPSBOVUxM OworCWZvcihlbnRyeSA9IHRhYmxlLT5lbnRyaWVzOyBlbnRyeTsgZW50cnkg PSBlbnRyeS0+bmV4dCkgeworCQlpZighZHVwICYmIChmZGVzYyA9PSBlbnRy eS0+ZmQpKSB7CisJCQlkdXAgPSBlbnRyeTsKKwkJfQorCX0KKworCWlmKGR1 cCkgeworCQljb2VmbGFnID0gZHVwLT5jZjsKKwl9IGVsc2UgeworCQllcnIg PSBnZXRfY2xvc2Vfb25fZXhlYyhmZGVzYywgJmNvZWZsYWcpOworCQlpZihl cnIgPCAwKSB7CisJCQlwcmludGsoImZpbGVtYXBfYWRkX2VudHJ5OiBnZXQg Y2xvc2Utb24tZXhlYyBmbGFnIgorCQkJCSIgZmFpbGVkIGVycm5vPSVkIGZk PSVkIG5hbWU9JXNcbiIsCisJCQkJZXJyLCBmZGVzYywgZmlsZV9uYW1lKTsK KwkJCXJldHVybihlcnIpOworCQl9CisKKwkJLyogYnkgZGVmYXVsdCwgZXhl YyBjYWxscyBzaG91bGQgY2xvc2UgZmlsZW1hcHMgKi8gCisJCWVyciA9IHNl dF9jbG9zZV9vbl9leGVjKGZkZXNjLCAxKTsKKwkJaWYoZXJyIDwgMCkgewor CQkJcHJpbnRrKCJmaWxlbWFwX2FkZF9lbnRyeTogc2V0IGNsb3NlLW9uLWV4 ZWMgZmxhZyIKKwkJCQkiIGZhaWxlZCBlcnJubz0lZCBmZD0lZCBuYW1lPSVz XG4iLAorCQkJCWVyciwgZmRlc2MsIGZpbGVfbmFtZSk7CisJCQlyZXR1cm4o ZXJyKTsKKwkJfQorCX0KKworCWVudHJ5ID0gZmlsZW1hcF9lbnRyeV9hbGxv YygpOworCWlmKGVudHJ5ID09IE5VTEwpIHsKKwkJcHJpbnRrKCJmaWxlbWFw X2FkZF9lbnRyeTogYWxsb2MgZmFpbGVkIGZkPSVkLCBuYW1lPSVzXG4iLAor CQkJZmRlc2MsIGZpbGVfbmFtZSk7CisJCXJldHVybigtRU5PTUVNKTsKKwl9 CisKKwlwcmludGsoImluc3RhbGxpbmcgZmlsZW1hcDogdGFibGU9JXMgZmQ9 JWQsIGMtby1lPSVkIG5hbWU9JXNcbiIsCisJCXRhYmxlLT5uYW1lLCBmZGVz YywgY29lZmxhZywgZmlsZV9uYW1lKTsKKworCSplbnRyeSA9ICgoc3RydWN0 IGZpbGVtYXBfZW50cnkpIHsKKwkJCS5uZXh0CT0gdGFibGUtPmVudHJpZXMs CisJCQkubmFtZQk9IGZpbGVfbmFtZSwKKwkJCS5mZAk9IGZkZXNjLAorCQkJ LmNvdW50CT0gMCwKKwkJCS5jZgk9IGNvZWZsYWcKKwl9KTsKKworCXRhYmxl LT5lbnRyaWVzID0gZW50cnk7CisKKwlyZXR1cm4oMCk7Cit9CisKKy8qCisg KiBGaW5kIHRoZSBtYXRjaGluZyBmaWxlbmFtZSBpbiB0aGUgZGIgYW5kIHJl dHVybiB0aGUgZmlsZW1hcCBlbnRyeS4gCisgKi8KK3N0YXRpYyBzdHJ1Y3Qg ZmlsZW1hcF9lbnRyeSogZmlsZW1hcF9sb29rdXBfbmFtZShzdHJ1Y3QgZmls ZW1hcF90YWJsZSogdGFibGUsCisgICAgY29uc3QgY2hhciogZmlsZV9uYW1l KQoreworCXN0cnVjdCBmaWxlbWFwX2VudHJ5KiBlbnRyeTsKKworCWZvcihl bnRyeSA9IHRhYmxlLT5lbnRyaWVzOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+ bmV4dCkgeworCQlpZihzdHJjbXAoZmlsZV9uYW1lLCBlbnRyeS0+bmFtZSkg PT0gMCkgeworCQkJcmV0dXJuKGVudHJ5KTsKKwkJfQorCX0KKworCXJldHVy bihOVUxMKTsKK30KKworLyoKKyAqIEZpbmQgYSBmcmVzaCBmaWxlIGRlc2Ny aXB0b3IgaW4gYSBmaWxlIHBvb2wKKyAqLworc3RhdGljIHN0cnVjdCBmaWxl bWFwX2VudHJ5KiBmaWxlbWFwX2xvb2t1cF91bnVzZWQoc3RydWN0IGZpbGVt YXBfdGFibGUqIHRhYmxlKQoreworCXN0cnVjdCBmaWxlbWFwX2VudHJ5KiBl bnRyeTsKKworCWZvcihlbnRyeSA9IHRhYmxlLT5lbnRyaWVzOyBlbnRyeTsg ZW50cnkgPSBlbnRyeS0+bmV4dCkgeworCQlpZihlbnRyeS0+Y291bnQgPT0g MCkgeworCQkJcmV0dXJuKGVudHJ5KTsKKwkJfQorCX0KKworCXJldHVybihO VUxMKTsKK30KKworLyoKKyAqIEZpbmQgYSBtYXRjaGluZyBmZCBpbiB0aGUg ZGIgYW5kIHJldHVybiBhIGZpbGVtYXAgZW50cnkuIAorICovCitzdGF0aWMg c3RydWN0IGZpbGVtYXBfZW50cnkqIGZpbGVtYXBfbG9va3VwX2ZkKHN0cnVj dCBmaWxlbWFwX3RhYmxlKiB0YWJsZSwKKyAgICBjb25zdCBpbnQgZmQpCit7 CisJc3RydWN0IGZpbGVtYXBfZW50cnkqIGVudHJ5OworCisJZm9yKGVudHJ5 ID0gdGFibGUtPmVudHJpZXM7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0 KSB7CisJCWlmKGZkID09IGVudHJ5LT5mZCkgeworCQkJcmV0dXJuKGVudHJ5 KTsKKwkJfQorCX0KKworCXJldHVybihOVUxMKTsKK30KKworLyoKKyAqIHNl dCB0aGUgZmlsZW1hcHBlZCBmaWxlIGFzIHByaXN0aW5lIGFzIHBvc3NpYmxl CisgKi8KK3N0YXRpYyBpbnQgZmlsZW1hcF9zY3J1YihzdHJ1Y3QgZmlsZW1h cF9lbnRyeSogZW50cnkpCit7CisJaW50IGVycjsKKworCWVyciA9IHNldF9j bG9zZV9vbl9leGVjKGVudHJ5LT5mZCwgZW50cnktPmNmKTsKKwlpZihlcnIg PCAwKSB7CisJCXByaW50aygiZmlsZW1hcF9zY3J1YjogcmVzZXQgY2xvc2Ut b24tZXhlYyBmbGFnIGZhaWxlZCIKKwkJCSIgZXJyPSVkIGZkPSVkIGMtby1l PSVkIG5hbWU9JXNcbiIsCisJCQllcnIsIGVudHJ5LT5mZCwgZW50cnktPmNm LCBlbnRyeS0+bmFtZSk7CisJCXJldHVybihlcnIpOworCX0KKworCXJldHVy bigwKTsKK30KKworLyogCisgKiBSZXR1cm4gYSBkaXNwb3NhYmxlIGZpbGUg ZGVzY3JpcHRvciBmb3IgdGhlIG9uZSBwcm92aWRlZC4KKyAqIGR1cCgpIGlz IHVzZWQgdG8gZ3VhcmQgYWdhaW5zdCBhIGNsb3NlIG9mIHRoZSBmZCB0aGF0 IHdhcyBwYXNzZWQKKyAqIGluLiAgVGhpcyBpcyBub3QgaWRlYWwgYXMgY29u Y3VycmVudCB1c2VzIG9mIHRoZSBzYW1lIGZpbGUgbWF5CisgKiB3cmVhayBo YXZvYyB3aXRoIHRoZSBzaGFyZWQgcG9zaXRpb24gcG9pbnRlciwgZXRjLiBi ZXR3ZWVuIHRoZQorICogZHVwbGljYXRlZCBmaWxlIGRlc2NyaXB0b3JzLgor ICovIAorc3RhdGljIGludCBmaWxlbWFwX25ld2ZkKGludCBvbGRmZCkKK3sK KwlpbnQgbmV3ZmQsIGVycjsKKworCWlmKG9sZGZkIDwgMCkKKwkJcmV0dXJu KC1FSU5WQUwpOworCisJZG8geworCQluZXdmZCA9IGR1cChvbGRmZCk7CisJ fSB3aGlsZShuZXdmZDwwICYmIGVycm5vPT1FSU5UUikgOworCisJaWYobmV3 ZmQgPCAwKQorCQlyZXR1cm4oLWVycm5vKTsKKworCWVyciA9IHNldF9jbG9z ZV9vbl9leGVjKG5ld2ZkLCAwKTsKKwlpZihlcnIgPCAwKSB7CisJCXByaW50 aygiZmlsZW1hcF9uZXdmZDogY2xlYXIgY2xvc2Utb24tZXhlYyBmbGFnIGZh aWxlZCIKKwkJCSIgZXJyPSVkIGZkPSVkXG4iLCBlcnIsIG5ld2ZkKTsKKwkJ cmV0dXJuKGVycik7CisJfQorCisJcmV0dXJuKG5ld2ZkKTsKK30KKworLyoK KyAqIHBhcnNlIHRoZSBzZXR1cCBzdHJpbmcgZm9yIGEgZmlsZSBkZXNjcmlw dG9yIChudW1iZXIpIGFuZAorICogcmV0dXJuICogYSBwb2ludGVyIG9uIHRo ZSBuZXh0IGFyZ3VtZW50IGluIHRoZSBzZXR1cCBzdHJpbmcuCisgKi8KK3N0 YXRpYyBfX2luaXQgY2hhciogc2V0X2ZkZXNjKGNoYXIqIHN0ciwgaW50KiBm ZCkKK3sKKwljaGFyKiBlbmQ7CisJaW50IG51bTsKKworCWlmKChzdHI9PU5V TEwpIHx8ICgqc3RyPT0nXDAnKSkKKwkJcmV0dXJuKE5VTEwpOworCisJaWYo KnN0ciA9PSAnLCcpCisJCXJldHVybihzdHIpOworCisJbnVtID0gc3RydG91 bChzdHIsICZlbmQsIDEwKTsKKwlpZigoZW5kID09IHN0cikgfHwgIVNUUkZE X0lTRU5EKCplbmQpKSB7CisJCXByaW50aygiZmlsZW1hcDogc2V0X2ZkIC0g aW52YWxpZCB2YWx1ZSAnJXMnXG4iLCBzdHIpOworCQlnb3RvIGVuZG91dDsK Kwl9CisKKwkqZmQgPSBudW07CisKK2VuZG91dDoKKwl3aGlsZSghU1RSRkRf SVNFTkQoKmVuZCkpIGVuZCsrOworCWlmKCplbmQgPT0gJ1wwJykKKwkJIHJl dHVybihOVUxMKTsKKworCXJldHVybihlbmQpOworfQorCisKKy8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAq KiogUm91dGluZXMgdG8gc3VwcG9ydCAncG9vbCcgdHlwZSBmaWxlbWFwcyAq KioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisKK3N0YXRpYyBpbnQgZm1fcG9vbF9wYXJzZSh2b2lkKiBk YXRhLCBjaGFyKiBzdHIpCit7CisJc3RydWN0IGZpbGVtYXBfdGFibGUqIHRh YmxlID0gZGF0YTsKKwljaGFyKiBlbmQ7CisJdW5zaWduZWQgaW50IGNvdW50 OworCWludCBmZGZpcnN0LCBmZGxhc3QsIGVycjsKKworCWVuZCA9IHNldF9m ZGVzYyhzdHIsICZmZGZpcnN0KTsKKwlpZigqZW5kID09ICctJykgeworCQll bmQgPSBzZXRfZmRlc2MoZW5kKzEsICZmZGxhc3QpOworCX0gZWxzZSB7CisJ CWZkbGFzdCA9IGZkZmlyc3Q7CisJfQorCisJLyogTk9URTogYWRkX2VudHJ5 IGxvb3AgbXVzdCBpbnRlcmF0ZSBmaXJzdCAtPiBsYXN0ICppbmNsdXNpdmUq ICovCisKKwlpZihmZGZpcnN0IDwgZmRsYXN0KSBjb3VudCA9IGZkbGFzdCAt IGZkZmlyc3Q7CisJZWxzZSBjb3VudCA9IGZkZmlyc3QgLSBmZGxhc3Q7CisK KwlkbyB7IAorCQllcnIgPSBmaWxlbWFwX2FkZF9lbnRyeSh0YWJsZSwgZmRm aXJzdCwgTlVMTCk7CisJCWlmKGVyciA8IDApIHsKKwkJCXByaW50aygiV0FS TklORzogZmlsZW1hcCBlcnJvciAlZCBvbiAnJXMnOiclcydcbiIsCisJCQkg ICAgZXJyLCB0YWJsZS0+bmFtZSwgc3RyKTsKKwkJCXJldHVybihlcnIpOwor CQl9CisKKwkJaWYoZmRmaXJzdCA8IGZkbGFzdCkgZmRmaXJzdCsrOworCQll bHNlIGZkZmlyc3QtLTsKKwl9IHdoaWxlKGNvdW50LS0pIDsKKworCXJldHVy bigwKTsKK30KKworc3RhdGljIGludCBmbV9wb29sX2FjY2Vzcyh2b2lkKiBk YXRhLCBjaGFyKiBmaWxlX25hbWUpCit7CisJc3RydWN0IGZpbGVtYXBfdGFi bGUqIHRhYmxlID0gZGF0YTsKKwlzdHJ1Y3QgZmlsZW1hcF9lbnRyeSogZW50 cnk7CisKKwllbnRyeSA9IGZpbGVtYXBfbG9va3VwX3VudXNlZCh0YWJsZSk7 CisKKwlpZihlbnRyeSA9PSBOVUxMKQorCQlyZXR1cm4oLUVOT0VOVCk7CisK KwllbnRyeS0+Y291bnQrKzsKKworCXJldHVybihlbnRyeS0+ZmQpOworfQor CitzdGF0aWMgaW50IGZtX3Bvb2xfYXF1aXJlKHZvaWQqIGRhdGEsIGNoYXIq IGZpbGVfbmFtZSkKK3sKKwlzdHJ1Y3QgZmlsZW1hcF90YWJsZSogdGFibGUg PSBkYXRhOworCXN0cnVjdCBmaWxlbWFwX2VudHJ5KiBlbnRyeTsKKwlpbnQg ZmQ7CisKKwllbnRyeSA9IGZpbGVtYXBfbG9va3VwX3VudXNlZCh0YWJsZSk7 CisKKwlpZihlbnRyeSA9PSBOVUxMKQorCQlyZXR1cm4oLUVOT0VOVCk7CisK KwlmZCA9IGZpbGVtYXBfbmV3ZmQoZW50cnktPmZkKTsKKwlpZihmZCA8IDAp CisJCXJldHVybihmZCk7CisKKwllbnRyeS0+Y291bnQrKzsKKworCS8qIG1h a2Ugc3VyZSB0aGlzICJuZXciIGZpbGUgaXMgcmV3b3VuZCAqLworCXNlZWtf ZmlsZShmZCwgMCk7CisKKwlyZXR1cm4oZmQpOworfQorCitzdGF0aWMgaW50 IGZtX3Bvb2xfcmVsZWFzZSh2b2lkKiBkYXRhLCBpbnQgZmQpCit7CisJc3Ry dWN0IGZpbGVtYXBfdGFibGUqIHRhYmxlID0gZGF0YTsKKwlzdHJ1Y3QgZmls ZW1hcF9lbnRyeSogZW50cnk7CisKKwkvKiB0aGUgbG9va3VwX2ZkIHdpbGwg YWx3YXlzIGZhaWwgaWYgdGhlIHJldHVybmVkIGZkIGZyb20gX2FxdWlyZSBp cworCSAqIGEgZHVwIG9mIHRoZSByZWFsIGZkLiAgVGhpcyBpcyBPSzogdGhl IGNhbGxlciB3aWxsIGNsb3NlIHRoZSBkdXAgKi8KKwllbnRyeT1maWxlbWFw X2xvb2t1cF9mZCh0YWJsZSwgZmQpOyAKKworCWlmKGVudHJ5ID09IE5VTEwp CisJCXJldHVybigtRU5PRU5UKTsKKworCWlmKGVudHJ5LT5jb3VudCA+IDAp CisJCWVudHJ5LT5jb3VudC0tOworCisJcmV0dXJuKDApOworfQorCitzdGF0 aWMgaW50IGZtX3Bvb2xfc2h1dGRvd24odm9pZCogZGF0YSkKK3sKKwlzdHJ1 Y3QgZmlsZW1hcF90YWJsZSogdGFibGUgPSBkYXRhOworCXN0cnVjdCBmaWxl bWFwX2VudHJ5KiBlbnRyeTsKKworCWZvcihlbnRyeSA9IHRhYmxlLT5lbnRy aWVzOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bmV4dCkgeworCQlmaWxlbWFw X3NjcnViKGVudHJ5KTsKKwl9CisKKwlyZXR1cm4oMCk7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgZmlsZW1hcF9vcHMgZm1fb3BzX3Bvb2wgPSB7CisJLnBhcnNl ICAgICAgICA9IGZtX3Bvb2xfcGFyc2UsCisJLmFjY2VzcyAgICAgICA9IGZt X3Bvb2xfYWNjZXNzLAorCS5hcXVpcmUgICAgICAgPSBmbV9wb29sX2FxdWly ZSwKKwkucmVsZWFzZSAgICAgID0gZm1fcG9vbF9yZWxlYXNlLAorCS5zaHV0 ZG93biAgICAgPSBmbV9wb29sX3NodXRkb3duLAorfTsKKworCisvKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg KioqIFJvdXRpbmVzIHRvIHN1cHBvcnQgJ2ZpbGUnIHR5cGUgZmlsZW1hcHMg KioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqLworCitzdGF0aWMgaW50IGZtX2ZpbGVfcGFyc2Uodm9pZCog ZGF0YSwgY2hhciogc3RyKQoreworCXN0cnVjdCBmaWxlbWFwX3RhYmxlKiB0 YWJsZSA9IGRhdGE7CisJY2hhciogZmlsZV9uYW1lOworCWludCBmZCwgZXJy OworCisJZmlsZV9uYW1lID0gc2V0X2ZkZXNjKHN0ciwgJmZkKTsKKwlpZigq ZmlsZV9uYW1lID09ICcsJykKKwkJZmlsZV9uYW1lKys7CisKKwllcnIgPSBm aWxlbWFwX2FkZF9lbnRyeSh0YWJsZSwgZmQsIGZpbGVfbmFtZSk7CisJaWYo ZXJyIDwgMCkgeworCQlwcmludGsoIldBUk5JTkc6IGZpbGVtYXAgZXJyb3Ig JWQgb24gJyVzJzonJXMnXG4iLAorCQkgICAgZXJyLCB0YWJsZS0+bmFtZSwg c3RyKTsKKwkJcmV0dXJuKGVycik7CisJfQorCisJcmV0dXJuKDApOworfQor CitzdGF0aWMgaW50IGZtX2ZpbGVfYWNjZXNzKHZvaWQqIGRhdGEsIGNoYXIq IGZpbGVfbmFtZSkKK3sKKwlzdHJ1Y3QgZmlsZW1hcF90YWJsZSogdGFibGUg PSBkYXRhOworCXN0cnVjdCBmaWxlbWFwX2VudHJ5KiBlbnRyeTsKKworCWVu dHJ5ID0gZmlsZW1hcF9sb29rdXBfbmFtZSh0YWJsZSwgZmlsZV9uYW1lKTsK KworCWlmKGVudHJ5ID09IE5VTEwpCisJCXJldHVybigtRU5PRU5UKTsKKwor CXJldHVybihlbnRyeS0+ZmQpOworfQorCitzdGF0aWMgaW50IGZtX2ZpbGVf YXF1aXJlKHZvaWQqIGRhdGEsIGNoYXIqIGZpbGVfbmFtZSkKK3sKKwlzdHJ1 Y3QgZmlsZW1hcF90YWJsZSogdGFibGUgPSBkYXRhOworCXN0cnVjdCBmaWxl bWFwX2VudHJ5KiBlbnRyeTsKKwlpbnQgZmQ7CisKKwllbnRyeSA9IGZpbGVt YXBfbG9va3VwX25hbWUodGFibGUsIGZpbGVfbmFtZSk7CisKKwlpZihlbnRy eSA9PSBOVUxMKQorCQlyZXR1cm4oLUVOT0VOVCk7CisKKwlmZCA9IGZpbGVt YXBfbmV3ZmQoZW50cnktPmZkKTsKKwlpZihmZCA8IDApCisJCXJldHVybihm ZCk7CisKKwkvKiBtYWtlIHN1cmUgdGhpcyAibmV3IiBmaWxlIGlzIHJld291 bmQgKi8KKwlzZWVrX2ZpbGUoZmQsIDApOworCisJcmV0dXJuKGZkKTsKK30K Kworc3RhdGljIGludCBmbV9maWxlX3JlbGVhc2Uodm9pZCogZGF0YSwgaW50 IGZkKQoreworCXN0cnVjdCBmaWxlbWFwX3RhYmxlKiB0YWJsZSA9IGRhdGE7 CisJc3RydWN0IGZpbGVtYXBfZW50cnkqIGVudHJ5OworCisJLyogdGhlIGxv b2t1cF9mZCB3aWxsIGFsd2F5cyBmYWlsIGlmIHRoZSByZXR1cm5lZCBmZCBm cm9tIF9hcXVpcmUgaXMKKwkgKiBhIGR1cCBvZiB0aGUgcmVhbCBmZC4gIFRo aXMgaXMgT0s6IHRoZSBjYWxsZXIgd2lsbCBjbG9zZSB0aGUgZHVwICovCisJ ZW50cnkgPSBmaWxlbWFwX2xvb2t1cF9mZCh0YWJsZSwgZmQpOworCisJaWYo ZW50cnkgPT0gTlVMTCkKKwkJcmV0dXJuKC1FTk9FTlQpOworCisJcmV0dXJu KDApOworfQorCitzdGF0aWMgaW50IGZtX2ZpbGVfc2h1dGRvd24odm9pZCog ZGF0YSkKK3sKKwlzdHJ1Y3QgZmlsZW1hcF90YWJsZSogdGFibGUgPSBkYXRh OworCXN0cnVjdCBmaWxlbWFwX2VudHJ5KiBlbnRyeTsKKworCWZvcihlbnRy eSA9IHRhYmxlLT5lbnRyaWVzOyBlbnRyeTsgZW50cnkgPSBlbnRyeS0+bmV4 dCkgeworCQlmaWxlbWFwX3NjcnViKGVudHJ5KTsKKwl9CisKKwlyZXR1cm4o MCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZW1hcF9vcHMgZm1fb3BzX2Zp bGUgPSB7CisJLnBhcnNlICAgICAgICA9IGZtX2ZpbGVfcGFyc2UsCisJLmFj Y2VzcyAgICAgICA9IGZtX2ZpbGVfYWNjZXNzLAorCS5hcXVpcmUgICAgICAg PSBmbV9maWxlX2FxdWlyZSwKKwkucmVsZWFzZSAgICAgID0gZm1fZmlsZV9y ZWxlYXNlLAorCS5zaHV0ZG93biAgICAgPSBmbV9maWxlX3NodXRkb3duLAor fTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioKKyAqKiogRmlsZW1h cCBUYWJsZXMgICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqLworCitz dGF0aWMgc3RydWN0IGZpbGVtYXBfdGFibGUgZmlsZW1hcF90YWJsZXNbXSA9 IHsKKwl7CisJCS5uYW1lICAgID0gImZpbGUiLAorCQkuZW50cmllcyA9IE5V TEwsCisJCS5vcHMgICAgID0gJmZtX29wc19maWxlLAorCX0sCisJeworCQku bmFtZSAgICA9ICJ2bSIsCisJCS5lbnRyaWVzID0gTlVMTCwKKwkJLm9wcyAg ICAgPSAmZm1fb3BzX3Bvb2wsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qg ZmlsZW1hcF90YWJsZSogZmlsZW1hcF9nZXRfdGFibGUoY29uc3QgY2hhciog dGFibGVfbmFtZSkKK3sKKwlzdHJ1Y3QgZmlsZW1hcF90YWJsZSogdGFibGU7 CisJaW50IGk7CisKKwlpID0gMDsKKworCXdoaWxlKGkgPCBzaXplb2YoZmls ZW1hcF90YWJsZXMpL3NpemVvZihmaWxlbWFwX3RhYmxlc1swXSkpIHsKKwkJ dGFibGUgPSAmZmlsZW1hcF90YWJsZXNbaV07CisKKwkJaWYoc3RyY21wKHRh YmxlX25hbWUsIHRhYmxlLT5uYW1lKSA9PSAwKQorCQkJcmV0dXJuKHRhYmxl KTsKKworCQlpKys7CisJfQorCisJcmV0dXJuKE5VTEwpOworfQorCisKKy8q KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqIEZpbGVt YXAgSW50ZXJmYWNlIFJvdXRpbmVzICoqKgorICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBSZXR1cm4gVEhFIGZpbGUg ZGVzY3JpcHRvciBmb3IgdGhlIGdpdmVuIGZpbGVuYW1lIGZyb20gdGhlIGRi IHRhYmxlLgorICogVGhpcyBpcyBhIHJhdyBpbnRlcmZhY2UgZm9yIGZ1bmN0 aW9ucywgbGlrZSBzdGF0KCkgd3JhcHBlcnMgdGhhdCBwcm9taXNlCisgKiBu b3QgdG8gZG8gSU8sIGNsb3NlIHRoZSBmZCwgb3Igb3RoZXJ3aXNlIGZpZGRs ZSB3aXRoIHRoZSBmaWxlIHN0YXRlLgorICovCitpbnQgZmlsZW1hcF9hY2Nl c3MoY29uc3QgY2hhciogdGFibGVfbmFtZSwgY2hhciogZmlsZV9uYW1lKQor eworCXN0cnVjdCBmaWxlbWFwX3RhYmxlKiB0YWJsZTsKKwlpbnQgZmQ7CisK Kwl0YWJsZSA9IGZpbGVtYXBfZ2V0X3RhYmxlKHRhYmxlX25hbWUpOworCisJ aWYodGFibGUgPT0gTlVMTCkgeworCQlwcmludGsoIkVSUk9SOiB1bmtub3du IGZpbGVtYXAgdGFibGUgJyVzJ1xuIiwgdGFibGVfbmFtZSk7CisJCXJldHVy bigwKTsKKwl9CisKKwlmZCA9IHRhYmxlLT5vcHMtPmFjY2Vzcyh0YWJsZSwg ZmlsZV9uYW1lKTsKKworCXJldHVybihmZCk7Cit9CisKKy8qCisgKiBSZXR1 cm4gQSBORVcgZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZ2l2ZW4gZmlsZW5h bWUgZnJvbSB0aGUgZGIuCisgKiBBc3N1bWUgdGhlIG1vZGVzIG9mIHRoZSBm aWxlIGRlc2NyaXB0b3Igd2FzIHNldCB1cCB0byBtYXRjaCB3aGF0IGlzCisg KiBiZWluZyBhc2tlZCBmb3IuCisgKi8KK2ludCBmaWxlbWFwX2FxdWlyZShj b25zdCBjaGFyKiB0YWJsZV9uYW1lLCBjaGFyKiBmaWxlX25hbWUpCit7CisJ c3RydWN0IGZpbGVtYXBfdGFibGUqIHRhYmxlOworCWludCBmZDsKKworCXRh YmxlID0gZmlsZW1hcF9nZXRfdGFibGUodGFibGVfbmFtZSk7CisKKwlpZih0 YWJsZSA9PSBOVUxMKSB7CisJCXByaW50aygiRVJST1I6IHVua25vd24gZmls ZW1hcCB0YWJsZSAnJXMnXG4iLCB0YWJsZV9uYW1lKTsKKwkJcmV0dXJuKDAp OworCX0KKworCWZkID0gdGFibGUtPm9wcy0+YXF1aXJlKHRhYmxlLCBmaWxl X25hbWUpOworCisJcmV0dXJuKGZkKTsKK30KKworLyoKKyAqICJSZWxlYXNl IiB0aGUgZmlsZSBkZXNjcmlwdG9yLiAgRG8gbm90aGluZyAtIGlmIG5vdCBp biB0aGUgZGIsCisgKiByZXR1cm4gLUVOT0VOVC4gIFRoZSBjYWxsZXIgd291 bGQgd2FudCB0byB1c2UgdGhlIGNsb3NlKCkgc3lzdGVtCisgKiBjYWxsIG9u IHRoZSBmZCBpbiB0aGF0IGV2ZW50LgorICovCitpbnQgZmlsZW1hcF9yZWxl YXNlKGNvbnN0IGNoYXIqIHRhYmxlX25hbWUsIGNvbnN0IGludCBmZCkKK3sK KwlzdHJ1Y3QgZmlsZW1hcF90YWJsZSogdGFibGU7CisJaW50IGVycjsKKwor CXRhYmxlID0gZmlsZW1hcF9nZXRfdGFibGUodGFibGVfbmFtZSk7CisKKwlp Zih0YWJsZSA9PSBOVUxMKSB7CisJCXByaW50aygiRVJST1I6IHVua25vd24g ZmlsZW1hcCB0YWJsZSAnJXMnXG4iLCB0YWJsZV9uYW1lKTsKKwkJcmV0dXJu KC1FTk9FTlQpOyAvKiB0aGUgY2FsbGVyIGV4cGVjdHMgRU5PRU5UICovIAor CX0KKworCWVyciA9IHRhYmxlLT5vcHMtPnJlbGVhc2UodGFibGUsIGZkKTsK KworCXJldHVybihlcnIpOworfQorCisvKgorICogRG8gYW55IHRhYmxlIGNs ZWFudXAgbmVjZXNzYXJ5IGJlZm9yZSBwb3dlciBjeWNsZQorICovCitzdGF0 aWMgdm9pZCBmaWxlbWFwX3NodXRkb3duKHZvaWQpCit7CisJc3RydWN0IGZp bGVtYXBfdGFibGUqIHRhYmxlOworCWludCBpOworCisJaSA9IDA7CisKKwl3 aGlsZShpIDwgc2l6ZW9mKGZpbGVtYXBfdGFibGVzKS9zaXplb2YoZmlsZW1h cF90YWJsZXNbMF0pKQorCXsKKwkJdGFibGUgPSAmZmlsZW1hcF90YWJsZXNb aV07CisKKwkJdGFibGUtPm9wcy0+c2h1dGRvd24odGFibGUpOworCisJCWkr KzsKKwl9Cit9CisKK19fdW1sX2V4aXRjYWxsKGZpbGVtYXBfc2h1dGRvd24p OworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9maWxlbWFwKGNoYXIqIHN0 ciwgaW50KiBhZGQpCit7CisJc3RydWN0IGZpbGVtYXBfdGFibGUqIHRhYmxl OworCWNoYXIqIHRhYmxlX25hbWU7CisJaW50IGVycjsKKworCSphZGQgPSAw OworCisJdGFibGVfbmFtZSA9IHN0cjsKKwl3aGlsZSgqc3RyICYmICpzdHIg IT0gJywnKSBzdHIrKzsKKwlpZigqc3RyID09ICcsJykgKnN0cisrID0gJ1ww JzsKKworCXRhYmxlID0gZmlsZW1hcF9nZXRfdGFibGUodGFibGVfbmFtZSk7 CisKKwlpZih0YWJsZSA9PSBOVUxMKSB7CisJCXByaW50aygiRVJST1I6IHVu a25vd24gZmlsZW1hcCB0YWJsZSAnJXMnXG4iLCB0YWJsZV9uYW1lKTsKKwkJ cmV0dXJuKDApOworCX0KKworCWVyciA9IHRhYmxlLT5vcHMtPnBhcnNlKHRh YmxlLCBzdHIpOworCWlmKGVyciA8IDApIHsKKwkJcHJpbnRrKCJFUlJPUjog ZmlsZW1hcCBwYXJzZSBlcnJvciAlZCBvbiAnJXMnOiclcydcbiIsCisJCSAg ICBlcnIsIHRhYmxlX25hbWUsIHN0cik7CisJCXJldHVybigwKTsKKwl9CisK KwlyZXR1cm4oMCk7Cit9CisKK19fdW1sX3NldHVwKCJmaWxlbWFwPSIsIHBh cnNlX2ZpbGVtYXAsCisiZmlsZW1hcD08dGFibGU+LDxmZD5bLTxmZD5dWyw8 ZmlsZW5hbWU+XVxuIgorIiAgICBNYXAgPGZpbGVuYW1lPiB0byA8ZmQ+IChh bHJlYWR5IG9wZW5lZCkgaW50byBkYiB0YWJsZSBuYW1lZCA8dGFibGU+Llxu IgorIiAgICBDb21tb24gdGFibGVzOiBmaWxlPW5vcm1hbCBmaWxlcywgdm09 dmlydHVhbCBtZW1vcnkuIEV4YW1wbGVzIGZvciBiYXNoOlxuIgorIiAgICAu L2xpbnV4IHViZDA9ZnMuY293LGZzLmRhdCBmaWxlbWFwPWZpbGUsMTAsZnMu ZGF0IDEwPC9jZHJvbTIvZnMuZGF0XG4iCisiICAgIC4vbGludXggZmlsZW1h cD1maWxlLDExLC9wcm9jL2NwdWluZm8gMTE8L3Byb2MvY3B1aW5mb1xuIgor IiAgICAuL2xpbnV4IGZpbGVtYXA9dm0sMjAtMjEgMjA8Pi9kZXYvc2htL3Zt LSQkLjEgMjE8Pi9kZXYvc2htL3ZtLSQkLjJcbiIKKyk7CmRpZmYgLU5hdXIg bGludXgtMi40LjIyLTV1bS5vcmlnL2FyY2gvdW0va2VybmVsL21lbV91c2Vy LmMgbGludXgtMi40LjIyLTV1bS5uZXcvYXJjaC91bS9rZXJuZWwvbWVtX3Vz ZXIuYwotLS0gbGludXgtMi40LjIyLTV1bS5vcmlnL2FyY2gvdW0va2VybmVs L21lbV91c2VyLmMJVGh1IFNlcCAyNSAxOToyOTo0NSAyMDAzCisrKyBsaW51 eC0yLjQuMjItNXVtLm5ldy9hcmNoL3VtL2tlcm5lbC9tZW1fdXNlci5jCVRo dSBTZXAgMjUgMjA6Mjk6MTcgMjAwMwpAQCAtNDcsNiArNDcsOCBAQAogI2lu Y2x1ZGUgInRlbXBmaWxlLmgiCiAjaW5jbHVkZSAia2Vybl9jb25zdGFudHMu aCIKIAorI2luY2x1ZGUgImZpbGVtYXAuaCIKKwogZXh0ZXJuIHN0cnVjdCBt ZW1fcmVnaW9uIHBoeXNtZW1fcmVnaW9uOwogCiAjZGVmaW5lIFRFTVBOQU1F X1RFTVBMQVRFICJ2bV9maWxlLVhYWFhYWCIKQEAgLTU2LDYgKzU4LDEyIEBA CiAJaW50IGZkLCBlcnI7CiAJY2hhciB6ZXJvOwogCisJZmQgPSBmaWxlbWFw X2FxdWlyZSgidm0iLE5VTEwpOworCWlmKGZkID49IDApIHsKKwkJZnRydW5j YXRlKGZkLCBsZW4pOyAvKiB1c2UgMCBpbnN0ZWFkIG9mIGxlbiB0byB6ZXJv IGNvbnRlbnRzICovCisJCWdvdG8gc2l6ZWZpbGU7CisJfQorCiAJZmQgPSBt YWtlX3RlbXBmaWxlKFRFTVBOQU1FX1RFTVBMQVRFLCBOVUxMLCAxKTsKIAlp ZihmZCA8IDApIHsKIAkJb3NfcHJpbnRfZXJyb3IoZmQsICJtYWtlX3RlbXBm aWxlIik7CkBAIC02Niw2ICs3NCw4IEBACiAJCW9zX3ByaW50X2Vycm9yKGVy ciwgImNoYW5nZV9tb2RlIik7CiAJCWV4aXQoMSk7CiAJfQorCitzaXplZmls ZToKIAllcnIgPSBvc19zZWVrX2ZpbGUoZmQsIGxlbik7CiAJaWYoZXJyIDwg MCl7CiAJCW9zX3ByaW50X2Vycm9yKGVyciwgInNlZWtfZmlsZSIpOwpkaWZm IC1OYXVyIGxpbnV4LTIuNC4yMi01dW0ub3JpZy9hcmNoL3VtL2tlcm5lbC91 bWlkLmMgbGludXgtMi40LjIyLTV1bS5uZXcvYXJjaC91bS9rZXJuZWwvdW1p ZC5jCi0tLSBsaW51eC0yLjQuMjItNXVtLm9yaWcvYXJjaC91bS9rZXJuZWwv dW1pZC5jCVRodSBTZXAgMjUgMTk6Mjk6NDUgMjAwMworKysgbGludXgtMi40 LjIyLTV1bS5uZXcvYXJjaC91bS9rZXJuZWwvdW1pZC5jCVRodSBTZXAgMjUg MjA6Mjk6MTcgMjAwMwpAQCAtMTksNiArMTksOCBAQAogI2luY2x1ZGUgInVz ZXJfdXRpbC5oIgogI2luY2x1ZGUgImNob29zZS1tb2RlLmgiCiAKKyNpbmNs dWRlICJmaWxlbWFwLmgiCisKICNkZWZpbmUgVU1JRF9MRU4gNjQKICNkZWZp bmUgVU1MX0RJUiAifi8udW1sLyIKIApAQCAtNjgsOCArNzAsMjQgQEAKIHsK IAlpbnQgbjsKIAotCWlmKCF1bWlkX2luaXRlZCAmJiBtYWtlX3VtaWQocHJp bnRrKSkgcmV0dXJuKC0xKTsKKwlpZih1bWlkX2luaXRlZCkgeworCQljaGFy IHBhdGhbTUFYUEFUSExFTiArIDFdOyAgIC8qIFhYWCB1c2UgYnVmIGluc3Rl YWQ/ICovCisKKwkJbiA9IHNucHJpbnRmKHBhdGgsIHNpemVvZihwYXRoKSwg IiVzJXMvJXMiLAorCQkJICAgICB1bWxfZGlyLCB1bWlkLCBuYW1lKTsKKwkJ aWYoKG4gPCAwKSB8fCAobiA+PSBzaXplb2YocGF0aCkpKQorCQkJcmV0dXJu KC0xKTsKKworCQkvKiBqdXN0IHRlc3QgZm9yIGV4aXN0ZW5jZSBpbiB0aGUg ZmlsZW1hcCBmaWxlIHRhYmxlICovCisJCWlmKGZpbGVtYXBfYWNjZXNzKCJm aWxlIiwgcGF0aCkgPj0gMCkgeworCQkJZ290byBoYW5kbGVfbmFtZTsKKwkJ fQorCX0gCisKKwlpZihtYWtlX3VtaWQocHJpbnRrKSkKKwkJcmV0dXJuKC0x KTsKIAoraGFuZGxlX25hbWU6CiAJbiA9IHN0cmxlbih1bWxfZGlyKSArIHN0 cmxlbih1bWlkKSArIHN0cmxlbihuYW1lKSArIDE7CiAJaWYobiA+IGxlbil7 CiAJCXByaW50aygidW1pZF9maWxlX25hbWUgOiBidWZmZXIgdG9vIHNob3J0 XG4iKTsKZGlmZiAtTmF1ciBsaW51eC0yLjQuMjItNXVtLm9yaWcvYXJjaC91 bS9vcy1MaW51eC9maWxlLmMgbGludXgtMi40LjIyLTV1bS5uZXcvYXJjaC91 bS9vcy1MaW51eC9maWxlLmMKLS0tIGxpbnV4LTIuNC4yMi01dW0ub3JpZy9h cmNoL3VtL29zLUxpbnV4L2ZpbGUuYwlUaHUgU2VwIDI1IDE5OjI5OjQ1IDIw MDMKKysrIGxpbnV4LTIuNC4yMi01dW0ubmV3L2FyY2gvdW0vb3MtTGludXgv ZmlsZS5jCVRodSBTZXAgMjUgMjA6Mjk6MTcgMjAwMwpAQCAtMTksNiArMTks OCBAQAogI2luY2x1ZGUgInVzZXIuaCIKICNpbmNsdWRlICJrZXJuX3V0aWwu aCIKIAorI2luY2x1ZGUgImZpbGVtYXAuaCIKKwogc3RhdGljIHZvaWQgY29w eV9zdGF0KHN0cnVjdCB1bWxfc3RhdCAqZHN0LCBzdHJ1Y3Qgc3RhdDY0ICpz cmMpCiB7CiAJKmRzdCA9ICgoc3RydWN0IHVtbF9zdGF0KSB7CkBAIC01Nywx MiArNTksMjIgQEAKIGludCBvc19zdGF0X2ZpbGUoY29uc3QgY2hhciAqZmls ZV9uYW1lLCBzdHJ1Y3QgdW1sX3N0YXQgKnVidWYpCiB7CiAJc3RydWN0IHN0 YXQ2NCBzYnVmOwotCWludCBlcnI7CisJaW50IGZkLCBlcnI7CisKKwlmZCA9 IGZpbGVtYXBfYWNjZXNzKCJmaWxlIiwgZmlsZV9uYW1lKTsKKwlpZihmZCA+ PSAwKSB7CisJCWRvIHsKKwkJCWVyciA9IGZzdGF0NjQoZmQsICZzYnVmKTsK KwkJfSB3aGlsZSgoZXJyIDwgMCkgJiYgKGVycm5vID09IEVJTlRSKSkgOwor CisJCWdvdG8gZGlkX3N0YXQ7CisJfQogCiAJZG8gewogCQllcnIgPSBzdGF0 NjQoZmlsZV9uYW1lLCAmc2J1Zik7CiAJfSB3aGlsZSgoZXJyIDwgMCkgJiYg KGVycm5vID09IEVJTlRSKSkgOwogCitkaWRfc3RhdDoKIAlpZihlcnIgPCAw KSAKIAkJcmV0dXJuKC1lcnJubyk7CiAKQEAgLTc0LDYgKzg2LDI2IEBACiBp bnQgb3NfYWNjZXNzKGNvbnN0IGNoYXIqIGZpbGUsIGludCBtb2RlKQogewog CWludCBhbW9kZSwgZXJyOworCWludCBmZCwgZmxhZ3M7CisKKwlmZCA9IGZp bGVtYXBfYWNjZXNzKCJmaWxlIiwgZmlsZSk7CisJaWYoZmQgPj0gMCkgewor CQlkbyB7CisJCQlmbGFncyA9IGZjbnRsKGZkLCBGX0dFVEZMKTsKKwkJfSB3 aGlsZSgoZmxhZ3MgPCAwKSAmJiAoZXJybm8gPT0gRUlOVFIpKSA7CisJCisJ CWlmKGZsYWdzIDwgMCkKKwkJCXJldHVybigtZXJybm8pOworCisJCWlmKG1v ZGUgJiBPU19BQ0NfWF9PSykKKwkJCXJldHVybigtRUFDQ0VTKTsgLyogWFhY IG5vdCBleGVjdXRhYmxlIG5vdCB0cnVlPyAqLworCQlpZigobW9kZSAmIE9T X0FDQ19XX09LKSAmJiAhKGZsYWdzJk9fUkRXUiB8fCBmbGFncyZPX1dST05M WSkpCisJCQlyZXR1cm4oLUVBQ0NFUyk7CisJCWlmKChtb2RlICYgT1NfQUND X1JfT0spICYmIChmbGFncyZPX1dST05MWSkpCisJCQlyZXR1cm4oLUVBQ0NF Uyk7CisKKwkJcmV0dXJuKDApOworCX0KIAogCWFtb2RlPShtb2RlJk9TX0FD Q19SX09LID8gUl9PSyA6IDApIHwgKG1vZGUmT1NfQUNDX1dfT0sgPyBXX09L IDogMCkgfAogCSAgICAgIChtb2RlJk9TX0FDQ19YX09LID8gWF9PSyA6IDAp IHwgKG1vZGUmT1NfQUNDX0ZfT0sgPyBGX09LIDogMCkgOwpAQCAtMjU3LDYg KzI4OSwxMiBAQAogewogCWludCBmZCwgZiA9IDA7CiAKKwlmZCA9IGZpbGVt YXBfYXF1aXJlKCJmaWxlIiwgZmlsZSk7CisJaWYoZmQgPj0gMCkgeworCQlw cmludGsoImZpbGVtYXAgYXF1aXJlOiBmZD0lZCwgZmlsZT0lc1xuIiwgZmQs IGZpbGUpOworCQlnb3RvIHNldGZkOworCX0KKwogCWlmKGZsYWdzLnIgJiYg ZmxhZ3MudykgZiA9IE9fUkRXUjsKIAllbHNlIGlmKGZsYWdzLnIpIGYgPSBP X1JET05MWTsKIAllbHNlIGlmKGZsYWdzLncpIGYgPSBPX1dST05MWTsKQEAg LTI3MSw2ICszMDksNyBAQAogCWlmKGZkIDwgMCkKIAkJcmV0dXJuKC1lcnJu byk7CiAKK3NldGZkOgogCWlmKGZsYWdzLmNsICYmIGZjbnRsKGZkLCBGX1NF VEZELCAxKSl7CiAJCW9zX2Nsb3NlX2ZpbGUoZmQpOwogCQlyZXR1cm4oLWVy cm5vKTsKQEAgLTMwMCw2ICszMzksMTMgQEAKIAogdm9pZCBvc19jbG9zZV9m aWxlKGludCBmZCkKIHsKKyNpZiAwCisJLyogZmlsZW1hcHBlZCBmaWxlcyB3 aWxsIHJldHVybiBzb21ldGhpbmcgb3RoZXIgdGhhbiAtRU5PRU5UICovCisJ aWYoZmlsZW1hcF9yZWxlYXNlKCJmaWxlIiwgZmQpICE9IC1FTk9FTlQpIHsK KwkJcmV0dXJuOworCX0KKyNlbmRpZgorCiAJY2xvc2UoZmQpOwogfQogCkBA IC01NzQsNiArNjIwLDEyIEBACiAJc3RydWN0IHNvY2thZGRyX3VuIGFkZHI7 CiAJaW50IHNvY2ssIGVycjsKIAorCXNvY2sgPSBmaWxlbWFwX2FxdWlyZSgi ZmlsZSIsIGZpbGUpOworCWlmKHNvY2sgPj0gMCkgeworCQlwcmludGsoImZp bGVtYXAgYXF1aXJlOiBmZD0lZCwgZmlsZT0lc1xuIiwgc29jaywgZmlsZSk7 CisJCWdvdG8gc2V0ZmQ7CisJfQorCiAJc29jayA9IHNvY2tldChQRl9VTklY LCBTT0NLX0RHUkFNLCAwKTsKIAlpZiAoc29jayA8IDApewogCQlwcmludGso ImNyZWF0ZV91bml4X3NvY2tldCAtIHNvY2tldCBmYWlsZWQsIGVycm5vID0g JWRcbiIsCkBAIC01ODEsMTMgKzYzMyw2IEBACiAJCXJldHVybigtZXJybm8p OwogCX0KIAotCWlmKGNsb3NlX29uX2V4ZWMpIHsKLQkJZXJyID0gb3Nfc2V0 X2V4ZWNfY2xvc2Uoc29jaywgMSk7Ci0JCWlmKGVyciA8IDApCi0JCQlwcmlu dGsoImNyZWF0ZV91bml4X3NvY2tldCA6IGNsb3NlX29uX2V4ZWMgZmFpbGVk LCAiCi0JCSAgICAgICAiZXJyID0gJWQiLCAtZXJyKTsKLQl9Ci0KIAlhZGRy LnN1bl9mYW1pbHkgPSBBRl9VTklYOwogCiAJLyogWFhYIEJlIG1vcmUgY2Fy ZWZ1bCBhYm91dCBvdmVyZmxvdyAqLwpAQCAtNTk4LDYgKzY0MywxNCBAQAog CQlwcmludGsoImNyZWF0ZV9saXN0ZW5pbmdfc29ja2V0IC0gYmluZCBmYWls ZWQsIGVycm5vID0gJWRcbiIsCiAJCSAgICAgICBlcnJubyk7CiAJCXJldHVy bigtZXJybm8pOworCX0KKworc2V0ZmQ6CisJaWYoY2xvc2Vfb25fZXhlYykg eworCQllcnIgPSBvc19zZXRfZXhlY19jbG9zZShzb2NrLCAxKTsKKwkJaWYo ZXJyIDwgMCkKKwkJCXByaW50aygiY3JlYXRlX3VuaXhfc29ja2V0IDogY2xv c2Vfb25fZXhlYyBmYWlsZWQsICIKKwkJICAgICAgICJlcnIgPSAlZCIsIC1l cnIpOwogCX0KIAogCXJldHVybihzb2NrKTsKZGlmZiAtTmF1ciBsaW51eC0y LjQuMjItNXVtLm9yaWcvYXJjaC91bS9kcml2ZXJzL2RhZW1vbl91c2VyLmMg bGludXgtMi40LjIyLTV1bS5uZXcvYXJjaC91bS9kcml2ZXJzL2RhZW1vbl91 c2VyLmMKLS0tIGxpbnV4LTIuNC4yMi01dW0ub3JpZy9hcmNoL3VtL2RyaXZl cnMvZGFlbW9uX3VzZXIuYwlUaHUgU2VwIDI1IDE5OjI5OjQ1IDIwMDMKKysr IGxpbnV4LTIuNC4yMi01dW0ubmV3L2FyY2gvdW0vZHJpdmVycy9kYWVtb25f dXNlci5jCVRodSBTZXAgMjUgMjA6Mjk6MTcgMjAwMwpAQCAtMTgsNiArMTgs OCBAQAogI2luY2x1ZGUgInVzZXIuaCIKICNpbmNsdWRlICJvcy5oIgogCisj aW5jbHVkZSAiZmlsZW1hcC5oIgorCiAjZGVmaW5lIE1BWF9QQUNLRVQgKEVU SF9NQVhfUEFDS0VUICsgRVRIX0hFQURFUl9PVEhFUikKIAogZW51bSByZXF1 ZXN0X3R5cGUgeyBSRVFfTkVXX0NPTlRST0wgfTsKQEAgLTUzLDYgKzU1LDEz IEBACiAJc3RydWN0IHJlcXVlc3RfdjMgcmVxOwogCWludCBmZCwgbiwgZXJy OwogCisJcHJpLT5jb250cm9sID0gZmlsZW1hcF9hcXVpcmUoImZpbGUiLCBj dGxfYWRkci0+c3VuX3BhdGgpOworCWlmKHByaS0+Y29udHJvbCA+PSAwKSB7 CisJCXByaW50aygiZmlsZW1hcCBhcXVpcmU6IGZkPSVkLCBmaWxlPSVzXG4i LAorCQkgICAgICAgcHJpLT5jb250cm9sLCBjdGxfYWRkci0+c3VuX3BhdGgp OworCQlnb3RvIGhhdmVfY29udHJvbDsKKwl9CisKIAlwcmktPmNvbnRyb2wg PSBzb2NrZXQoQUZfVU5JWCwgU09DS19TVFJFQU0sIDApOwogCWlmKHByaS0+ Y29udHJvbCA8IDApewogCQlwcmludGsoImRhZW1vbl9vcGVuIDogY29udHJv bCBzb2NrZXQgZmFpbGVkLCBlcnJubyA9ICVkXG4iLCAKQEAgLTY4LDYgKzc3 LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCitoYXZlX2NvbnRyb2w6CiAJZmQg PSBzb2NrZXQoQUZfVU5JWCwgU09DS19ER1JBTSwgMCk7CiAJaWYoZmQgPCAw KXsKIAkJcHJpbnRrKCJkYWVtb25fb3BlbiA6IGRhdGEgc29ja2V0IGZhaWxl ZCwgZXJybm8gPSAlZFxuIiwgCg== ------=_NextPart_000_1749_266a_fc3-- ------------------------------------------------------- This SF.net email is sponsored by: SF.net Giveback Program. SourceForge.net hosts over 70,000 Open Source Projects. See the people who have HELPED US provide better services: Click here: http://sourceforge.net/supporters.php _______________________________________________ User-mode-linux-devel mailing list User-mode-linux-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel