On Wed, Aug 9, 2017 at 1:00 AM, Dmitry V. Levin <ldv@xxxxxxxxxxxx> wrote: > On Sun, Aug 06, 2017 at 06:44:06PM +0200, Mikko Rapeli wrote: >> This libc header has sockaddr definition in user space. >> >> Fixes user space compilation errors like these from kernel headers including >> only linux/socket.h: >> >> error: field ‘ifru_addr’ has incomplete type >> struct sockaddr ifru_addr; >> error: field ‘_sockaddr’ has incomplete type >> struct sockaddr _sockaddr; >> error: invalid application of ‘sizeof’ to incomplete type ‘struct sockaddr’ >> >> With this following uapi headers now compile in user space: >> >> rdma/rdma_user_rxe.h >> linux/vm_sockets.h >> linux/ncp_fs.h >> linux/nfc.h >> linux/phonet.h >> >> >> +#ifndef __KERNEL__ >> +#include <sys/socket.h> >> +#endif > > This is scary because of infamous libc vs uapi interoperability issues. > Couldn't we fix affected headers instead? Yes, I think that would be better. Maybe we can introduce a 'struct __kernel_sockaddr' in include/uapi/linux/socket.h to go along with __kernel_sa_family_t and __kernel_sockaddr_storage, and then use those types in the other kernel headers? Arnd -- To unsubscribe from this list: send the line "unsubscribe linux-api" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html