I know I am hijacking this patch email. But I am glad to report that I was 
able to run unmodified /bin/ls on OSv with this patch:

diff --git a/linux.cc b/linux.cc
index d1cd61b7..2bb47f8c 100644
--- a/linux.cc
+++ b/linux.cc
@@ -445,3 +445,8 @@ extern "C" long syscall_wrapper(long number, long p1, 
long p2, long p3, long p4,
     }
     return ret;
 }
+
+extern "C" {
+const char *__progname = "/ls";
+const char *__progname_full = "/ls";
+}


OSv v0.52.0-2-geb28d3bd
eth0: 192.168.122.15
dev  etc  hello  libenviron.so libvdso.so  proc  tmp  tools  usr


On Sunday, October 28, 2018 at 4:55:24 PM UTC-4, Nadav Har'El wrote:
>
>
> On Sun, Oct 28, 2018 at 10:14 PM Waldek Kozaczuk <[email protected] 
> <javascript:>> wrote:
>
>>
>> BTW I have noticed that on my latest Ubuntu 18.10 distribution programs 
>> like 'ls' and 'grep' seems to be pies as well.
>>
>> file hello
>> hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), 
>> dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 
>> 3.2.0, BuildID[sha1]=e9c4234db3592c18920f9e0eb2d49eecf0fa5e4c, not stripped
>>
>> file /bin/ls
>> /bin/ls: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), 
>> dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 
>> 3.2.0, BuildID[sha1]=bf40cb84e7815de09fa792a097061886933e56fa, stripped
>>
>>
> PIE have a security benefit - being able to load them at a random address, 
> so have become fashionable.
>  
>
>> When I tried to run unmodified '/bin/ls' on OSv I got this error:
>>
>> /ls: failed looking up symbol __progname in other objects
>>
>
> This can probably be fixed relatively easily. Worth at least opening an 
> issue.
>  
>
>>
>> [backtrace]
>> 0x000000000034c26b <elf::object::symbol_other(unsigned int)+315>
>> 0x000000000039f3e0 <elf::object::arch_relocate_rela(unsigned int, 
>> unsigned int, void*, long)+224>
>> 0x000000000034a5e4 <elf::object::relocate_rela()+148>
>> 0x000000000034d1d7 <elf::object::relocate()+199>
>> 0x0000000000350adc 
>> <elf::program::load_object(std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> >, 
>> std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, 
>> std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> > > >, 
>> std::vector<std::shared_ptr<elf::object>, 
>> std::allocator<std::shared_ptr<elf::object> > >&)+1452>
>> 0x0000000000351330 
>> <elf::program::get_library(std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> >, 
>> std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, 
>> std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> > > >, bool)+336>
>> 0x000000000042b73b 
>> <osv::application::application(std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> > const&, 
>> std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, 
>> std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> > > > const&, bool, 
>> std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, 
>> std::allocator<char> >, std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> >, 
>> std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, 
>> std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> > >, 
>> std::allocator<std::pair<std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> > const, 
>> std::__cxx11::basic_string<char, std::char_traits<char>, 
>> std::allocator<char> > > > > const*, std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> > const&, 
>> std::function<0x000000000042bfbc 
>> <osv::application::run(std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> > const&, 
>> std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, 
>> std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> > > > const&, bool, 
>> std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, 
>> std::allocator<char> >, std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> >, 
>> std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, 
>> std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> > >, 
>> std::allocator<std::pair<std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> > const, 
>> std::__cxx11::basic_string<char, std::char_traits<char>, 
>> std::allocator<char> > > > > const*, std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> > const&, std::function<void 
>> ()>0x000000000042c22b 
>> <osv::application::run(std::vector<std::__cxx11::basic_string<char, 
>> std::char_traits<char>, std::allocator<char> >, 
>> std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, 
>> std::allocator<char> > > > const&)+91>
>> 0x0000000000219e06 <do_main_thread(void*)+1942>
>> 0x0000000000459fb5 <???+4562869>
>> 0x00000000003f9186 <thread_main_c+38>
>> 0x000000000039b172 <???+3780978>
>>
>> So I wonder how close OSv is to be able to run unmodified Linux 
>> executables like ls and grep as long as they are PIEs. 
>>
>
> Indeed, we should be very close to doing that (and we're already compiling 
> as PIE for some of the apps.git examples) but there're a couple of 
> unfortunate issues left which aren't very easy to fix:
>
> https://github.com/cloudius-systems/osv/issues/352
> https://github.com/cloudius-systems/osv/issues/689
>
> Without fixing those, we can run some PIEs, but not all of them.
>
>

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to