Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6: parisc: use __ratelimit in unaligned.c parisc: Convert to read/update_persistent_clock parisc: Simplify param.h by including <asm-generic/param.h> parisc: drop unnecessary cast in __ldcw_align() macro parisc: add strict copy size checks (v2) parisc: remove trailing space in messages parisc: ditto sys_accept4 parisc: wire up sys_recvmmsg
This commit is contained in:
commit
2ddb3b15f1
|
@ -12,4 +12,18 @@ config DEBUG_RODATA
|
|||
portion of the kernel code won't be covered by a TLB anymore.
|
||||
If in doubt, say "N".
|
||||
|
||||
config DEBUG_STRICT_USER_COPY_CHECKS
|
||||
bool "Strict copy size checks"
|
||||
depends on DEBUG_KERNEL && !TRACE_BRANCH_PROFILING
|
||||
---help---
|
||||
Enabling this option turns a certain set of sanity checks for user
|
||||
copy operations into compile time failures.
|
||||
|
||||
The copy_from_user() etc checks are there to help test if there
|
||||
are sufficient security checks on the length argument of
|
||||
the copy operation, by having gcc prove that the argument is
|
||||
within bounds.
|
||||
|
||||
If unsure, or if you run an older (pre 4.4) gcc, say N.
|
||||
|
||||
endmenu
|
||||
|
|
|
@ -1,22 +1 @@
|
|||
#ifndef _ASMPARISC_PARAM_H
|
||||
#define _ASMPARISC_PARAM_H
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#define HZ CONFIG_HZ
|
||||
#define USER_HZ 100 /* some user API use "ticks" */
|
||||
#define CLOCKS_PER_SEC (USER_HZ) /* like times() */
|
||||
#endif
|
||||
|
||||
#ifndef HZ
|
||||
#define HZ 100
|
||||
#endif
|
||||
|
||||
#define EXEC_PAGESIZE 4096
|
||||
|
||||
#ifndef NOGROUP
|
||||
#define NOGROUP (-1)
|
||||
#endif
|
||||
|
||||
#define MAXHOSTNAMELEN 64 /* max length of hostname */
|
||||
|
||||
#endif
|
||||
#include <asm-generic/param.h>
|
||||
|
|
|
@ -160,7 +160,7 @@ static inline void set_eiem(unsigned long val)
|
|||
ldcd). */
|
||||
|
||||
#define __PA_LDCW_ALIGNMENT 4
|
||||
#define __ldcw_align(a) ((volatile unsigned int *)a)
|
||||
#define __ldcw_align(a) (&(a)->slock)
|
||||
#define __LDCW "ldcw,co"
|
||||
|
||||
#endif /*!CONFIG_PA20*/
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include <asm/page.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/cache.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm-generic/uaccess-unaligned.h>
|
||||
|
||||
#define VERIFY_READ 0
|
||||
|
@ -234,13 +235,35 @@ extern long lstrnlen_user(const char __user *,long);
|
|||
|
||||
unsigned long copy_to_user(void __user *dst, const void *src, unsigned long len);
|
||||
#define __copy_to_user copy_to_user
|
||||
unsigned long copy_from_user(void *dst, const void __user *src, unsigned long len);
|
||||
#define __copy_from_user copy_from_user
|
||||
unsigned long __copy_from_user(void *dst, const void __user *src, unsigned long len);
|
||||
unsigned long copy_in_user(void __user *dst, const void __user *src, unsigned long len);
|
||||
#define __copy_in_user copy_in_user
|
||||
#define __copy_to_user_inatomic __copy_to_user
|
||||
#define __copy_from_user_inatomic __copy_from_user
|
||||
|
||||
extern void copy_from_user_overflow(void)
|
||||
#ifdef CONFIG_DEBUG_STRICT_USER_COPY_CHECKS
|
||||
__compiletime_error("copy_from_user() buffer size is not provably correct")
|
||||
#else
|
||||
__compiletime_warning("copy_from_user() buffer size is not provably correct")
|
||||
#endif
|
||||
;
|
||||
|
||||
static inline unsigned long __must_check copy_from_user(void *to,
|
||||
const void __user *from,
|
||||
unsigned long n)
|
||||
{
|
||||
int sz = __compiletime_object_size(to);
|
||||
int ret = -EFAULT;
|
||||
|
||||
if (likely(sz == -1 || !__builtin_constant_p(n) || sz >= n))
|
||||
ret = __copy_from_user(to, from, n);
|
||||
else
|
||||
copy_from_user_overflow();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct pt_regs;
|
||||
int fixup_exception(struct pt_regs *regs);
|
||||
|
||||
|
|
|
@ -811,8 +811,10 @@
|
|||
#define __NR_pwritev (__NR_Linux + 316)
|
||||
#define __NR_rt_tgsigqueueinfo (__NR_Linux + 317)
|
||||
#define __NR_perf_event_open (__NR_Linux + 318)
|
||||
#define __NR_recvmmsg (__NR_Linux + 319)
|
||||
#define __NR_accept4 (__NR_Linux + 320)
|
||||
|
||||
#define __NR_Linux_syscalls (__NR_perf_event_open + 1)
|
||||
#define __NR_Linux_syscalls (__NR_accept4 + 1)
|
||||
|
||||
|
||||
#define __IGNORE_select /* newselect */
|
||||
|
|
|
@ -171,14 +171,14 @@ parisc_cache_init(void)
|
|||
cache_info.ic_conf.cc_cst,
|
||||
cache_info.ic_conf.cc_hv);
|
||||
|
||||
printk("D-TLB conf: sh %d page %d cst %d aid %d pad1 %d \n",
|
||||
printk("D-TLB conf: sh %d page %d cst %d aid %d pad1 %d\n",
|
||||
cache_info.dt_conf.tc_sh,
|
||||
cache_info.dt_conf.tc_page,
|
||||
cache_info.dt_conf.tc_cst,
|
||||
cache_info.dt_conf.tc_aid,
|
||||
cache_info.dt_conf.tc_pad1);
|
||||
|
||||
printk("I-TLB conf: sh %d page %d cst %d aid %d pad1 %d \n",
|
||||
printk("I-TLB conf: sh %d page %d cst %d aid %d pad1 %d\n",
|
||||
cache_info.it_conf.tc_sh,
|
||||
cache_info.it_conf.tc_page,
|
||||
cache_info.it_conf.tc_cst,
|
||||
|
|
|
@ -417,6 +417,8 @@
|
|||
ENTRY_COMP(pwritev)
|
||||
ENTRY_COMP(rt_tgsigqueueinfo)
|
||||
ENTRY_SAME(perf_event_open)
|
||||
ENTRY_COMP(recvmmsg)
|
||||
ENTRY_SAME(accept4) /* 320 */
|
||||
|
||||
/* Nothing yet */
|
||||
|
||||
|
|
|
@ -250,9 +250,21 @@ static int __init rtc_init(void)
|
|||
}
|
||||
module_init(rtc_init);
|
||||
|
||||
void __init time_init(void)
|
||||
void read_persistent_clock(struct timespec *ts)
|
||||
{
|
||||
static struct pdc_tod tod_data;
|
||||
if (pdc_tod_read(&tod_data) == 0) {
|
||||
ts->tv_sec = tod_data.tod_sec;
|
||||
ts->tv_nsec = tod_data.tod_usec * 1000;
|
||||
} else {
|
||||
printk(KERN_ERR "Error reading tod clock\n");
|
||||
ts->tv_sec = 0;
|
||||
ts->tv_nsec = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void __init time_init(void)
|
||||
{
|
||||
unsigned long current_cr16_khz;
|
||||
|
||||
clocktick = (100 * PAGE0->mem_10msec) / HZ;
|
||||
|
@ -264,19 +276,4 @@ void __init time_init(void)
|
|||
clocksource_cr16.mult = clocksource_khz2mult(current_cr16_khz,
|
||||
clocksource_cr16.shift);
|
||||
clocksource_register(&clocksource_cr16);
|
||||
|
||||
if (pdc_tod_read(&tod_data) == 0) {
|
||||
unsigned long flags;
|
||||
|
||||
write_seqlock_irqsave(&xtime_lock, flags);
|
||||
xtime.tv_sec = tod_data.tod_sec;
|
||||
xtime.tv_nsec = tod_data.tod_usec * 1000;
|
||||
set_normalized_timespec(&wall_to_monotonic,
|
||||
-xtime.tv_sec, -xtime.tv_nsec);
|
||||
write_sequnlock_irqrestore(&xtime_lock, flags);
|
||||
} else {
|
||||
printk(KERN_ERR "Error reading tod clock\n");
|
||||
xtime.tv_sec = 0;
|
||||
xtime.tv_nsec = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/signal.h>
|
||||
#include <linux/ratelimit.h>
|
||||
#include <asm/uaccess.h>
|
||||
|
||||
/* #define DEBUG_UNALIGNED 1 */
|
||||
|
@ -446,8 +447,7 @@ static int emulate_std(struct pt_regs *regs, int frreg, int flop)
|
|||
|
||||
void handle_unaligned(struct pt_regs *regs)
|
||||
{
|
||||
static unsigned long unaligned_count = 0;
|
||||
static unsigned long last_time = 0;
|
||||
static DEFINE_RATELIMIT_STATE(ratelimit, 5 * HZ, 5);
|
||||
unsigned long newbase = R1(regs->iir)?regs->gr[R1(regs->iir)]:0;
|
||||
int modify = 0;
|
||||
int ret = ERR_NOTHANDLED;
|
||||
|
@ -460,14 +460,8 @@ void handle_unaligned(struct pt_regs *regs)
|
|||
goto force_sigbus;
|
||||
}
|
||||
|
||||
if (unaligned_count > 5 &&
|
||||
time_after(jiffies, last_time + 5 * HZ)) {
|
||||
unaligned_count = 0;
|
||||
last_time = jiffies;
|
||||
}
|
||||
|
||||
if (!(current->thread.flags & PARISC_UAC_NOPRINT)
|
||||
&& ++unaligned_count < 5) {
|
||||
if (!(current->thread.flags & PARISC_UAC_NOPRINT) &&
|
||||
__ratelimit(&ratelimit)) {
|
||||
char buf[256];
|
||||
sprintf(buf, "%s(%d): unaligned access to 0x" RFMT " at ip=0x" RFMT "\n",
|
||||
current->comm, task_pid_nr(current), regs->ior, regs->iaoq[0]);
|
||||
|
|
|
@ -475,7 +475,8 @@ unsigned long copy_to_user(void __user *dst, const void *src, unsigned long len)
|
|||
return pa_memcpy((void __force *)dst, src, len);
|
||||
}
|
||||
|
||||
unsigned long copy_from_user(void *dst, const void __user *src, unsigned long len)
|
||||
EXPORT_SYMBOL(__copy_from_user);
|
||||
unsigned long __copy_from_user(void *dst, const void __user *src, unsigned long len)
|
||||
{
|
||||
mtsp(get_user_space(), 1);
|
||||
mtsp(get_kernel_space(), 2);
|
||||
|
|
|
@ -460,7 +460,7 @@ static int init_slot(int slot, struct eeprom_eisa_slot_info *es)
|
|||
slot, id_string);
|
||||
|
||||
print_eisa_id(id_string, es->eisa_slot_id);
|
||||
printk(" expected %s \n", id_string);
|
||||
printk(" expected %s\n", id_string);
|
||||
|
||||
return -1;
|
||||
|
||||
|
|
|
@ -169,7 +169,7 @@ superio_init(struct pci_dev *pcidev)
|
|||
/* ...then properly fixup the USB to point at suckyio PIC */
|
||||
sio->usb_pdev->irq = superio_fixup_irq(sio->usb_pdev);
|
||||
|
||||
printk(KERN_INFO PFX "Found NS87560 Legacy I/O device at %s (IRQ %i) \n",
|
||||
printk(KERN_INFO PFX "Found NS87560 Legacy I/O device at %s (IRQ %i)\n",
|
||||
pci_name(pdev), pdev->irq);
|
||||
|
||||
pci_read_config_dword (pdev, SIO_SP1BAR, &sio->sp1_base);
|
||||
|
|
Loading…
Reference in New Issue