From mboxrd@z Thu Jan 1 00:00:00 1970 From: mathew.j.martineau@linux.intel.com (Mat Martineau) Date: Mon, 24 Sep 2018 09:52:41 -0700 (PDT) Subject: [PATCH 2/2] keys: Fix the use of the C++ keyword "private" in uapi/linux/keyctl.h In-Reply-To: <153779152340.28003.6461494237075964365.stgit@warthog.procyon.org.uk> References: <153779150602.28003.4692837431529288988.stgit@warthog.procyon.org.uk> <153779152340.28003.6461494237075964365.stgit@warthog.procyon.org.uk> Message-ID: To: linux-security-module@vger.kernel.org List-Id: linux-security-module.vger.kernel.org On Mon, 24 Sep 2018, David Howells wrote: > The keyctl_dh_params struct in uapi/linux/keyctl.h contains the symbol > "private" which means that the header file will cause compilation failure > if #included in to a C++ program. Further, the patch that added the same > struct to the keyutils package named the symbol "priv", not "private". > > The previous attempt to fix this (commit 8a2336e549d3) did so by simply > renaming the kernel's copy of the field to dh_private, but this then breaks > existing userspace and as such has to be reverted (which is done by the > preceding patch). > > [And note, to those who think that wrapping the struct in extern "C" {} > will work: it won't; that only changes how symbol names are presented to > the assembler and linker.]. > > Instead, insert an anonymous union around the "private" member and add a > second member in there with the name "priv" to match the one in the > keyutils package. The "private" member is then wrapped in !__cplusplus > cpp-conditionals to hide it from C++. > > Fixes: ddbb41148724 ("KEYS: Add KEYCTL_DH_COMPUTE command") > Fixes: 8a2336e549d3 ("uapi/linux/keyctl.h: don't use C++ reserved keyword as a struct member name") > Signed-off-by: David Howells > cc: Randy Dunlap > cc: Lubomir Rintel > cc: James Morris > cc: Mat Martineau > cc: Stephan Mueller > cc: Andrew Morton > cc: Linus Torvalds > cc: stable at vger.kernel.org > --- > > include/uapi/linux/keyctl.h | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/include/uapi/linux/keyctl.h b/include/uapi/linux/keyctl.h > index 7b8c9e19bad1..0f3cb13db8e9 100644 > --- a/include/uapi/linux/keyctl.h > +++ b/include/uapi/linux/keyctl.h > @@ -65,7 +65,12 @@ > > /* keyctl structures */ > struct keyctl_dh_params { > - __s32 private; > + union { > +#ifndef __cplusplus > + __s32 private; > +#endif > + __s32 priv; > + }; > __s32 prime; > __s32 base; > }; > > Thanks David. This is an important fix for existing C userspace code, it would create a headache now and in to the future if the keyctl.h change introduced in v4.19-rc3 made it in to an official release. Please merge, James! Reviewed-By: Mat Martineau -- Mat Martineau Intel OTC