Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAH9TF6MMbjxRoQpEy--sxK-Cx2SMEG-pn3eiYK_EoWKF2nrSaA@mail.gmail.com>
Date: Tue, 23 Jul 2024 23:42:51 +0200
From: Alex Rønne Petersen <alex@...xrp.com>
To: musl@...ts.openwall.com
Subject: Stack pointer is misaligned when invoking the musl dynamic linker
 directly to run a program without start files

Hi,

Repro:

    $ cat test.s
    .global _start
    _start:
    mov %rsp, %rdi
    and $15, %rdi
    call exit
    $ musl-gcc test.s -nostartfiles
    $ ./a.out; echo $?
    0
    $ /lib64/ld-linux-x86-64.so.2 ./a.out; echo $?
    0
    $ /lib/ld-musl-x86_64.so.1 ./a.out; echo $?
    8
    $ /lib/ld-musl-x86_64.so.1 --version
    musl libc (x86_64)
    Version 1.2.3

I could well be missing something here, but at first glance, this
*seems* like an ABI violation; the x86-64 psABI [0] states in §3.4.1
that RSP is guaranteed to be 16-byte aligned on process entry. The
same is true of many other architectures (though the amount obviously
differs).

I suppose it's debatable whether a program interpreter ought to be
required to uphold the same guarantees as the kernel on process
initialization?

[0] https://gitlab.com/x86-psABIs/x86-64-ABI

Regards,
Alex

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.