On 10/11/21 12:49 AM, Ammar Faizi wrote: > Add `__attribute__((__aligned__))` to the `user_p` to guarantee > pointer returned by the `malloc()` is properly aligned for user. > > This attribute asks the compiler to align a type to the maximum > useful alignment for the target machine we are compiling for, > which is often, but by no means always, 8 or 16 bytes [1]. > > Link: https://gcc.gnu.org/onlinedocs/gcc-11.2.0/gcc/Common-Variable-Attributes.html#Common-Variable-Attributes [1] > Fixes: https://github.com/axboe/liburing/issues/454 > Reported-by: Louvian Lyndal <louvianlyndal@xxxxxxxxx> > Signed-off-by: Ammar Faizi <ammar.faizi@xxxxxxxxxxxxxxxxxxxxx> > --- > src/nolibc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/nolibc.c b/src/nolibc.c > index 5582ca0..251780b 100644 > --- a/src/nolibc.c > +++ b/src/nolibc.c > @@ -20,7 +20,7 @@ void *memset(void *s, int c, size_t n) > > struct uring_heap { > size_t len; > - char user_p[]; > + char user_p[] __attribute__((__aligned__)); > }; This seems to over-align for me, at 16 bytes where 8 bytes would be fine. What guarantees does malloc() give? -- Jens Axboe