mpx: Extend siginfo structure to include bound violation information
This patch adds new fields about bound violation into siginfo structure. si_lower and si_upper are respectively lower bound and upper bound when bound violation is caused. Signed-off-by: Qiaowei Ren <qiaowei.ren@intel.com> Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com> Cc: linux-mm@kvack.org Cc: linux-mips@linux-mips.org Cc: Dave Hansen <dave@sr71.net> Link: http://lkml.kernel.org/r/20141114151819.1908C900@viggo.jf.intel.com Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
62e7759b1b
commit
ee1b58d36a
|
@ -91,6 +91,10 @@ typedef struct siginfo {
|
||||||
int _trapno; /* TRAP # which caused the signal */
|
int _trapno; /* TRAP # which caused the signal */
|
||||||
#endif
|
#endif
|
||||||
short _addr_lsb; /* LSB of the reported address */
|
short _addr_lsb; /* LSB of the reported address */
|
||||||
|
struct {
|
||||||
|
void __user *_lower;
|
||||||
|
void __user *_upper;
|
||||||
|
} _addr_bnd;
|
||||||
} _sigfault;
|
} _sigfault;
|
||||||
|
|
||||||
/* SIGPOLL */
|
/* SIGPOLL */
|
||||||
|
@ -131,6 +135,8 @@ typedef struct siginfo {
|
||||||
#define si_trapno _sifields._sigfault._trapno
|
#define si_trapno _sifields._sigfault._trapno
|
||||||
#endif
|
#endif
|
||||||
#define si_addr_lsb _sifields._sigfault._addr_lsb
|
#define si_addr_lsb _sifields._sigfault._addr_lsb
|
||||||
|
#define si_lower _sifields._sigfault._addr_bnd._lower
|
||||||
|
#define si_upper _sifields._sigfault._addr_bnd._upper
|
||||||
#define si_band _sifields._sigpoll._band
|
#define si_band _sifields._sigpoll._band
|
||||||
#define si_fd _sifields._sigpoll._fd
|
#define si_fd _sifields._sigpoll._fd
|
||||||
#ifdef __ARCH_SIGSYS
|
#ifdef __ARCH_SIGSYS
|
||||||
|
@ -199,7 +205,8 @@ typedef struct siginfo {
|
||||||
*/
|
*/
|
||||||
#define SEGV_MAPERR (__SI_FAULT|1) /* address not mapped to object */
|
#define SEGV_MAPERR (__SI_FAULT|1) /* address not mapped to object */
|
||||||
#define SEGV_ACCERR (__SI_FAULT|2) /* invalid permissions for mapped object */
|
#define SEGV_ACCERR (__SI_FAULT|2) /* invalid permissions for mapped object */
|
||||||
#define NSIGSEGV 2
|
#define SEGV_BNDERR (__SI_FAULT|3) /* failed address bound checks */
|
||||||
|
#define NSIGSEGV 3
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* SIGBUS si_codes
|
* SIGBUS si_codes
|
||||||
|
|
|
@ -2747,6 +2747,10 @@ int copy_siginfo_to_user(siginfo_t __user *to, const siginfo_t *from)
|
||||||
*/
|
*/
|
||||||
if (from->si_code == BUS_MCEERR_AR || from->si_code == BUS_MCEERR_AO)
|
if (from->si_code == BUS_MCEERR_AR || from->si_code == BUS_MCEERR_AO)
|
||||||
err |= __put_user(from->si_addr_lsb, &to->si_addr_lsb);
|
err |= __put_user(from->si_addr_lsb, &to->si_addr_lsb);
|
||||||
|
#endif
|
||||||
|
#ifdef SEGV_BNDERR
|
||||||
|
err |= __put_user(from->si_lower, &to->si_lower);
|
||||||
|
err |= __put_user(from->si_upper, &to->si_upper);
|
||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
case __SI_CHLD:
|
case __SI_CHLD:
|
||||||
|
|
Loading…
Reference in New Issue