xfrm: add x86 CONFIG_COMPAT support
From: Florian Westphal <fw@strlen.de>
Date: 2010-02-15 16:46:29
At the moment it is not possible to use the xfrm netlink interface on x86_64 with a 32bit userland. The problem exists because a few structures, e.g. struct xfrm_usersa_info, have different sizes in user/kernelspace (3 byte padding on x86, 7 byte on x86_64) due to different alignment requirements of "u64". The following patch set aims to resolve this. The first two patches add necessary CONFIG_COMPAT_NETLINK_MESSAGES infrastructure to the netlink in/output path. Patch 3 is a refactoring patch to split functionality (especially nlmsg allocation and adding data to the nlmsg) in order to re-use code and ease review. Patch 4 adds CONFIG_COMPAT_FOR_U64_ALIGNMENT support to xfrm. Patch 5 sets CMSG_MSG_COMPAT in sock_aio_write(), depending on is_compat_task(). If patch 5 is deemed too ugly, just pretend it doesn't exist; userspace can be patched to use sendmsg instead of write() to avoid this problem. include/linux/netlink.h | 1 net/netlink/af_netlink.c | 11 net/socket.c | 4 net/xfrm/Kconfig | 1 net/xfrm/xfrm_user.c | 524 ++++++++++++++++++++++++++++++++++++++++++----- 5 files changed, 488 insertions(+), 53 deletions(-)