kern/176216: [patch] Allow loading ELF libraries at their preferred base address (needed for Wine)

2013-02-17 Thread Damjan Jovanovic

>Number: 176216
>Category:   kern
>Synopsis:   [patch] Allow loading ELF libraries at their preferred base 
>address (needed for Wine)
>Confidential:   no
>Severity:   non-critical
>Priority:   low
>Responsible:freebsd-bugs
>State:  open
>Quarter:
>Keywords:   
>Date-Required:
>Class:  change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Feb 17 21:00:00 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator: Damjan Jovanovic
>Release:9.1
>Organization:
>Environment:
Any
>Description:
FreeBSD's dynamic linker (/libexec/ld-elf.so.1) currently loads libraries by 
calling mmap() with 0 as the first parameter, causing them to be loaded at 
whatever address the kernel chooses.

But for maximum compatibility with Windows applications, Wine needs some of its 
DLLs to be loaded at particular memory addresses (see the comments on 
https://wiki.freebsd.org/Wine).

With this patch, first mmap() is called with the base address of the library 
and MAP_FIXED, giving the library a chance to load at the base address it 
specified, and if this fails then mmap() is called without MAP_FIXED so the 
library can at least load somewhere else since its preferred memory region is 
unavailable.

>How-To-Repeat:

>Fix:


Patch attached with submission follows:

Index: libexec/rtld-elf/map_object.c
===
--- libexec/rtld-elf/map_object.c   (revision 246877)
+++ libexec/rtld-elf/map_object.c   (working copy)
@@ -175,11 +175,22 @@
 base_vaddr = trunc_page(segs[0]->p_vaddr);
 base_vlimit = round_page(segs[nsegs]->p_vaddr + segs[nsegs]->p_memsz);
 mapsize = base_vlimit - base_vaddr;
-base_addr = hdr->e_type == ET_EXEC ? (caddr_t) base_vaddr : NULL;
+base_addr = (caddr_t) base_vaddr;
 
-mapbase = mmap(base_addr, mapsize, PROT_NONE, MAP_ANON | MAP_PRIVATE |
-  MAP_NOCORE, -1, 0);
+/*
+ * Executables, and libraries whose base_addr isn't 0,
+ * should ideally be loaded at that base_addr.
+ */
+mapbase = (caddr_t) -1;
+if (base_addr != 0) {
+mapbase = mmap(base_addr, mapsize, PROT_NONE, MAP_ANON | MAP_PRIVATE |
+  MAP_NOCORE | MAP_FIXED, -1, 0);
+}
 if (mapbase == (caddr_t) -1) {
+mapbase = mmap(base_addr, mapsize, PROT_NONE, MAP_ANON | MAP_PRIVATE |
+  MAP_NOCORE, -1, 0);
+}
+if (mapbase == (caddr_t) -1) {
_rtld_error("%s: mmap of entire address space failed: %s",
  path, rtld_strerror(errno));
goto error;


>Release-Note:
>Audit-Trail:
>Unformatted:
___
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"


Re: kern/170356: [hyper-v] Installing freebsd on Hyper-V server 2008 R2

2013-02-17 Thread linimon
Synopsis: [hyper-v] Installing freebsd on Hyper-V server 2008 R2

Responsible-Changed-From-To: freebsd-i386->freebsd-bugs
Responsible-Changed-By: linimon
Responsible-Changed-When: Sun Feb 17 22:40:26 UTC 2013
Responsible-Changed-Why: 
reclassify.

http://www.freebsd.org/cgi/query-pr.cgi?pr=170356
___
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"


Re: kern/176201: [net80211] [patch] 11n station includes unrelated ht params into ASSOC_REQ packet

2013-02-17 Thread linimon
Old Synopsis: 11n station includes unrelated ht params into ASSOC_REQ packet
New Synopsis: [net80211] [patch] 11n station includes unrelated ht params into 
ASSOC_REQ packet

Responsible-Changed-From-To: freebsd-bugs->freebsd-wireless
Responsible-Changed-By: linimon
Responsible-Changed-When: Mon Feb 18 02:46:29 UTC 2013
Responsible-Changed-Why: 
Over to maintainer(s).

http://www.freebsd.org/cgi/query-pr.cgi?pr=176201
___
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"


Re: bin/175339: ldd(1) runs linux binaries instead of printing shared library dependencies

2013-02-17 Thread markj
Synopsis: ldd(1) runs linux binaries instead of printing shared library 
dependencies

State-Changed-From-To: open->analyzed
State-Changed-By: markj
State-Changed-When: Mon Feb 18 05:03:50 UTC 2013
State-Changed-Why: 
I'll take it.


Responsible-Changed-From-To: freebsd-bugs->markj
Responsible-Changed-By: markj
Responsible-Changed-When: Mon Feb 18 05:03:50 UTC 2013
Responsible-Changed-Why: 
I'll take it.

http://www.freebsd.org/cgi/query-pr.cgi?pr=175339
___
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"


Re: bin/175491: [libelf] [patch] elf_getdata may return NULL without setting error-message

2013-02-17 Thread markj
Synopsis: [libelf] [patch] elf_getdata may return NULL without setting 
error-message

State-Changed-From-To: open->analyzed
State-Changed-By: markj
State-Changed-When: Mon Feb 18 05:04:08 UTC 2013
State-Changed-Why: 
I'll take it.


Responsible-Changed-From-To: freebsd-bugs->markj
Responsible-Changed-By: markj
Responsible-Changed-When: Mon Feb 18 05:04:08 UTC 2013
Responsible-Changed-Why: 
I'll take it.

http://www.freebsd.org/cgi/query-pr.cgi?pr=175491
___
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"


Re: bin/176136: [patch] cp(1) fails to overwrite a symlink pointing to a directory

2013-02-17 Thread markj
Synopsis: [patch] cp(1) fails to overwrite a symlink pointing to a directory

State-Changed-From-To: open->analyzed
State-Changed-By: markj
State-Changed-When: Mon Feb 18 05:04:24 UTC 2013
State-Changed-Why: 
I'll take it.


Responsible-Changed-From-To: freebsd-bugs->markj
Responsible-Changed-By: markj
Responsible-Changed-When: Mon Feb 18 05:04:24 UTC 2013
Responsible-Changed-Why: 
I'll take it.

http://www.freebsd.org/cgi/query-pr.cgi?pr=176136
___
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"


Re: kern/176216: [libexec] [patch] Allow loading ELF libraries at their preferred base address (needed for Wine)

2013-02-17 Thread Damjan Jovanovic
The following reply was made to PR kern/176216; it has been noted by GNATS.

From: Damjan Jovanovic 
To: bug-follo...@freebsd.org
Cc:  
Subject: Re: kern/176216: [libexec] [patch] Allow loading ELF libraries at
 their preferred base address (needed for Wine)
Date: Mon, 18 Feb 2013 07:31:39 +0200

 --bcaec4485b6f6804d5f90b7c
 Content-Type: text/plain; charset=ISO-8859-1
 
 This is a newer version of the patch that doesn't fail when a library
 can't be loaded at its desired address.
 
 --bcaec4485b6f6804d5f90b7c
 Content-Type: application/octet-stream; name="ld-elf-base-2.patch"
 Content-Disposition: attachment; filename="ld-elf-base-2.patch"
 Content-Transfer-Encoding: base64
 X-Attachment-Id: f_hdb6qx7v0
 
 SW5kZXg6IGxpYmV4ZWMvcnRsZC1lbGYvbWFwX29iamVjdC5jCj09PT09PT09PT09PT09PT09PT09
 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxpYmV4
 ZWMvcnRsZC1lbGYvbWFwX29iamVjdC5jCShyZXZpc2lvbiAyNDY4NzcpCisrKyBsaWJleGVjL3J0
 bGQtZWxmL21hcF9vYmplY3QuYwkod29ya2luZyBjb3B5KQpAQCAtMTc1LDIwICsxNzUsMzAgQEAK
 ICAgICBiYXNlX3ZhZGRyID0gdHJ1bmNfcGFnZShzZWdzWzBdLT5wX3ZhZGRyKTsKICAgICBiYXNl
 X3ZsaW1pdCA9IHJvdW5kX3BhZ2Uoc2Vnc1tuc2Vnc10tPnBfdmFkZHIgKyBzZWdzW25zZWdzXS0+
 cF9tZW1zeik7CiAgICAgbWFwc2l6ZSA9IGJhc2VfdmxpbWl0IC0gYmFzZV92YWRkcjsKLSAgICBi
 YXNlX2FkZHIgPSBoZHItPmVfdHlwZSA9PSBFVF9FWEVDID8gKGNhZGRyX3QpIGJhc2VfdmFkZHIg
 OiBOVUxMOworICAgIGJhc2VfYWRkciA9IChjYWRkcl90KSBiYXNlX3ZhZGRyOwogCi0gICAgbWFw
 YmFzZSA9IG1tYXAoYmFzZV9hZGRyLCBtYXBzaXplLCBQUk9UX05PTkUsIE1BUF9BTk9OIHwgTUFQ
 X1BSSVZBVEUgfAotICAgICAgTUFQX05PQ09SRSwgLTEsIDApOworICAgIC8qIEZpcnN0IHRyeSBs
 b2FkIGl0IGF0IGl0cyBkZXNpcmVkIGFkZHJlc3MgKi8KKyAgICBtYXBiYXNlID0gKGNhZGRyX3Qp
 IC0xOworICAgIGlmIChiYXNlX2FkZHIgIT0gMCkgeworICAgICAgICBtYXBiYXNlID0gbW1hcChi
 YXNlX2FkZHIsIG1hcHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT04gfCBNQVBfUFJJVkFURSB8Cisg
 ICAgICAgICAgTUFQX05PQ09SRSB8IE1BUF9GSVhFRCwgLTEsIDApOworICAgIH0KICAgICBpZiAo
 bWFwYmFzZSA9PSAoY2FkZHJfdCkgLTEpIHsKKwlpZiAoaGRyLT5lX3R5cGUgPT0gRVRfRVhFQykg
 eworCSAgICBfcnRsZF9lcnJvcigiJXM6IGxvYWRpbmcgYXQgYWRkcmVzcyAlcCBmYWlsZWQiLAor
 CQlwYXRoLCBiYXNlX2FkZHIpOworCSAgICBnb3RvIGVycm9yOworCX0gZWxzZSB7CisJICAgIC8q
 IGxpYnJhcmllcyBjYW4gZ28gYW55d2hlcmUgZWxzZSAqLworCSAgICBtYXBiYXNlID0gbW1hcChi
 YXNlX2FkZHIsIG1hcHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT04gfCBNQVBfUFJJVkFURSB8CisJ
 CU1BUF9OT0NPUkUsIC0xLCAwKTsKKwl9CisgICAgfQorICAgIGlmIChtYXBiYXNlID09IChjYWRk
 cl90KSAtMSkgewogCV9ydGxkX2Vycm9yKCIlczogbW1hcCBvZiBlbnRpcmUgYWRkcmVzcyBzcGFj
 ZSBmYWlsZWQ6ICVzIiwKIAkgIHBhdGgsIHJ0bGRfc3RyZXJyb3IoZXJybm8pKTsKIAlnb3RvIGVy
 cm9yOwogICAgIH0KLSAgICBpZiAoYmFzZV9hZGRyICE9IE5VTEwgJiYgbWFwYmFzZSAhPSBiYXNl
 X2FkZHIpIHsKLQlfcnRsZF9lcnJvcigiJXM6IG1tYXAgcmV0dXJuZWQgd3JvbmcgYWRkcmVzczog
 d2FudGVkICVwLCBnb3QgJXAiLAotCSAgcGF0aCwgYmFzZV9hZGRyLCBtYXBiYXNlKTsKLQlnb3Rv
 IGVycm9yMTsKLSAgICB9CiAKICAgICBmb3IgKGkgPSAwOyBpIDw9IG5zZWdzOyBpKyspIHsKIAkv
 KiBPdmVybGF5IHRoZSBzZWdtZW50IG9udG8gdGhlIHByb3BlciByZWdpb24uICovCg==
 --bcaec4485b6f6804d5f90b7c--
___
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"