kisslinux / repo

KISS Linux - Official Repositories
https://kisslinux.github.io
MIT License
400 stars 101 forks source link

linux-headers: include linux/stddef.h in swab.h uapi header #358

Closed dacyberduck closed 2 years ago

dacyberduck commented 2 years ago

swab.h uses __always_inline without including the header where it is defined, this is exposed by musl based distributions where this macro is not defined by system C library headers unlike glibc where it is defined in sys/cdefs.h and that header gets pulled in indirectly via

features.h -> sys/cdefs.h

and features.h gets pulled in a lot of headers. Therefore it may work in cases where features.h is includes but not otherwise.

The issue is generally encountered when compiling newer kernels.

Adding linux/stddef.h here ensures that __always_inline is always defined independent of which C library is used in userspace


---
 include/uapi/linux/swab.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/include/uapi/linux/swab.h b/include/uapi/linux/swab.h
index 7272f85d6..2912fe463 100644
--- a/include/uapi/linux/swab.h
+++ b/include/uapi/linux/swab.h
@@ -3,6 +3,7 @@
 #define _UAPI_LINUX_SWAB_H

 #include <linux/types.h>
+#include <linux/stddef.h>
 #include <linux/compiler.h>
 #include <asm/bitsperlong.h>
 #include <asm/swab.h>
dacyberduck commented 2 years ago

It seems like the small snippet in the installation wiki helps fix the issue. It was my stupidity that I completely ignored that line.

dylanaraps commented 2 years ago

Does fixing this issue in our linux-headers package mitigate the need to use the snippet in the installation guide?