From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/2088 Path: news.gmane.org!not-for-mail From: Alex Caudill Newsgroups: gmane.linux.lib.musl.general Subject: Re: PATCH: dl_iterate_phdr() Date: Fri, 12 Oct 2012 08:28:59 -0500 Message-ID: References: <20121011234255.GB254@brightrain.aerifal.cx> <20121012000034.GC254@brightrain.aerifal.cx> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=e0cb4e385316acc20f04cbdcab5e X-Trace: ger.gmane.org 1350048556 22684 80.91.229.3 (12 Oct 2012 13:29:16 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Fri, 12 Oct 2012 13:29:16 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-2089-gllmg-musl=m.gmane.org@lists.openwall.com Fri Oct 12 15:29:21 2012 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1TMfIl-0003ro-L7 for gllmg-musl@plane.gmane.org; Fri, 12 Oct 2012 15:29:19 +0200 Original-Received: (qmail 30180 invoked by uid 550); 12 Oct 2012 13:29:12 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 30171 invoked from network); 12 Oct 2012 13:29:11 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=f6pS2qAFvglH5KMmxfLD88nagEgK7xcipFeSes59Cwo=; b=VlB85hmNFPKmoMrwKHerBo+8NaZ1ZSLwnm0H5Q6WVqIhhHS+ftGEU+ZLkg1G1e7oEz MOfUoj2OxfQCd6DEZ5EQbi2wxxNGMFgKxXUW9RZ9F9duvtQMNMiavg1bzMuNymSn95RK Or8ZzOkBpVoStm5dUuUb0JARgfHo2MJ4xOjIenyExO788eyJ6wom14FRT9+kCYcr0AA7 lba1QuQC3Eku1VOcnbLYiMB2toPzYLJN6lPTjpPBhsnf4OveuiQImuRYcrzOxf3QiNK6 wSysuQSQRmDe5p3aINTIRnr3lpxGSNCpHFLR1ABF7nP+dorNaes8mEnVF5RDpqqQJYbS YyIw== In-Reply-To: <20121012000034.GC254@brightrain.aerifal.cx> Xref: news.gmane.org gmane.linux.lib.musl.general:2088 Archived-At: --e0cb4e385316acc20f04cbdcab5e Content-Type: text/plain; charset=ISO-8859-1 Thanks for the review! To clarify, I meant that the patch is public domain. This version implements most of your changes and attempts support for dlopen()'d libraries and vdso. Some questions: 1.) I guarded link.h with _GNU_SOURCE or _BSD_SOURCE; I'm unclear on whether this is necessary since it isn't a standard header, so please let me know your preference. 2.) I'm unsure of how to replace ElfW(Phdr) in dl_phdr_info - or did you mean that musl should internally use some opaque type for dl_phdr_info? Also, should ElfW() go in elf.h? 3.) The attached dltest.c reveals a problem with dlopen()'d libraries which seems to be related to the locking strategy (see output below). If I don't take the lock and check for current == saved_tail, it "fixes" the example. At the least, I think this reveals a flaw with dlopen("foo", RTLD_NOW) - shouldn't it hold the lock until the dso list has been updated? This function is used by libunwind and (I think) libgcc_eh for C++ exception support, and it's possible that additional fields in dl_phdr_info will be necessary in order for those to work unmodified with musl. I'll look into this today and come up with more tests. Solaris and FreeBSD, at least, have these appended to struct dl_phdr_info: unsigned long long int dlpi_adds; /* total # of loads */ unsigned long long int dlpi_subs; /* total # of unloads */ The dl_iterate_phdr() callback is passed a size arg, and the callback is responsible for checking the size to ensure that the additional fields are present. Don't shoot the messenger! :) TEST OUTPUT: musl: name=./dltest (6 segments) header 0: address= 0x8048034 header 1: address= 0x80480f4 header 2: address= 0x8048000 header 3: address= 0x8049538 header 4: address= 0x804954c header 5: address= 0 name=/lib/ld-musl-i386.so.1 (4 segments) header 0: address=0x28049000 header 1: address=0x280c7714 header 2: address=0x280c77d8 header 3: address=0x28049000 FreeBSD libc: name=/usr/home/alex/dltest (8 segments) header 0: address= 0x8048034 header 1: address= 0x8048134 header 2: address= 0x8048000 header 3: address= 0x80497d0 header 4: address= 0x80497e4 header 5: address= 0x804814c header 6: address= 0x8048784 header 7: address= 0x0 name=libc.so.7 (6 segments) header 0: address=0x2806b000 header 1: address=0x28195000 header 2: address=0x281976b4 header 3: address=0x28195000 header 4: address=0x28194b38 header 5: address=0x2806b000 name=/compat/linux/lib/libavl.so (4 segments) header 0: address=0x281c3000 header 1: address=0x281c5738 header 2: address=0x281c5738 header 3: address=0x281c3000 --e0cb4e385316acc20f04cbdcab5e Content-Type: application/octet-stream; name="dynlink.patch" Content-Disposition: attachment; filename="dynlink.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: file0 ZGlmZiAtLWdpdCBhL3NyYy9sZHNvL2R5bmxpbmsuYyBiL3NyYy9sZHNvL2R5bmxpbmsuYwppbmRl eCBjM2NiNjExLi41MDNlZDBlIDEwMDY0NAotLS0gYS9zcmMvbGRzby9keW5saW5rLmMKKysrIGIv c3JjL2xkc28vZHlubGluay5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8ZXJybm8uaD4K ICNpbmNsdWRlIDxsaW1pdHMuaD4KICNpbmNsdWRlIDxlbGYuaD4KKyNpbmNsdWRlIDxsaW5rLmg+ CiAjaW5jbHVkZSA8c2V0am1wLmg+CiAjaW5jbHVkZSA8cHRocmVhZC5oPgogI2luY2x1ZGUgPGN0 eXBlLmg+CkBAIC01Nyw2ICs1OCw4IEBAIHN0cnVjdCBkc28gewogCXNpemVfdCAqZHludjsKIAlz dHJ1Y3QgZHNvICpuZXh0LCAqcHJldjsKIAorICAgICAgICBQaGRyICpwaGRyOworICAgICAgICB1 aW50MTZfdCBwaG51bTsKIAlpbnQgcmVmY250OwogCVN5bSAqc3ltczsKIAl1aW50MzJfdCAqaGFz aHRhYjsKQEAgLTMyNCw2ICszMjcsOCBAQCBzdGF0aWMgdm9pZCAqbWFwX2xpYnJhcnkoaW50IGZk LCBzdHJ1Y3QgZHNvICpkc28pCiAJCWVoLT5lX3Bob2ZmID0gc2l6ZW9mICplaDsKIAl9CiAJcGgg PSAodm9pZCAqKSgoY2hhciAqKWJ1ZiArIGVoLT5lX3Bob2ZmKTsKKyAgICAgICAgZHNvLT5waGRy ID0gcGg7CisgICAgICAgIGRzby0+cGhudW0gPSAodWludDE2X3QpZWgtPmVfcGhudW07CiAJZm9y IChpPWVoLT5lX3BobnVtOyBpOyBpLS0sIHBoPSh2b2lkICopKChjaGFyICopcGgrZWgtPmVfcGhl bnRzaXplKSkgewogCQlpZiAocGgtPnBfdHlwZSA9PSBQVF9EWU5BTUlDKQogCQkJZHluID0gcGgt PnBfdmFkZHI7CkBAIC04MTUsMTkgKzgyMCwyMCBAQCB2b2lkICpfX2R5bmxpbmsoaW50IGFyZ2Ms IGNoYXIgKiphcmd2KQogCWxpYi0+bmFtZSA9IGxpYi0+c2hvcnRuYW1lID0gImxpYmMuc28iOwog CWxpYi0+Z2xvYmFsID0gMTsKIAllaGRyID0gKHZvaWQgKilsaWItPmJhc2U7Ci0JZmluZF9tYXBf cmFuZ2UoKHZvaWQgKikoYXV4W0FUX0JBU0VdK2VoZHItPmVfcGhvZmYpLAotCQllaGRyLT5lX3Bo bnVtLCBlaGRyLT5lX3BoZW50c2l6ZSwgbGliKTsKLQlsaWItPmR5bnYgPSAodm9pZCAqKShsaWIt PmJhc2UgKyBmaW5kX2R5bigKLQkJKHZvaWQgKikoYXV4W0FUX0JBU0VdK2VoZHItPmVfcGhvZmYp LAotCQllaGRyLT5lX3BobnVtLCBlaGRyLT5lX3BoZW50c2l6ZSkpOworICAgICAgICBsaWItPnBo bnVtID0gKHVpbnQxNl90KWVoZHItPmVfcGhudW07CisgICAgICAgIGxpYi0+cGhkciA9ICh2b2lk ICopKGF1eFtBVF9CQVNFXStlaGRyLT5lX3Bob2ZmKTsKKwlmaW5kX21hcF9yYW5nZShsaWItPnBo ZHIsIGVoZHItPmVfcGhudW0sIGVoZHItPmVfcGhlbnRzaXplLCBsaWIpOworCWxpYi0+ZHludiA9 ICh2b2lkICopKGxpYi0+YmFzZSArIGZpbmRfZHluKGxpYi0+cGhkciwKKyAgICAgICAgICAgICAg ICAgICAgZWhkci0+ZV9waG51bSwgZWhkci0+ZV9waGVudHNpemUpKTsKIAlkZWNvZGVfZHluKGxp Yik7CiAKIAlpZiAoYXV4W0FUX1BIRFJdKSB7CiAJCXNpemVfdCBpbnRlcnBfb2ZmID0gMDsKIAkJ c2l6ZV90IHRsc19pbWFnZSA9IDA7CiAJCS8qIEZpbmQgbG9hZCBhZGRyZXNzIG9mIHRoZSBtYWlu IHByb2dyYW0sIHZpYSBBVF9QSERSIHZzIFBUX1BIRFIuICovCi0JCXBoZHIgPSAodm9pZCAqKWF1 eFtBVF9QSERSXTsKLQkJZm9yIChpPWF1eFtBVF9QSE5VTV07IGk7IGktLSwgcGhkcj0odm9pZCAq KSgoY2hhciAqKXBoZHIgKyBhdXhbQVRfUEhFTlRdKSkgeworCQlhcHAtPnBoZHIgPSBwaGRyID0g KHZvaWQgKilhdXhbQVRfUEhEUl07CisgICAgICAgICAgICAgICAgYXBwLT5waG51bSA9IGF1eFtB VF9QSE5VTV07CisJCWZvciAoaT1hcHAtPnBobnVtOyBpOyBpLS0sIHBoZHI9KHZvaWQgKikoKGNo YXIgKilwaGRyICsgYXV4W0FUX1BIRU5UXSkpIHsKIAkJCWlmIChwaGRyLT5wX3R5cGUgPT0gUFRf UEhEUikKIAkJCQlhcHAtPmJhc2UgPSAodm9pZCAqKShhdXhbQVRfUEhEUl0gLSBwaGRyLT5wX3Zh ZGRyKTsKIAkJCWVsc2UgaWYgKHBoZHItPnBfdHlwZSA9PSBQVF9JTlRFUlApCkBAIC04OTAsNyAr ODk2LDggQEAgdm9pZCAqX19keW5saW5rKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkvKiBBdHRh Y2ggdG8gdmRzbywgaWYgcHJvdmlkZWQgYnkgdGhlIGtlcm5lbCAqLwogCWlmIChzZWFyY2hfdmVj KGF1eHYsICZ2ZHNvX2Jhc2UsIEFUX1NZU0lORk9fRUhEUikpIHsKIAkJZWhkciA9ICh2b2lkICop dmRzb19iYXNlOwotCQlwaGRyID0gKHZvaWQgKikodmRzb19iYXNlICsgZWhkci0+ZV9waG9mZik7 CisJCXZkc28tPnBoZHIgPSBwaGRyID0gKHZvaWQgKikodmRzb19iYXNlICsgZWhkci0+ZV9waG9m Zik7CisgICAgICAgICAgICAgICAgdmRzby0+cGhudW0gPSBlaGRyLT5lX3BobnVtOwogCQlmb3Ig KGk9ZWhkci0+ZV9waG51bTsgaTsgaS0tLCBwaGRyPSh2b2lkICopKChjaGFyICopcGhkciArIGVo ZHItPmVfcGhlbnRzaXplKSkgewogCQkJaWYgKHBoZHItPnBfdHlwZSA9PSBQVF9EWU5BTUlDKQog CQkJCXZkc28tPmR5bnYgPSAodm9pZCAqKSh2ZHNvX2Jhc2UgKyBwaGRyLT5wX29mZnNldCk7CkBA IC0xMTY2LDYgKzExNzMsMzAgQEAgdm9pZCAqX19kbHN5bSh2b2lkICpyZXN0cmljdCBwLCBjb25z dCBjaGFyICpyZXN0cmljdCBzLCB2b2lkICpyZXN0cmljdCByYSkKIAlwdGhyZWFkX3J3bG9ja191 bmxvY2soJmxvY2spOwogCXJldHVybiByZXM7CiB9CisKK2ludCBkbF9pdGVyYXRlX3BoZHIoaW50 KCpjYWxsYmFjaykoc3RydWN0IGRsX3BoZHJfaW5mbyAqaW5mbywgc2l6ZV90IHNpemUsIHZvaWQg KmRhdGEpLCB2b2lkICpkYXRhKQoreworICAgIHN0cnVjdCBkc28gKmN1cnJlbnQsICpzYXZlZF90 YWlsOworICAgIHN0cnVjdCBkbF9waGRyX2luZm8gaW5mbzsKKyAgICBpbnQgcmV0ID0gMDsKKwor ICAgIHB0aHJlYWRfcndsb2NrX3JkbG9jaygmbG9jayk7CisgICAgc2F2ZWRfdGFpbCA9IHRhaWw7 CisgICAgcHRocmVhZF9yd2xvY2tfdW5sb2NrKCZsb2NrKTsKKworICAgIGZvcihjdXJyZW50ID0g aGVhZDsgOyBjdXJyZW50ID0gY3VycmVudC0+bmV4dCkgeworICAgICAgICBpbmZvLmRscGlfYWRk ciAgPSAodWludHB0cl90KWN1cnJlbnQtPmJhc2U7CisgICAgICAgIGluZm8uZGxwaV9uYW1lICA9 IGN1cnJlbnQtPm5hbWU7CisgICAgICAgIGluZm8uZGxwaV9waGRyICA9IGN1cnJlbnQtPnBoZHI7 CisgICAgICAgIGluZm8uZGxwaV9waG51bSA9IGN1cnJlbnQtPnBobnVtOworCisgICAgICAgIHJl dCA9IChjYWxsYmFjaykoJmluZm8sIHNpemVvZiAoaW5mbyksIGRhdGEpOworICAgICAgICBpZiAo cmV0ICE9IDApIGJyZWFrOworCisgICAgICAgIGlmIChjdXJyZW50ID09IHNhdmVkX3RhaWwpIGJy ZWFrOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQogI2Vsc2UKIHZvaWQgKmRsb3Blbihjb25z dCBjaGFyICpmaWxlLCBpbnQgbW9kZSkKIHsK --e0cb4e385316acc20f04cbdcab5e Content-Type: text/x-chdr; charset=US-ASCII; name="link.h" Content-Disposition: attachment; filename="link.h" Content-Transfer-Encoding: base64 X-Attachment-Id: file2 I2lmbmRlZiBfTElOS19ICiNkZWZpbmUgX0xMSU5LX0gKCiNpbmNsdWRlIDxlbGYuaD4KI2RlZmlu ZSBfX05FRURfc2l6ZV90CiNpbmNsdWRlIDxiaXRzL2FsbHR5cGVzLmg+CgojaWYgZGVmaW5lZChf R05VX1NPVVJDRSkgfHwgZGVmaW5lZChfQlNEX1NPVVJDRSkKCiNpZmRlZiBfTFA2NAojZGVmaW5l IEVsZlcodHlwZSkgRWxmNjRfICMjIHR5cGUKI2Vsc2UKI2RlZmluZSBFbGZXKHR5cGUpIEVsZjMy XyAjIyB0eXBlCiNlbmRpZgoKc3RydWN0IGRsX3BoZHJfaW5mbyB7CiAgICB1aW50cHRyX3QgZGxw aV9hZGRyOwogICAgY29uc3QgY2hhciAqZGxwaV9uYW1lOwogICAgY29uc3QgRWxmVyhQaGRyKSAq ZGxwaV9waGRyOwogICAgdWludDE2X3QgZGxwaV9waG51bTsKfTsKCmludCBkbF9pdGVyYXRlX3Bo ZHIoaW50ICgqKShzdHJ1Y3QgZGxfcGhkcl9pbmZvICosIHNpemVfdCwgdm9pZCAqKSwgdm9pZCAq KTsKCiNlbmRpZgojZW5kaWYK --e0cb4e385316acc20f04cbdcab5e Content-Type: text/x-csrc; charset=US-ASCII; name="dltest.c" Content-Disposition: attachment; filename="dltest.c" Content-Transfer-Encoding: base64 X-Attachment-Id: file3 I2RlZmluZSBfR05VX1NPVVJDRQojaW5jbHVkZSA8ZGxmY24uaD4KI2luY2x1ZGUgPGxpbmsuaD4K I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCnN0YXRpYyBpbnQKY2FsbGJh Y2soc3RydWN0IGRsX3BoZHJfaW5mbyAqaW5mbywgc2l6ZV90IHNpemUsIHZvaWQgKmRhdGEpCnsK ICAgIGludCBqOwoKICAgcHJpbnRmKCJuYW1lPSVzICglZCBzZWdtZW50cylcbiIsIGluZm8tPmRs cGlfbmFtZSwKICAgICAgICBpbmZvLT5kbHBpX3BobnVtKTsKCiAgIGZvciAoaiA9IDA7IGogPCBp bmZvLT5kbHBpX3BobnVtOyBqKyspCiAgICAgICAgIHByaW50ZigiXHRcdCBoZWFkZXIgJTJkOiBh ZGRyZXNzPSUxMHBcbiIsIGosCiAgICAgICAgICAgICAodm9pZCAqKSAoaW5mby0+ZGxwaV9hZGRy ICsgaW5mby0+ZGxwaV9waGRyW2pdLnBfdmFkZHIpKTsKICAgIHJldHVybiAwOwp9CgppbnQKbWFp bihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CiAgICB2b2lkICp0ZXN0OwogICAgdGVzdCA9IGRs b3BlbigiL2NvbXBhdC9saW51eC9saWIvbGliYXZsLnNvIiwgUlRMRF9OT1cpOwogICAgZGxfaXRl cmF0ZV9waGRyKGNhbGxiYWNrLCBOVUxMKTsKCiAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKfQo= --e0cb4e385316acc20f04cbdcab5e--