public inbox for glibc-bugs@sourceware.org help / color / mirror / Atom feed
From: "stsp at users dot sourceforge.net" <sourceware-bugzilla@sourceware.org> To: glibc-bugs@sourceware.org Subject: [Bug dynamic-link/30127] [rfe]: enable ld audit at run-time Date: Mon, 13 Mar 2023 10:46:54 +0000 [thread overview] Message-ID: <bug-30127-131-FYSRJMZ1SX@http.sourceware.org/bugzilla/> (raw) In-Reply-To: <bug-30127-131@http.sourceware.org/bugzilla/> https://sourceware.org/bugzilla/show_bug.cgi?id=30127 --- Comment #45 from Stas Sergeev <stsp at users dot sourceforge.net> --- (In reply to Jonathon Anderson from comment #43) > I can consider that a good enough reason not to compile the ancient code as > 32-bit. But the compatibility libraries are surely much newer, can't they be > compiled 64-bit? Indeed, that's the case. I wouldn't go into such a long and deep hoops (where glibc is by far not the only obstacle) to just compile things for 32bits. :) > > I can set up the initial stack from my > > shim lib, and if an app wants to switch > > stacks (which is very unlikely), it will > > have to use the heap space, which is under > > my control. > How? The initial stack is set up by the kernel before the executable is even > mapped. The initial stack of what? Of an executable - indeed. But not of the lib I run through dlmem(). I call its entry manually, after setting up the things (including stack). > Do you switch stacks in your shim library, after the VM memory > region is decided upon? Indeed. These things are done through makecontext(). > While on the topic (and mostly out of curiosity), what do you do when the > 64-bit code allocates more than 4GB of memory? This 64bit code is compiled from ancient sources, that shouldn't do that. So if it does, it will just get the malloc() failure. I run it with the custom libc - that allows me to control everything. No direct host calls are allowed. I am using RTLD_DEEPBIND and a new NS. Well, "using" is a too loud statement, as before things settled to glibc, I have only a rough tests and prototypes. But I tried similar concepts in the past, so I am pretty sure the scheme is functional. > > by doing 2 mappings of the same lib. > ...If all you wanted was to mmap the solib to another address, you can > already do that using mmap and /proc/self/map_files/. Maybe dl_iterate_phdr. That can only work for loadable sections, I believe. .bss cannot be shared that way, and likely much more. > The only reason any extension to Glibc is needed is if you wanted > (reloc_base_address != mmap_address). Which, to reiterate, is completely > nonsensical. But as I already mentioned, I do 2 identical mappings. One at reloc address, one at mmap address. So even though reloc_address!=mmap_address, things do work, because because the one at mmap_address is only used for data accesses, and the one at reloc_address is used for everything (like code calls). > I really don't understand. The ISA is different between the "worlds," the > relocation base address will always be wrong in one "world" and make the > solib useless there. Not quite useless: data access by 32bit code is done there. Everything else is done at another address. So every mapping does only what it can. > I see no way for an solib to function in both "worlds." AFAICT the best you > can do is "manually" (i.e. not via data symbols) access the data segment > from the "other world," functions simply won't work. Indeed! Functions will work when shim calls them (via the right mapping). "not via data symbols" is not a problem, because when the call is in the VMs "world", it has the ready to use pointers inside the call arguments, and nothing else. Only these pointers should work there. These pointers lead to a reloc address, but because the VM window is itself shifted, they need to go through the alias at mmap_address to reach their destination at reloc_address. mmap_address=reloc_address+VM_window_start > You can specify the backing-store fd with classic dlopen and /proc/self/fd/. > That's a very simple solution, and requires no changes to Glibc. Not sure I understand that part. dlopen() uses source fd to map it to reloc_address, but the data sections are just anonymously mapped. So I am lost, what does /proc/self/fd do with all that? > Glibc patches. As noted above, I'm not yet confident your use case would > work even if you could specify the reloc base address. > > I don't see any reason to support the (reloc base address != mmap address) > case. It's utter nonsense. If alone - yes. But when you have multiple mappings, one of which is still at reloc_address, then things magically start to work again. Probably you still haven't realized the whole power of la_premap_dlmem(). Please note that la_premap_dlmem() is not the same as la_premap(). These are different extensions, but when they play together, that can do Real Things (TM). > AFAICT these discussions are all solved by memfd_create. Almost all of the > complaints revolve around the memory vs. disk performance difference, I am getting a bit nervous already when people mention memfd_create(). :) In what way is it any better than shm_open(), that I used in my la_premap_dlmem() example? Yes, I could also use memfd_create() with la_premap_dlmem(), but I prefer shm_open(). Why people think that memfd_create() is the thing, is unclear to me. :) But it fits my design very well, as does shm_open(). > memfd_create is a very easy way to get a memory-backed file on modern Linux > boxes. ... and provide it to la_premap_dlmem(). But I'll use shm_open! :) > > Mapping to specific address was requested: > > https://stackoverflow.com/questions/62064806/is-there-a-way-to-specify-the- > > base-address-of-a-shared-library-using-dlopen > I'm as confused as the answer's author on what the OP's actual use case is > here. Given the OP's lack of response to the request for context, I wouldn't > consider this worth much attention. Well, I am not saying these examples deserve much of an attention. But I used them to bring up an API that at least is requested multiple times, and layer the rest on top. The warning here is the next time you'll deal with much more alien and complicated API that won't solve the entire task even. So why not to use mine, its was requested multiple times, its written, it will be proven (within this thread) to solve the stated task, and very unlikely some hack can be proposed as an alternative. -- You are receiving this mail because: You are on the CC list for the bug.
next prev parent reply other threads:[~2023-03-13 10:46 UTC|newest] Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-02-15 8:23 [Bug dynamic-link/30127] New: " stsp at users dot sourceforge.net 2023-02-16 18:42 ` [Bug dynamic-link/30127] " fweimer at redhat dot com 2023-02-17 2:54 ` stsp at users dot sourceforge.net 2023-02-17 7:17 ` stsp at users dot sourceforge.net 2023-02-17 8:08 ` fweimer at redhat dot com 2023-02-17 8:38 ` stsp at users dot sourceforge.net 2023-02-17 8:56 ` fweimer at redhat dot com 2023-02-17 9:32 ` stsp at users dot sourceforge.net 2023-02-17 9:38 ` stsp at users dot sourceforge.net 2023-02-17 9:44 ` stsp at users dot sourceforge.net 2023-02-17 10:23 ` fweimer at redhat dot com 2023-02-17 10:59 ` stsp at users dot sourceforge.net 2023-02-17 12:46 ` fweimer at redhat dot com 2023-02-17 13:43 ` schwab@linux-m68k.org 2023-02-17 13:55 ` stsp at users dot sourceforge.net 2023-02-17 13:57 ` stsp at users dot sourceforge.net 2023-02-20 8:33 ` fweimer at redhat dot com 2023-02-21 15:39 ` stsp at users dot sourceforge.net 2023-02-21 19:43 ` janderson at rice dot edu 2023-02-21 20:09 ` stsp at users dot sourceforge.net 2023-02-22 16:46 ` stsp at users dot sourceforge.net 2023-02-23 16:02 ` janderson at rice dot edu 2023-02-23 16:35 ` stsp at users dot sourceforge.net 2023-02-24 18:02 ` stsp at users dot sourceforge.net 2023-02-25 16:57 ` stsp at users dot sourceforge.net 2023-02-25 18:49 ` carlos at redhat dot com 2023-02-25 19:00 ` stsp at users dot sourceforge.net 2023-02-26 16:54 ` janderson at rice dot edu 2023-02-26 17:22 ` stsp at users dot sourceforge.net 2023-02-26 19:22 ` stsp at users dot sourceforge.net 2023-03-02 14:39 ` stsp at users dot sourceforge.net 2023-03-02 16:13 ` janderson at rice dot edu 2023-03-02 19:56 ` stsp at users dot sourceforge.net 2023-03-03 6:20 ` janderson at rice dot edu 2023-03-03 12:36 ` stsp at users dot sourceforge.net 2023-03-04 11:33 ` stsp at users dot sourceforge.net 2023-03-06 9:12 ` janderson at rice dot edu 2023-03-06 10:09 ` stsp at users dot sourceforge.net 2023-03-06 10:56 ` stsp at users dot sourceforge.net 2023-03-07 8:54 ` janderson at rice dot edu 2023-03-07 16:50 ` stsp at users dot sourceforge.net 2023-03-12 8:42 ` stsp at users dot sourceforge.net 2023-03-13 9:22 ` janderson at rice dot edu 2023-03-13 9:41 ` janderson at rice dot edu 2023-03-13 10:01 ` stsp at users dot sourceforge.net 2023-03-13 10:46 ` stsp at users dot sourceforge.net [this message] 2023-03-13 11:17 ` stsp at users dot sourceforge.net 2023-03-13 20:26 ` stsp at users dot sourceforge.net 2023-03-14 15:11 ` stsp at users dot sourceforge.net 2023-03-15 5:34 ` janderson at rice dot edu
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=bug-30127-131-FYSRJMZ1SX@http.sourceware.org/bugzilla/ \ --to=sourceware-bugzilla@sourceware.org \ --cc=glibc-bugs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).