Date: Thu, 14 Sep 2023 08:18:35 -0400 From: Rich Felker <dalias@...c.org> To: Joakim Sindholt <opensource@...sha.com> Cc: musl@...ts.openwall.com, James R T <jamestiotio@...il.com> Subject: Re: [PATCH] Add a safe dequeue integrity check for mallocng On Thu, Sep 14, 2023 at 11:23:08AM +0200, Joakim Sindholt wrote: > On Thu, 14 Sep 2023 13:13:23 +0800, James R T <jamestiotio@...il.com> wrote: > > On Sat, Sep 9, 2023 at 8:48 AM Rich Felker <dalias@...c.org> wrote: > > > > > > This could and should be written with the assert macro, like all the > > > other safety assertions in mallocng, not pulling in stdio and abort. > > > > Understood. I was not able to find an assert with `predict_false` for > > the condition. Should I add one assert function with `predict_false` > > in `include/assert.h` or `src/exit/assert.c` or simply use the regular > > assert? > > It's a little confusing but assert() in mallocng is not real assert(): > http://git.musl-libc.org/cgit/musl/tree/src/malloc/mallocng/glue.h#n33 > The issue is that if memory is under control of an attacker then doing > anything at all, especially running the stdio machinery, is unsafe. To > that end musl uses a_crash() here which expands to a minimal set of > instructions to crash the process: > http://git.musl-libc.org/cgit/musl/tree/arch/x86_64/atomic_arch.h#n106 Yes. mallocng is written such that you could use the normal assert with it, but presently it's just expanding to a_crash(). At some point this might be revamped to crash with a message string in a particular register or argument slot or something so that you get a bit more meaningful information if looking at it in a debugger. And indeed, the reason not to do any message printing, etc. is that you're running in a known-compromised process state where any further complex execution is unsafe (e.g. if the out-of-band malloc metadata was clobbered, the function pointers in stderr might also have been clobbered, since the latter are *easier to reach* than the OOB metadata). > Furthermore, musl doesn't use any of thosed tagged branch tricks and I > personally doubt it would make any difference. Yes, the only reason libm.h has them is because nsz is using the code in other environments that want them, and it made sense to avoid gratuitous differences. We don't generally use those in musl. If the compiler isn't generating good code and puts the failure path as a hot path, we probably should explore whether the compiler is missing that it's a does-not-return thing (which should always be treated as cold). But indeed I doubt it makes a difference. Rich
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.