mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 04:50:53 +07:00
[IA64] sysctl option to silence unaligned trap warnings
Allow sysadmin to disable all warnings about userland apps making unaligned accesses by using: # echo 1 > /proc/sys/kernel/ignore-unaligned-usertrap Rather than having to use prctl on a process by process basis. Default behaivour leaves the warnings enabled. Signed-off-by: Jes Sorensen <jes@sgi.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
parent
c8c1635faa
commit
d2b176ed87
@ -52,6 +52,15 @@ dump (const char *str, void *vp, size_t len)
|
||||
#define IA64_FIRST_ROTATING_FR 32
|
||||
#define SIGN_EXT9 0xffffffffffffff00ul
|
||||
|
||||
/*
|
||||
* sysctl settable hook which tells the kernel whether to honor the
|
||||
* IA64_THREAD_UAC_NOPRINT prctl. Because this is user settable, we want
|
||||
* to allow the super user to enable/disable this for security reasons
|
||||
* (i.e. don't allow attacker to fill up logs with unaligned accesses).
|
||||
*/
|
||||
int no_unaligned_warning;
|
||||
static int noprint_warning;
|
||||
|
||||
/*
|
||||
* For M-unit:
|
||||
*
|
||||
@ -1324,8 +1333,9 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs)
|
||||
if ((current->thread.flags & IA64_THREAD_UAC_SIGBUS) != 0)
|
||||
goto force_sigbus;
|
||||
|
||||
if (!(current->thread.flags & IA64_THREAD_UAC_NOPRINT)
|
||||
&& within_logging_rate_limit())
|
||||
if (!no_unaligned_warning &&
|
||||
!(current->thread.flags & IA64_THREAD_UAC_NOPRINT) &&
|
||||
within_logging_rate_limit())
|
||||
{
|
||||
char buf[200]; /* comm[] is at most 16 bytes... */
|
||||
size_t len;
|
||||
@ -1340,7 +1350,22 @@ ia64_handle_unaligned (unsigned long ifa, struct pt_regs *regs)
|
||||
if (user_mode(regs))
|
||||
tty_write_message(current->signal->tty, buf);
|
||||
buf[len-1] = '\0'; /* drop '\r' */
|
||||
printk(KERN_WARNING "%s", buf); /* watch for command names containing %s */
|
||||
/* watch for command names containing %s */
|
||||
printk(KERN_WARNING "%s", buf);
|
||||
} else {
|
||||
if (no_unaligned_warning && !noprint_warning) {
|
||||
noprint_warning = 1;
|
||||
printk(KERN_WARNING "%s(%d) encountered an "
|
||||
"unaligned exception which required\n"
|
||||
"kernel assistance, which degrades "
|
||||
"the performance of the application.\n"
|
||||
"Unaligned exception warnings have "
|
||||
"been disabled by the system "
|
||||
"administrator\n"
|
||||
"echo 0 > /proc/sys/kernel/ignore-"
|
||||
"unaligned-usertrap to re-enable\n",
|
||||
current->comm, current->pid);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (within_logging_rate_limit())
|
||||
|
@ -147,6 +147,7 @@ enum
|
||||
KERN_SETUID_DUMPABLE=69, /* int: behaviour of dumps for setuid core */
|
||||
KERN_SPIN_RETRY=70, /* int: number of spinlock retries */
|
||||
KERN_ACPI_VIDEO_FLAGS=71, /* int: flags for setting up video after ACPI sleep */
|
||||
KERN_IA64_UNALIGNED=72, /* int: ia64 unaligned userland trap enable */
|
||||
};
|
||||
|
||||
|
||||
|
@ -124,6 +124,10 @@ extern int sysctl_hz_timer;
|
||||
extern int acct_parm[];
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_IA64
|
||||
extern int no_unaligned_warning;
|
||||
#endif
|
||||
|
||||
static int parse_table(int __user *, int, void __user *, size_t __user *, void __user *, size_t,
|
||||
ctl_table *, void **);
|
||||
static int proc_doutsstring(ctl_table *table, int write, struct file *filp,
|
||||
@ -665,6 +669,16 @@ static ctl_table kern_table[] = {
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
#endif
|
||||
#ifdef CONFIG_IA64
|
||||
{
|
||||
.ctl_name = KERN_IA64_UNALIGNED,
|
||||
.procname = "ignore-unaligned-usertrap",
|
||||
.data = &no_unaligned_warning,
|
||||
.maxlen = sizeof (int),
|
||||
.mode = 0644,
|
||||
.proc_handler = &proc_dointvec,
|
||||
},
|
||||
#endif
|
||||
{ .ctl_name = 0 }
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user