Linux Test Project
 help / color / mirror / Atom feed
From: Petr Vorel <pvorel@suse.cz>
To: Cyril Hrubis <chrubis@suse.cz>,
	ltp@lists.linux.it, Li Wang <li.wang@linux.dev>,
	Avinesh Kumar <avinesh.kumar@suse.com>, Wei Gao <wegao@suse.com>,
	Andrea Cervesato <andrea.cervesato@suse.com>,
	linuxtestproject.agent@gmail.com
Subject: Re: [LTP] [PATCH 1/1] lapi/keyctl.h: Fix compilation on old kernel
Date: Tue, 22 Sep 2026 10:55:14 +0200	[thread overview]
Message-ID: <20260922085514.GA2150285@pevik> (raw)
In-Reply-To: <20260921134111.GB2143203@pevik>

> > > Hi!
> > > > diff --git a/include/lapi/keyctl.h b/include/lapi/keyctl.h
> > > > index fdb68d1725..e1e46b7865 100644
> > > > --- a/include/lapi/keyctl.h
> > > > +++ b/include/lapi/keyctl.h
> > > > @@ -69,6 +69,12 @@ struct keyctl_dh_params {
> > > >  };
> > > >  #endif

> > > > +/* Fix for kernel < v4.20 */
> > > > +#if defined(HAVE_STRUCT_KEYCTL_DH_PARAMS) && \
> > > > +	!defined(HAVE_STRUCT_KEYCTL_DH_PARAMS_PRIV)
> > > > +# define priv private
> > > > +#endif

> > > I do not like this one, we may end up redefining wrong priv and break
> > > everything.

> > > Given that the private stil exists in the structure for C code:

> > > (/usr/include/linux/keyctl.h)
> > > /* keyctl structures */
> > > struct keyctl_dh_params {
> > >         union {
> > > #ifndef __cplusplus
> > >                 __s32 private;
> > > #endif
> > >                 __s32 priv;
> > >         };
> > >         __s32 prime;
> > >         __s32 base;
> > > };

FYI the userspace keyutils.h uses only priv [1]:

struct keyctl_dh_params {
	key_serial_t priv;
	key_serial_t prime;
	key_serial_t base;
};

[1] https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/keyutils.git/tree/keyutils.h

> > > We may as well use private in the tests consistently and update our
> > > fallback with the union as well.

Thinking about it twice, I think the original solution is safe enough, based on
autotools check. As I wrote before if you really don't want it, we'd need to
vendor the struct. At that point we don't need private.

Look at the diff I posted (I can post it officially as v2). The cons is
maintaining the struct (but we do it for the fallback anyway). Pros is getting
rid some of autotools checks (small speedup).

WDYT?

Kind regards,
Petr

> > When I looked in the struct in UAPI I considered define better, but indeed
> > mirroring UAPI the same way is really better.

> > I'll retest it and send v2.

> Just the only thing - we will need to have to use our custom struct
> e.g.  ltp_keyctl_dh_params (similarly to ltp_statx), because the problem is on
> the code which defines struct keyctl_dh_params, but without that fallback.

> Kind regards,
> Petr

> > Kind regards,
> > Petr

diff --git include/lapi/keyctl.h include/lapi/keyctl.h
index fdb68d1725..d1cea85aba 100644
--- include/lapi/keyctl.h
+++ include/lapi/keyctl.h
@@ -61,13 +61,11 @@ 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 {
+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 m4/ltp-keyutils.m4 m4/ltp-keyutils.m4
index 35bad783e5..b073183405 100644
--- m4/ltp-keyutils.m4
+++ 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 testcases/kernel/syscalls/keyctl/keyctl25.c testcases/kernel/syscalls/keyctl/keyctl25.c
index d1aa3425d4..a99503183a 100644
--- testcases/kernel/syscalls/keyctl/keyctl25.c
+++ 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 testcases/kernel/syscalls/keyctl/keyctl26.c testcases/kernel/syscalls/keyctl/keyctl26.c
index bdd852fb4c..df80aadb6c 100644
--- testcases/kernel/syscalls/keyctl/keyctl26.c
+++ 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 testcases/kernel/syscalls/keyctl/keyctl27.c testcases/kernel/syscalls/keyctl/keyctl27.c
index 13a1538ce6..0ecf7dc389 100644
--- testcases/kernel/syscalls/keyctl/keyctl27.c
+++ 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 testcases/kernel/syscalls/keyctl/keyctl28.c testcases/kernel/syscalls/keyctl/keyctl28.c
index 4c7f6be17e..53a59322b4 100644
--- testcases/kernel/syscalls/keyctl/keyctl28.c
+++ 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,

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2026-09-22  8:55 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-21 11:14 [LTP] [PATCH 1/1] lapi/keyctl.h: Fix compilation on old kernel Petr Vorel
2026-09-21 11:52 ` Cyril Hrubis
2026-09-21 13:36   ` Petr Vorel
2026-09-21 13:41     ` Petr Vorel
2026-09-22  8:55       ` Petr Vorel [this message]
2026-09-21 13:46 ` [LTP] " linuxtestproject.agent

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260922085514.GA2150285@pevik \
    --to=pvorel@suse.cz \
    --cc=andrea.cervesato@suse.com \
    --cc=avinesh.kumar@suse.com \
    --cc=chrubis@suse.cz \
    --cc=li.wang@linux.dev \
    --cc=linuxtestproject.agent@gmail.com \
    --cc=ltp@lists.linux.it \
    --cc=wegao@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox