diff --git a/init/Kconfig.gki b/init/Kconfig.gki index f6ec49f17376..743019f4dcea 100644 --- a/init/Kconfig.gki +++ b/init/Kconfig.gki @@ -261,6 +261,11 @@ config GKI_TASK_STRUCT_VENDOR_SIZE_MAX task_struct dynamically when the GKI_DYNAMIC_TASK_STRUCT_SIZE option is enabled. +config GKI_NET_XFRM_HACKS + bool "XFRM changes required by Android" + help + Android Networking tests fail without this. + # Atrocities needed for # a) building GKI modules in separate tree, or # b) building drivers that are not modularizable @@ -270,6 +275,7 @@ config GKI_TASK_STRUCT_VENDOR_SIZE_MAX # config GKI_HACKS_TO_FIX bool "GKI Dummy config options" + select GKI_NET_XFRM_HACKS select GKI_HIDDEN_CRYPTO_CONFIGS select GKI_HIDDEN_DRM_CONFIGS select GKI_HIDDEN_MCP251XFD_CONFIGS diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c index 37478d36a8df..e041a9dec8ea 100644 --- a/net/xfrm/xfrm_state.c +++ b/net/xfrm/xfrm_state.c @@ -2685,7 +2685,8 @@ int xfrm_user_policy(struct sock *sk, int optname, sockptr_t optval, int optlen) if (IS_ERR(data)) return PTR_ERR(data); - if (in_compat_syscall()) { + /* Use the 64-bit / untranslated format on Android, even for compat */ + if (!IS_ENABLED(CONFIG_GKI_NET_XFRM_HACKS) && in_compat_syscall()) { struct xfrm_translator *xtr = xfrm_get_translator(); if (!xtr) { diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c index e3b8ce89831a..7498f8c798fc 100644 --- a/net/xfrm/xfrm_user.c +++ b/net/xfrm/xfrm_user.c @@ -3268,7 +3268,8 @@ static int xfrm_user_rcv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, if (!netlink_net_capable(skb, CAP_NET_ADMIN)) return -EPERM; - if (in_compat_syscall()) { + /* Use the 64-bit / untranslated format on Android, even for compat */ + if (!IS_ENABLED(CONFIG_GKI_NET_XFRM_HACKS) && in_compat_syscall()) { struct xfrm_translator *xtr = xfrm_get_translator(); if (!xtr)