Copy struct keyctl_dh_params definition into LTP specific struct
ltp_keyctl_dh_params. (Use struct definition from keyutils.h from
keyutils userspace library, UAPI in kernel keeps also private hidden
from C++ by #ifndef guard which we 1) don't need 2) cannot use nested #ifndef.)
This helps to fix compilation on old kernel < 4.20:
keyctl25.c:25:11: error: ‘struct keyctl_dh_params’ has no member named ‘priv’
'priv' struct member was added in kernel v4.20 (which we still support)
in commit 2ecefa0a15fd0 ("keys: Fix the use of the C++ keyword "private"
in uapi/linux/keyctl.h")
Vendoring struct helps us to remove autotools check (speedup).
Fixes: ee02118e9f ("lapi/keyctl.h: Add fallback definitions for extended ops")
Reported-by: linuxtestproject.agent@gmail.com
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
Changes v1->v2:
* Vendor struct instead of using dangerous macro definition.
Link to v1:
https://patchwork.kernel.org/project/ltp/patch/20260921111407.2137467-1-pvorel@suse.cz/
https://lore.kernel.org/ltp/20260922085514.GA2150285@pevik/T/#t
include/lapi/keyctl.h | 5 ++---
m4/ltp-keyutils.m4 | 5 +----
testcases/kernel/syscalls/keyctl/keyctl25.c | 2 +-
testcases/kernel/syscalls/keyctl/keyctl26.c | 2 +-
testcases/kernel/syscalls/keyctl/keyctl27.c | 2 +-
testcases/kernel/syscalls/keyctl/keyctl28.c | 10 +++++-----
6 files changed, 11 insertions(+), 15 deletions(-)
diff --git a/include/lapi/keyctl.h b/include/lapi/keyctl.h
index fdb68d1725..cc49a29b32 100644
--- a/include/lapi/keyctl.h
+++ b/include/lapi/keyctl.h
@@ -61,13 +61,12 @@ static inline key_serial_t keyctl_join_session_keyring(const char *name) {
#endif /* defined(HAVE_KEYUTILS_H) && defined(HAVE_LIBKEYUTILS) */
-#ifndef HAVE_STRUCT_KEYCTL_DH_PARAMS
-struct keyctl_dh_params {
+/* From libkeyutils keyutils.h */
+struct ltp_keyctl_dh_params {
int32_t priv;
int32_t prime;
int32_t base;
};
-#endif
#ifndef HAVE_STRUCT_KEYCTL_KDF_PARAMS
struct keyctl_kdf_params {
diff --git a/m4/ltp-keyutils.m4 b/m4/ltp-keyutils.m4
index 35bad783e5..b073183405 100644
--- a/m4/ltp-keyutils.m4
+++ b/m4/ltp-keyutils.m4
@@ -9,9 +9,6 @@ AC_DEFUN([LTP_CHECK_KEYUTILS_SUPPORT], [
[AC_DEFINE(HAVE_LIBKEYUTILS, 1, [Define to 1 if you have libkeyutils installed.])
AC_SUBST(KEYUTILS_LIBS, "-lkeyutils")])
- AC_CHECK_TYPES([struct keyctl_dh_params, struct keyctl_kdf_params,
- struct keyctl_pkey_query, struct keyctl_pkey_params],,,
+ AC_CHECK_TYPES([struct keyctl_kdf_params, struct keyctl_pkey_query, struct keyctl_pkey_params],,,
[#include <linux/keyctl.h>])
-
- AC_CHECK_MEMBERS([struct keyctl_dh_params.priv],,,[#include <linux/keyctl.h>])
])
diff --git a/testcases/kernel/syscalls/keyctl/keyctl25.c b/testcases/kernel/syscalls/keyctl/keyctl25.c
index d1aa3425d4..a99503183a 100644
--- a/testcases/kernel/syscalls/keyctl/keyctl25.c
+++ b/testcases/kernel/syscalls/keyctl/keyctl25.c
@@ -15,7 +15,7 @@
#include "keyctl_common.h"
#include "keyctl_dh_data.h"
-static struct keyctl_dh_params *dh_params;
+static struct ltp_keyctl_dh_params *dh_params;
static unsigned char out_buf[256];
static void setup(void)
diff --git a/testcases/kernel/syscalls/keyctl/keyctl26.c b/testcases/kernel/syscalls/keyctl/keyctl26.c
index bdd852fb4c..df80aadb6c 100644
--- a/testcases/kernel/syscalls/keyctl/keyctl26.c
+++ b/testcases/kernel/syscalls/keyctl/keyctl26.c
@@ -15,7 +15,7 @@
#include "keyctl_common.h"
#include "keyctl_dh_data.h"
-static struct keyctl_dh_params *dh_params;
+static struct ltp_keyctl_dh_params *dh_params;
static void setup(void)
{
diff --git a/testcases/kernel/syscalls/keyctl/keyctl27.c b/testcases/kernel/syscalls/keyctl/keyctl27.c
index 13a1538ce6..0ecf7dc389 100644
--- a/testcases/kernel/syscalls/keyctl/keyctl27.c
+++ b/testcases/kernel/syscalls/keyctl/keyctl27.c
@@ -19,7 +19,7 @@
#define KDF_OTHERINFO "LTP-KDF-TEST-INFO"
-static struct keyctl_dh_params *dh_params;
+static struct ltp_keyctl_dh_params *dh_params;
static struct keyctl_kdf_params *kdf_params;
static unsigned char out_buf[32];
diff --git a/testcases/kernel/syscalls/keyctl/keyctl28.c b/testcases/kernel/syscalls/keyctl/keyctl28.c
index 4c7f6be17e..53a59322b4 100644
--- a/testcases/kernel/syscalls/keyctl/keyctl28.c
+++ b/testcases/kernel/syscalls/keyctl/keyctl28.c
@@ -21,9 +21,9 @@
#include "keyctl_common.h"
#include "keyctl_dh_data.h"
-static struct keyctl_dh_params *dh_params;
-static struct keyctl_dh_params *dh_bogus_prime;
-static struct keyctl_dh_params *dh_nonuser_prime;
+static struct ltp_keyctl_dh_params *dh_params;
+static struct ltp_keyctl_dh_params *dh_bogus_prime;
+static struct ltp_keyctl_dh_params *dh_nonuser_prime;
static struct keyctl_kdf_params *kdf_valid;
static struct keyctl_kdf_params *kdf_spare_nonzero;
@@ -33,7 +33,7 @@ static struct keyctl_kdf_params *kdf_unknown_hash;
static unsigned char out_buf[1025];
static struct tcase {
- struct keyctl_dh_params **params;
+ struct ltp_keyctl_dh_params **params;
void *buffer;
size_t buflen;
struct keyctl_kdf_params **kdf;
@@ -105,7 +105,7 @@ static void setup(void)
static void verify_negative(unsigned int n)
{
struct tcase *tc = &tcases[n];
- struct keyctl_dh_params *p = *tc->params;
+ struct ltp_keyctl_dh_params *p = *tc->params;
struct keyctl_kdf_params *kdf = tc->kdf ? *tc->kdf : NULL;
TST_EXP_FAIL2(keyctl(KEYCTL_DH_COMPUTE, (unsigned long)p,
--
2.55.0