Commit dea9f2aa authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://kernel.bkbits.net/davem/sparc-2.6

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents e1acfd06 f2477bfd
...@@ -380,6 +380,8 @@ source "sound/Kconfig" ...@@ -380,6 +380,8 @@ source "sound/Kconfig"
source "drivers/usb/Kconfig" source "drivers/usb/Kconfig"
source "drivers/infiniband/Kconfig"
source "drivers/char/watchdog/Kconfig" source "drivers/char/watchdog/Kconfig"
source "arch/sparc/Kconfig.debug" source "arch/sparc/Kconfig.debug"
......
...@@ -4,6 +4,9 @@ ...@@ -4,6 +4,9 @@
* *
* Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz) * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
* Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu) * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
*
* 2004-12-25 Krzysztof Helt (krzysztof.h1@wp.pl)
* - fixed registers constrains in inline assembly declarations
*/ */
#include <linux/kernel.h> #include <linux/kernel.h>
...@@ -132,7 +135,7 @@ int do_user_muldiv(struct pt_regs *regs, unsigned long pc) ...@@ -132,7 +135,7 @@ int do_user_muldiv(struct pt_regs *regs, unsigned long pc)
"mov %%o0, %0\n\t" "mov %%o0, %0\n\t"
"mov %%o1, %1\n\t" "mov %%o1, %1\n\t"
: "=r" (rs1), "=r" (rs2) : "=r" (rs1), "=r" (rs2)
: : "0" (rs1), "1" (rs2)
: "o0", "o1", "o2", "o3", "o4", "o5", "o7", "cc"); : "o0", "o1", "o2", "o3", "o4", "o5", "o7", "cc");
#ifdef DEBUG_MULDIV #ifdef DEBUG_MULDIV
printk ("0x%x%08x\n", rs2, rs1); printk ("0x%x%08x\n", rs2, rs1);
...@@ -152,7 +155,7 @@ int do_user_muldiv(struct pt_regs *regs, unsigned long pc) ...@@ -152,7 +155,7 @@ int do_user_muldiv(struct pt_regs *regs, unsigned long pc)
"mov %%o0, %0\n\t" "mov %%o0, %0\n\t"
"mov %%o1, %1\n\t" "mov %%o1, %1\n\t"
: "=r" (rs1), "=r" (rs2) : "=r" (rs1), "=r" (rs2)
: : "0" (rs1), "1" (rs2)
: "o0", "o1", "o2", "o3", "o4", "o5", "o7", "cc"); : "o0", "o1", "o2", "o3", "o4", "o5", "o7", "cc");
#ifdef DEBUG_MULDIV #ifdef DEBUG_MULDIV
printk ("0x%x%08x\n", rs2, rs1); printk ("0x%x%08x\n", rs2, rs1);
...@@ -181,7 +184,7 @@ int do_user_muldiv(struct pt_regs *regs, unsigned long pc) ...@@ -181,7 +184,7 @@ int do_user_muldiv(struct pt_regs *regs, unsigned long pc)
"mov %%o1, %0\n\t" "mov %%o1, %0\n\t"
"mov %%o0, %1\n\t" "mov %%o0, %1\n\t"
: "=r" (rs1), "=r" (rs2) : "=r" (rs1), "=r" (rs2)
: "r" (regs->y) : "r" (regs->y), "0" (rs1), "1" (rs2)
: "o0", "o1", "o2", "o3", "o4", "o5", "o7", : "o0", "o1", "o2", "o3", "o4", "o5", "o7",
"g1", "g2", "g3", "cc"); "g1", "g2", "g3", "cc");
#ifdef DEBUG_MULDIV #ifdef DEBUG_MULDIV
...@@ -210,7 +213,7 @@ int do_user_muldiv(struct pt_regs *regs, unsigned long pc) ...@@ -210,7 +213,7 @@ int do_user_muldiv(struct pt_regs *regs, unsigned long pc)
"mov %%o1, %0\n\t" "mov %%o1, %0\n\t"
"mov %%o0, %1\n\t" "mov %%o0, %1\n\t"
: "=r" (rs1), "=r" (rs2) : "=r" (rs1), "=r" (rs2)
: "r" (regs->y) : "r" (regs->y), "0" (rs1), "1" (rs2)
: "o0", "o1", "o2", "o3", "o4", "o5", "o7", : "o0", "o1", "o2", "o3", "o4", "o5", "o7",
"g1", "g2", "g3", "cc"); "g1", "g2", "g3", "cc");
#ifdef DEBUG_MULDIV #ifdef DEBUG_MULDIV
......
# #
# Automatically generated make config: don't edit # Automatically generated make config: don't edit
# Linux kernel version: 2.6.10 # Linux kernel version: 2.6.11-rc1
# Mon Jan 10 11:24:25 2005 # Fri Jan 21 20:03:21 2005
# #
CONFIG_64BIT=y CONFIG_64BIT=y
CONFIG_MMU=y CONFIG_MMU=y
...@@ -66,13 +66,13 @@ CONFIG_SMP=y ...@@ -66,13 +66,13 @@ CONFIG_SMP=y
CONFIG_NR_CPUS=4 CONFIG_NR_CPUS=4
CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ=y
# CONFIG_CPU_FREQ_DEBUG is not set # CONFIG_CPU_FREQ_DEBUG is not set
CONFIG_CPU_FREQ_PROC_INTF=y CONFIG_CPU_FREQ_STAT=m
CONFIG_CPU_FREQ_STAT_DETAILS=y
CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=m CONFIG_CPU_FREQ_GOV_POWERSAVE=m
CONFIG_CPU_FREQ_GOV_USERSPACE=m CONFIG_CPU_FREQ_GOV_USERSPACE=m
# CONFIG_CPU_FREQ_24_API is not set
CONFIG_CPU_FREQ_GOV_ONDEMAND=m CONFIG_CPU_FREQ_GOV_ONDEMAND=m
CONFIG_CPU_FREQ_TABLE=y CONFIG_CPU_FREQ_TABLE=y
CONFIG_US3_FREQ=m CONFIG_US3_FREQ=m
...@@ -189,6 +189,7 @@ CONFIG_LOGO=y ...@@ -189,6 +189,7 @@ CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_VGA16 is not set # CONFIG_LOGO_LINUX_VGA16 is not set
# CONFIG_LOGO_LINUX_CLUT224 is not set # CONFIG_LOGO_LINUX_CLUT224 is not set
CONFIG_LOGO_SUN_CLUT224=y CONFIG_LOGO_SUN_CLUT224=y
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
# #
# Serial drivers # Serial drivers
...@@ -228,6 +229,7 @@ CONFIG_OBP_FLASH=m ...@@ -228,6 +229,7 @@ CONFIG_OBP_FLASH=m
# CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 is not set # CONFIG_BLK_DEV_DAC960 is not set
# CONFIG_BLK_DEV_UMEM is not set # CONFIG_BLK_DEV_UMEM is not set
# CONFIG_BLK_DEV_COW_COMMON is not set
CONFIG_BLK_DEV_LOOP=m CONFIG_BLK_DEV_LOOP=m
CONFIG_BLK_DEV_CRYPTOLOOP=m CONFIG_BLK_DEV_CRYPTOLOOP=m
CONFIG_BLK_DEV_NBD=m CONFIG_BLK_DEV_NBD=m
...@@ -247,6 +249,7 @@ CONFIG_IOSCHED_NOOP=y ...@@ -247,6 +249,7 @@ CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y CONFIG_IOSCHED_CFQ=y
CONFIG_ATA_OVER_ETH=m
# #
# ATA/ATAPI/MFM/RLL support # ATA/ATAPI/MFM/RLL support
...@@ -1202,6 +1205,7 @@ CONFIG_SENSORS_LM87=m ...@@ -1202,6 +1205,7 @@ CONFIG_SENSORS_LM87=m
CONFIG_SENSORS_LM90=m CONFIG_SENSORS_LM90=m
CONFIG_SENSORS_MAX1619=m CONFIG_SENSORS_MAX1619=m
CONFIG_SENSORS_PC87360=m CONFIG_SENSORS_PC87360=m
CONFIG_SENSORS_SMSC47B397=m
CONFIG_SENSORS_SMSC47M1=m CONFIG_SENSORS_SMSC47M1=m
CONFIG_SENSORS_VIA686A=m CONFIG_SENSORS_VIA686A=m
CONFIG_SENSORS_W83781D=m CONFIG_SENSORS_W83781D=m
...@@ -1759,6 +1763,7 @@ CONFIG_USB_SERIAL_IPAQ=m ...@@ -1759,6 +1763,7 @@ CONFIG_USB_SERIAL_IPAQ=m
# CONFIG_USB_SERIAL_IR is not set # CONFIG_USB_SERIAL_IR is not set
CONFIG_USB_SERIAL_EDGEPORT=m CONFIG_USB_SERIAL_EDGEPORT=m
# CONFIG_USB_SERIAL_EDGEPORT_TI is not set # CONFIG_USB_SERIAL_EDGEPORT_TI is not set
CONFIG_USB_SERIAL_GARMIN=m
CONFIG_USB_SERIAL_IPW=m CONFIG_USB_SERIAL_IPW=m
CONFIG_USB_SERIAL_KEYSPAN_PDA=m CONFIG_USB_SERIAL_KEYSPAN_PDA=m
CONFIG_USB_SERIAL_KEYSPAN=m CONFIG_USB_SERIAL_KEYSPAN=m
...@@ -1779,6 +1784,7 @@ CONFIG_USB_SERIAL_KLSI=m ...@@ -1779,6 +1784,7 @@ CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_MCT_U232=m CONFIG_USB_SERIAL_MCT_U232=m
CONFIG_USB_SERIAL_PL2303=m CONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_SAFE is not set # CONFIG_USB_SERIAL_SAFE is not set
CONFIG_USB_SERIAL_TI=m
CONFIG_USB_SERIAL_CYBERJACK=m CONFIG_USB_SERIAL_CYBERJACK=m
CONFIG_USB_SERIAL_XIRCOM=m CONFIG_USB_SERIAL_XIRCOM=m
CONFIG_USB_SERIAL_OMNINET=m CONFIG_USB_SERIAL_OMNINET=m
...@@ -1789,7 +1795,6 @@ CONFIG_USB_EZUSB=y ...@@ -1789,7 +1795,6 @@ CONFIG_USB_EZUSB=y
# #
CONFIG_USB_EMI62=m CONFIG_USB_EMI62=m
CONFIG_USB_EMI26=m CONFIG_USB_EMI26=m
# CONFIG_USB_TIGL is not set
CONFIG_USB_AUERSWALD=m CONFIG_USB_AUERSWALD=m
CONFIG_USB_RIO500=m CONFIG_USB_RIO500=m
CONFIG_USB_LEGOTOWER=m CONFIG_USB_LEGOTOWER=m
...@@ -1798,6 +1803,7 @@ CONFIG_USB_LED=m ...@@ -1798,6 +1803,7 @@ CONFIG_USB_LED=m
CONFIG_USB_CYTHERM=m CONFIG_USB_CYTHERM=m
CONFIG_USB_PHIDGETKIT=m CONFIG_USB_PHIDGETKIT=m
CONFIG_USB_PHIDGETSERVO=m CONFIG_USB_PHIDGETSERVO=m
CONFIG_USB_IDMOUSE=m
CONFIG_USB_TEST=m CONFIG_USB_TEST=m
# #
...@@ -1863,6 +1869,7 @@ CONFIG_SCHEDSTATS=y ...@@ -1863,6 +1869,7 @@ CONFIG_SCHEDSTATS=y
# CONFIG_DEBUG_KOBJECT is not set # CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set # CONFIG_DEBUG_INFO is not set
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_STACK_USAGE is not set # CONFIG_DEBUG_STACK_USAGE is not set
CONFIG_KPROBES=y CONFIG_KPROBES=y
# CONFIG_DEBUG_DCFLUSH is not set # CONFIG_DEBUG_DCFLUSH is not set
......
...@@ -8,18 +8,16 @@ ...@@ -8,18 +8,16 @@
.align 32 .align 32
.globl memmove .globl memmove
.type memmove,#function .type memmove,#function
memmove: memmove: /* o0=dst o1=src o2=len */
mov %o0, %g1 mov %o0, %g1
cmp %o0, %o1 cmp %o0, %o1
blu,pt %xcc, memcpy
sub %o0, %o1, %g5
add %o1, %o2, %g3
cmp %g3, %o0
bleu,pt %xcc, memcpy bleu,pt %xcc, memcpy
add %o1, %o2, %g5 add %o1, %o2, %g5
cmp %g5, %o0
bleu,pt %xcc, memcpy
add %o0, %o2, %o5 add %o0, %o2, %o5
sub %g5, 1, %o1 sub %g5, 1, %o1
sub %o5, 1, %o0 sub %o5, 1, %o0
1: ldub [%o1], %g5 1: ldub [%o1], %g5
subcc %o2, 1, %o2 subcc %o2, 1, %o2
......
...@@ -110,15 +110,17 @@ static int set_brk(unsigned long start, unsigned long end) ...@@ -110,15 +110,17 @@ static int set_brk(unsigned long start, unsigned long end)
be in memory */ be in memory */
static void padzero(unsigned long elf_bss) static int padzero(unsigned long elf_bss)
{ {
unsigned long nbyte; unsigned long nbyte;
nbyte = ELF_PAGEOFFSET(elf_bss); nbyte = ELF_PAGEOFFSET(elf_bss);
if (nbyte) { if (nbyte) {
nbyte = ELF_MIN_ALIGN - nbyte; nbyte = ELF_MIN_ALIGN - nbyte;
clear_user((void __user *) elf_bss, nbyte); if (clear_user((void __user *) elf_bss, nbyte))
return -EFAULT;
} }
return 0;
} }
/* Let's use some macros to make this stack manipulation a litle clearer */ /* Let's use some macros to make this stack manipulation a litle clearer */
...@@ -134,7 +136,7 @@ static void padzero(unsigned long elf_bss) ...@@ -134,7 +136,7 @@ static void padzero(unsigned long elf_bss)
#define STACK_ALLOC(sp, len) ({ sp -= len ; sp; }) #define STACK_ALLOC(sp, len) ({ sp -= len ; sp; })
#endif #endif
static void static int
create_elf_tables(struct linux_binprm *bprm, struct elfhdr * exec, create_elf_tables(struct linux_binprm *bprm, struct elfhdr * exec,
int interp_aout, unsigned long load_addr, int interp_aout, unsigned long load_addr,
unsigned long interp_load_addr) unsigned long interp_load_addr)
...@@ -179,7 +181,8 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr * exec, ...@@ -179,7 +181,8 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr * exec,
STACK_ALLOC(p, ((current->pid % 64) << 7)); STACK_ALLOC(p, ((current->pid % 64) << 7));
#endif #endif
u_platform = (elf_addr_t __user *)STACK_ALLOC(p, len); u_platform = (elf_addr_t __user *)STACK_ALLOC(p, len);
__copy_to_user(u_platform, k_platform, len); if (__copy_to_user(u_platform, k_platform, len))
return -EFAULT;
} }
/* Create the ELF interpreter info */ /* Create the ELF interpreter info */
...@@ -241,7 +244,8 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr * exec, ...@@ -241,7 +244,8 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr * exec,
#endif #endif
/* Now, let's put argc (and argv, envp if appropriate) on the stack */ /* Now, let's put argc (and argv, envp if appropriate) on the stack */
__put_user(argc, sp++); if (__put_user(argc, sp++))
return -EFAULT;
if (interp_aout) { if (interp_aout) {
argv = sp + 2; argv = sp + 2;
envp = argv + argc + 1; envp = argv + argc + 1;
...@@ -259,25 +263,29 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr * exec, ...@@ -259,25 +263,29 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr * exec,
__put_user((elf_addr_t)p, argv++); __put_user((elf_addr_t)p, argv++);
len = strnlen_user((void __user *)p, PAGE_SIZE*MAX_ARG_PAGES); len = strnlen_user((void __user *)p, PAGE_SIZE*MAX_ARG_PAGES);
if (!len || len > PAGE_SIZE*MAX_ARG_PAGES) if (!len || len > PAGE_SIZE*MAX_ARG_PAGES)
return; return 0;
p += len; p += len;
} }
__put_user(0, argv); if (__put_user(0, argv))
return -EFAULT;
current->mm->arg_end = current->mm->env_start = p; current->mm->arg_end = current->mm->env_start = p;
while (envc-- > 0) { while (envc-- > 0) {
size_t len; size_t len;
__put_user((elf_addr_t)p, envp++); __put_user((elf_addr_t)p, envp++);
len = strnlen_user((void __user *)p, PAGE_SIZE*MAX_ARG_PAGES); len = strnlen_user((void __user *)p, PAGE_SIZE*MAX_ARG_PAGES);
if (!len || len > PAGE_SIZE*MAX_ARG_PAGES) if (!len || len > PAGE_SIZE*MAX_ARG_PAGES)
return; return 0;
p += len; p += len;
} }
__put_user(0, envp); if (__put_user(0, envp))
return -EFAULT;
current->mm->env_end = p; current->mm->env_end = p;
/* Put the elf_info on the stack in the right place. */ /* Put the elf_info on the stack in the right place. */
sp = (elf_addr_t __user *)envp + 1; sp = (elf_addr_t __user *)envp + 1;
copy_to_user(sp, elf_info, ei_index * sizeof(elf_addr_t)); if (copy_to_user(sp, elf_info, ei_index * sizeof(elf_addr_t)))
return -EFAULT;
return 0;
} }
#ifndef elf_map #ifndef elf_map
...@@ -411,7 +419,11 @@ static unsigned long load_elf_interp(struct elfhdr * interp_elf_ex, ...@@ -411,7 +419,11 @@ static unsigned long load_elf_interp(struct elfhdr * interp_elf_ex,
* that there are zero-mapped pages up to and including the * that there are zero-mapped pages up to and including the
* last bss page. * last bss page.
*/ */
padzero(elf_bss); if (padzero(elf_bss)) {
error = -EFAULT;
goto out_close;
}
elf_bss = ELF_PAGESTART(elf_bss + ELF_MIN_ALIGN - 1); /* What we have mapped so far */ elf_bss = ELF_PAGESTART(elf_bss + ELF_MIN_ALIGN - 1); /* What we have mapped so far */
/* Map the last of the bss segment */ /* Map the last of the bss segment */
...@@ -791,7 +803,11 @@ static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs) ...@@ -791,7 +803,11 @@ static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
nbyte = ELF_MIN_ALIGN - nbyte; nbyte = ELF_MIN_ALIGN - nbyte;
if (nbyte > elf_brk - elf_bss) if (nbyte > elf_brk - elf_bss)
nbyte = elf_brk - elf_bss; nbyte = elf_brk - elf_bss;
clear_user((void __user *) elf_bss + load_bias, nbyte); if (clear_user((void __user *) elf_bss + load_bias, nbyte)) {
retval = -EFAULT;
send_sig(SIGKILL, current, 0);
goto out_free_dentry;
}
} }
} }
...@@ -875,7 +891,11 @@ static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs) ...@@ -875,7 +891,11 @@ static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
send_sig(SIGKILL, current, 0); send_sig(SIGKILL, current, 0);
goto out_free_dentry; goto out_free_dentry;
} }
padzero(elf_bss); if (padzero(elf_bss)) {
send_sig(SIGSEGV, current, 0);
retval = -EFAULT; /* Nobody gets to see this, but.. */
goto out_free_dentry;
}
if (elf_interpreter) { if (elf_interpreter) {
if (interpreter_type == INTERPRETER_AOUT) if (interpreter_type == INTERPRETER_AOUT)
...@@ -1039,7 +1059,10 @@ static int load_elf_library(struct file *file) ...@@ -1039,7 +1059,10 @@ static int load_elf_library(struct file *file)
goto out_free_ph; goto out_free_ph;
elf_bss = elf_phdata->p_vaddr + elf_phdata->p_filesz; elf_bss = elf_phdata->p_vaddr + elf_phdata->p_filesz;
padzero(elf_bss); if (padzero(elf_bss)) {
error = -EFAULT;
goto out_free_ph;
}
len = ELF_PAGESTART(elf_phdata->p_filesz + elf_phdata->p_vaddr + ELF_MIN_ALIGN - 1); len = ELF_PAGESTART(elf_phdata->p_filesz + elf_phdata->p_vaddr + ELF_MIN_ALIGN - 1);
bss = elf_phdata->p_memsz + elf_phdata->p_vaddr; bss = elf_phdata->p_memsz + elf_phdata->p_vaddr;
...@@ -1246,7 +1269,7 @@ static void fill_prstatus(struct elf_prstatus *prstatus, ...@@ -1246,7 +1269,7 @@ static void fill_prstatus(struct elf_prstatus *prstatus,
cputime_to_timeval(p->signal->cstime, &prstatus->pr_cstime); cputime_to_timeval(p->signal->cstime, &prstatus->pr_cstime);
} }
static void fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p, static int fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p,
struct mm_struct *mm) struct mm_struct *mm)
{ {
int i, len; int i, len;
...@@ -1257,8 +1280,9 @@ static void fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p, ...@@ -1257,8 +1280,9 @@ static void fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p,
len = mm->arg_end - mm->arg_start; len = mm->arg_end - mm->arg_start;
if (len >= ELF_PRARGSZ) if (len >= ELF_PRARGSZ)
len = ELF_PRARGSZ-1; len = ELF_PRARGSZ-1;
copy_from_user(&psinfo->pr_psargs, if (copy_from_user(&psinfo->pr_psargs,
(const char __user *)mm->arg_start, len); (const char __user *)mm->arg_start, len))
return -EFAULT;
for(i = 0; i < len; i++) for(i = 0; i < len; i++)
if (psinfo->pr_psargs[i] == 0) if (psinfo->pr_psargs[i] == 0)
psinfo->pr_psargs[i] = ' '; psinfo->pr_psargs[i] = ' ';
...@@ -1279,7 +1303,7 @@ static void fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p, ...@@ -1279,7 +1303,7 @@ static void fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p,
SET_GID(psinfo->pr_gid, p->gid); SET_GID(psinfo->pr_gid, p->gid);
strncpy(psinfo->pr_fname, p->comm, sizeof(psinfo->pr_fname)); strncpy(psinfo->pr_fname, p->comm, sizeof(psinfo->pr_fname));
return; return 0;
} }
/* Here is the structure in which status of each thread is captured. */ /* Here is the structure in which status of each thread is captured. */
......
...@@ -645,8 +645,11 @@ int siocdevprivate_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) ...@@ -645,8 +645,11 @@ int siocdevprivate_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg)
/* Don't check these user accesses, just let that get trapped /* Don't check these user accesses, just let that get trapped
* in the ioctl handler instead. * in the ioctl handler instead.
*/ */
copy_to_user(&u_ifreq64->ifr_ifrn.ifrn_name[0], &tmp_buf[0], IFNAMSIZ); if (copy_to_user(&u_ifreq64->ifr_ifrn.ifrn_name[0], &tmp_buf[0],
__put_user(data64, &u_ifreq64->ifr_ifru.ifru_data); IFNAMSIZ))
return -EFAULT;
if (__put_user(data64, &u_ifreq64->ifr_ifru.ifru_data))
return -EFAULT;
return sys_ioctl(fd, cmd, (unsigned long) u_ifreq64); return sys_ioctl(fd, cmd, (unsigned long) u_ifreq64);
} }
...@@ -2343,7 +2346,9 @@ put_dirent32 (struct dirent *d, struct compat_dirent __user *d32) ...@@ -2343,7 +2346,9 @@ put_dirent32 (struct dirent *d, struct compat_dirent __user *d32)
__put_user(d->d_ino, &d32->d_ino); __put_user(d->d_ino, &d32->d_ino);
__put_user(d->d_off, &d32->d_off); __put_user(d->d_off, &d32->d_off);
__put_user(d->d_reclen, &d32->d_reclen); __put_user(d->d_reclen, &d32->d_reclen);
__copy_to_user(d32->d_name, d->d_name, d->d_reclen); if (__copy_to_user(d32->d_name, d->d_name, d->d_reclen))
return -EFAULT;
return ret; return ret;
} }
...@@ -2486,7 +2491,8 @@ static int serial_struct_ioctl(unsigned fd, unsigned cmd, unsigned long arg) ...@@ -2486,7 +2491,8 @@ static int serial_struct_ioctl(unsigned fd, unsigned cmd, unsigned long arg)
if (cmd == TIOCSSERIAL) { if (cmd == TIOCSSERIAL) {
if (verify_area(VERIFY_READ, ss32, sizeof(SS32))) if (verify_area(VERIFY_READ, ss32, sizeof(SS32)))
return -EFAULT; return -EFAULT;
__copy_from_user(&ss, ss32, offsetof(SS32, iomem_base)); if (__copy_from_user(&ss, ss32, offsetof(SS32, iomem_base)))
return -EFAULT;
__get_user(udata, &ss32->iomem_base); __get_user(udata, &ss32->iomem_base);
ss.iomem_base = compat_ptr(udata); ss.iomem_base = compat_ptr(udata);
__get_user(ss.iomem_reg_shift, &ss32->iomem_reg_shift); __get_user(ss.iomem_reg_shift, &ss32->iomem_reg_shift);
...@@ -2499,7 +2505,8 @@ static int serial_struct_ioctl(unsigned fd, unsigned cmd, unsigned long arg) ...@@ -2499,7 +2505,8 @@ static int serial_struct_ioctl(unsigned fd, unsigned cmd, unsigned long arg)
if (cmd == TIOCGSERIAL && err >= 0) { if (cmd == TIOCGSERIAL && err >= 0) {
if (verify_area(VERIFY_WRITE, ss32, sizeof(SS32))) if (verify_area(VERIFY_WRITE, ss32, sizeof(SS32)))
return -EFAULT; return -EFAULT;
__copy_to_user(ss32,&ss,offsetof(SS32,iomem_base)); if (__copy_to_user(ss32,&ss,offsetof(SS32,iomem_base)))
return -EFAULT;
__put_user((unsigned long)ss.iomem_base >> 32 ? __put_user((unsigned long)ss.iomem_base >> 32 ?
0xffffffff : (unsigned)(unsigned long)ss.iomem_base, 0xffffffff : (unsigned)(unsigned long)ss.iomem_base,
&ss32->iomem_base); &ss32->iomem_base);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment