public inbox for linux-next@vger.kernel.org 
 help / color / mirror / Atom feed
From: Dave Hansen <dave@sr71•net>
To: linux-kernel@vger•kernel.org
Cc: Dave Hansen <dave@sr71•net>,
	dave.hansen@linux•intel.com, sfr@canb•auug.org.au,
	akpm@linux-foundation•org, tglx@linutronix•de, mingo@elte•hu,
	hpa@zytor•com, peterz@infradead•org, linux-next@vger•kernel.org,
	deller@gmx•de
Subject: [PATCH] x86, pkeys: fix siginfo ABI breakage from new field
Date: Fri, 26 Feb 2016 09:34:27 -0800	[thread overview]
Message-ID: <20160226173427.54A6949F@viggo.jf.intel.com> (raw)


From: Dave Hansen <dave.hansen@linux•intel.com>

Stephen Rothwell reported:

	http://lkml.kernel.org/r/20160226164406.065a1ffc@canb.auug.org.au

that the Memory Protection Keys patches from the tip tree broke
a build-time check on an ARM build because they changed the ABI
of siginfo.

A u64 was used for the protection key field in siginfo.  When the
containing union was aligned, this u64 unioned nicely with the
two 'void *'s in _addr_bnd.  But, on 32-bit, if the union was
unaligned, the u64 might grow the size of the union, breaking the
ABI for subsequent fields.

To fix this, we replace the u64 with an 'unsigned long'.  The long
is guaranteed to union well with the pointers from _addr_bnd.  It
is also plenty large enough to store the 16-bit pkey we have today
on x86.  This also has the advantage that it allows existing 64-bit
userspace to keep working without modification.

I also shouldn't have been using a u64 in a userspace API to begin
with.

Fixes: cd0ea35ff551 ("signals, pkeys: Notify userspace about protection key faults")
Signed-off-by: Dave Hansen <dave.hansen@linux•intel.com>
Cc: Stephen Rothwell <sfr@canb•auug.org.au>
Cc: Andrew Morton <akpm@linux-foundation•org>
Cc: Thomas Gleixner <tglx@linutronix•de>
Cc: Ingo Molnar <mingo@elte•hu>
Cc: "H. Peter Anvin" <hpa@zytor•com>
Cc: Peter Zijlstra <peterz@infradead•org>
Cc: linux-next@vger•kernel.org
Cc: linux-kernel@vger•kernel.org
Cc: Helge Deller <deller@gmx•de>
---

 b/arch/ia64/include/uapi/asm/siginfo.h |    2 +-
 b/arch/mips/include/uapi/asm/siginfo.h |    2 +-
 b/include/uapi/asm-generic/siginfo.h   |    2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff -puN include/uapi/asm-generic/siginfo.h~pkeys-101-fix-siginfo include/uapi/asm-generic/siginfo.h
--- a/include/uapi/asm-generic/siginfo.h~pkeys-101-fix-siginfo	2016-02-26 08:50:47.760659292 -0800
+++ b/include/uapi/asm-generic/siginfo.h	2016-02-26 08:52:08.591330838 -0800
@@ -98,7 +98,7 @@ typedef struct siginfo {
 					void __user *_upper;
 				} _addr_bnd;
 				/* used when si_code=SEGV_PKUERR */
-				u64 _pkey;
+				unsigned long _pkey;
 			};
 		} _sigfault;
 
diff -puN arch/mips/include/uapi/asm/siginfo.h~pkeys-101-fix-siginfo arch/mips/include/uapi/asm/siginfo.h
--- a/arch/mips/include/uapi/asm/siginfo.h~pkeys-101-fix-siginfo	2016-02-26 08:51:50.357502608 -0800
+++ b/arch/mips/include/uapi/asm/siginfo.h	2016-02-26 08:51:55.206722873 -0800
@@ -93,7 +93,7 @@ typedef struct siginfo {
 					void __user *_upper;
 				} _addr_bnd;
 				/* used when si_code=SEGV_PKUERR */
-				u64 _pkey;
+				unsigned long _pkey;
 			};
 		} _sigfault;
 
diff -puN arch/ia64/include/uapi/asm/siginfo.h~pkeys-101-fix-siginfo arch/ia64/include/uapi/asm/siginfo.h
--- a/arch/ia64/include/uapi/asm/siginfo.h~pkeys-101-fix-siginfo	2016-02-26 08:51:50.413505152 -0800
+++ b/arch/ia64/include/uapi/asm/siginfo.h	2016-02-26 08:52:00.806977252 -0800
@@ -70,7 +70,7 @@ typedef struct siginfo {
 					void __user *_upper;
 				} _addr_bnd;
 				/* used when si_code=SEGV_PKUERR */
-				u64 _pkey;
+				unsigned long _pkey;
 			};
 		} _sigfault;
 
_

             reply	other threads:[~2016-02-26 17:34 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-02-26 17:34 Dave Hansen [this message]
2016-02-26 17:44 ` [PATCH] x86, pkeys: fix siginfo ABI breakage from new field H. Peter Anvin
2016-02-26 22:10   ` Stephen Rothwell
2016-02-27 11:41     ` Ingo Molnar
2016-02-27 19:16       ` Dave Hansen
2016-02-27 19:35         ` H. Peter Anvin
2016-02-27 23:26           ` Stephen Rothwell
2016-02-27 23:40             ` [PATCH v2] signals, pkeys: make si_pkey 32 bits Stephen Rothwell
2016-02-29  7:57               ` Ingo Molnar
2016-02-29  8:01             ` [PATCH] x86, pkeys: fix siginfo ABI breakage from new field Ingo Molnar
2016-02-29 22:54               ` Stephen Rothwell

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=20160226173427.54A6949F@viggo.jf.intel.com \
    --to=dave@sr71$(echo .)net \
    --cc=akpm@linux-foundation$(echo .)org \
    --cc=dave.hansen@linux$(echo .)intel.com \
    --cc=deller@gmx$(echo .)de \
    --cc=hpa@zytor$(echo .)com \
    --cc=linux-kernel@vger$(echo .)kernel.org \
    --cc=linux-next@vger$(echo .)kernel.org \
    --cc=mingo@elte$(echo .)hu \
    --cc=peterz@infradead$(echo .)org \
    --cc=sfr@canb$(echo .)auug.org.au \
    --cc=tglx@linutronix$(echo .)de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
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