From c09b5fd7e6c766b0fe6c77b54673893676d867f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20=C5=BBenczykowski?= Date: Fri, 7 Feb 2025 12:01:42 -0800 Subject: [PATCH] Revert "ANDROID: eliminate 'CONFIG_GKI_NET_XFRM_HACKS'" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This partially reverts commit 1cf1608b4abd89ba850ecbfbba0108e34b179a3c. (https://android-review.googlesource.com/c/kernel/common/+/3216798 on android-mainline from before 6.12 branch) We still need this to support XFRM on 32-bit userspace on aarch64, the Android way to do this involves not doing compat translation. Bug: 163141236 Test: TreeHugger Signed-off-by: Maciej Żenczykowski Change-Id: I18db5f1b75b09b254b751bb5eb2843815b88899e --- init/Kconfig.gki | 6 ++++++ net/xfrm/xfrm_state.c | 3 ++- net/xfrm/xfrm_user.c | 3 ++- 3 files changed, 10 insertions(+), 2 deletions(-) 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)