Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
dea9f2aa
Commit
dea9f2aa
authored
Jan 22, 2005
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://kernel.bkbits.net/davem/sparc-2.6
into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents
e1acfd06
f2477bfd
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
81 additions
and
40 deletions
+81
-40
arch/sparc/Kconfig
arch/sparc/Kconfig
+2
-0
arch/sparc/kernel/muldiv.c
arch/sparc/kernel/muldiv.c
+7
-4
arch/sparc64/defconfig
arch/sparc64/defconfig
+12
-5
arch/sparc64/lib/memmove.S
arch/sparc64/lib/memmove.S
+5
-7
fs/binfmt_elf.c
fs/binfmt_elf.c
+43
-19
fs/compat_ioctl.c
fs/compat_ioctl.c
+12
-5
No files found.
arch/sparc/Kconfig
View file @
dea9f2aa
...
...
@@ -380,6 +380,8 @@ source "sound/Kconfig"
source "drivers/usb/Kconfig"
source "drivers/infiniband/Kconfig"
source "drivers/char/watchdog/Kconfig"
source "arch/sparc/Kconfig.debug"
...
...
arch/sparc/kernel/muldiv.c
View file @
dea9f2aa
...
...
@@ -4,6 +4,9 @@
*
* Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
* 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>
...
...
@@ -132,7 +135,7 @@ int do_user_muldiv(struct pt_regs *regs, unsigned long pc)
"mov %%o0, %0
\n\t
"
"mov %%o1, %1
\n\t
"
:
"=r"
(
rs1
),
"=r"
(
rs2
)
:
:
"0"
(
rs1
),
"1"
(
rs2
)
:
"o0"
,
"o1"
,
"o2"
,
"o3"
,
"o4"
,
"o5"
,
"o7"
,
"cc"
);
#ifdef DEBUG_MULDIV
printk
(
"0x%x%08x
\n
"
,
rs2
,
rs1
);
...
...
@@ -152,7 +155,7 @@ int do_user_muldiv(struct pt_regs *regs, unsigned long pc)
"mov %%o0, %0
\n\t
"
"mov %%o1, %1
\n\t
"
:
"=r"
(
rs1
),
"=r"
(
rs2
)
:
:
"0"
(
rs1
),
"1"
(
rs2
)
:
"o0"
,
"o1"
,
"o2"
,
"o3"
,
"o4"
,
"o5"
,
"o7"
,
"cc"
);
#ifdef DEBUG_MULDIV
printk
(
"0x%x%08x
\n
"
,
rs2
,
rs1
);
...
...
@@ -181,7 +184,7 @@ int do_user_muldiv(struct pt_regs *regs, unsigned long pc)
"mov %%o1, %0
\n\t
"
"mov %%o0, %1
\n\t
"
:
"=r"
(
rs1
),
"=r"
(
rs2
)
:
"r"
(
regs
->
y
)
:
"r"
(
regs
->
y
)
,
"0"
(
rs1
),
"1"
(
rs2
)
:
"o0"
,
"o1"
,
"o2"
,
"o3"
,
"o4"
,
"o5"
,
"o7"
,
"g1"
,
"g2"
,
"g3"
,
"cc"
);
#ifdef DEBUG_MULDIV
...
...
@@ -210,7 +213,7 @@ int do_user_muldiv(struct pt_regs *regs, unsigned long pc)
"mov %%o1, %0
\n\t
"
"mov %%o0, %1
\n\t
"
:
"=r"
(
rs1
),
"=r"
(
rs2
)
:
"r"
(
regs
->
y
)
:
"r"
(
regs
->
y
)
,
"0"
(
rs1
),
"1"
(
rs2
)
:
"o0"
,
"o1"
,
"o2"
,
"o3"
,
"o4"
,
"o5"
,
"o7"
,
"g1"
,
"g2"
,
"g3"
,
"cc"
);
#ifdef DEBUG_MULDIV
...
...
arch/sparc64/defconfig
View file @
dea9f2aa
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.1
0
#
Mon Jan 10 11:24:25
2005
# Linux kernel version: 2.6.1
1-rc1
#
Fri Jan 21 20:03:21
2005
#
CONFIG_64BIT=y
CONFIG_MMU=y
...
...
@@ -66,13 +66,13 @@ CONFIG_SMP=y
CONFIG_NR_CPUS=4
CONFIG_CPU_FREQ=y
# 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_USERSPACE is not set
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=m
CONFIG_CPU_FREQ_GOV_USERSPACE=m
# CONFIG_CPU_FREQ_24_API is not set
CONFIG_CPU_FREQ_GOV_ONDEMAND=m
CONFIG_CPU_FREQ_TABLE=y
CONFIG_US3_FREQ=m
...
...
@@ -189,6 +189,7 @@ CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_VGA16 is not set
# CONFIG_LOGO_LINUX_CLUT224 is not set
CONFIG_LOGO_SUN_CLUT224=y
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
# Serial drivers
...
...
@@ -228,6 +229,7 @@ CONFIG_OBP_FLASH=m
# CONFIG_BLK_CPQ_CISS_DA is not set
# CONFIG_BLK_DEV_DAC960 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_CRYPTOLOOP=m
CONFIG_BLK_DEV_NBD=m
...
...
@@ -247,6 +249,7 @@ CONFIG_IOSCHED_NOOP=y
CONFIG_IOSCHED_AS=y
CONFIG_IOSCHED_DEADLINE=y
CONFIG_IOSCHED_CFQ=y
CONFIG_ATA_OVER_ETH=m
#
# ATA/ATAPI/MFM/RLL support
...
...
@@ -1202,6 +1205,7 @@ CONFIG_SENSORS_LM87=m
CONFIG_SENSORS_LM90=m
CONFIG_SENSORS_MAX1619=m
CONFIG_SENSORS_PC87360=m
CONFIG_SENSORS_SMSC47B397=m
CONFIG_SENSORS_SMSC47M1=m
CONFIG_SENSORS_VIA686A=m
CONFIG_SENSORS_W83781D=m
...
...
@@ -1759,6 +1763,7 @@ CONFIG_USB_SERIAL_IPAQ=m
# CONFIG_USB_SERIAL_IR is not set
CONFIG_USB_SERIAL_EDGEPORT=m
# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
CONFIG_USB_SERIAL_GARMIN=m
CONFIG_USB_SERIAL_IPW=m
CONFIG_USB_SERIAL_KEYSPAN_PDA=m
CONFIG_USB_SERIAL_KEYSPAN=m
...
...
@@ -1779,6 +1784,7 @@ CONFIG_USB_SERIAL_KLSI=m
CONFIG_USB_SERIAL_MCT_U232=m
CONFIG_USB_SERIAL_PL2303=m
# CONFIG_USB_SERIAL_SAFE is not set
CONFIG_USB_SERIAL_TI=m
CONFIG_USB_SERIAL_CYBERJACK=m
CONFIG_USB_SERIAL_XIRCOM=m
CONFIG_USB_SERIAL_OMNINET=m
...
...
@@ -1789,7 +1795,6 @@ CONFIG_USB_EZUSB=y
#
CONFIG_USB_EMI62=m
CONFIG_USB_EMI26=m
# CONFIG_USB_TIGL is not set
CONFIG_USB_AUERSWALD=m
CONFIG_USB_RIO500=m
CONFIG_USB_LEGOTOWER=m
...
...
@@ -1798,6 +1803,7 @@ CONFIG_USB_LED=m
CONFIG_USB_CYTHERM=m
CONFIG_USB_PHIDGETKIT=m
CONFIG_USB_PHIDGETSERVO=m
CONFIG_USB_IDMOUSE=m
CONFIG_USB_TEST=m
#
...
...
@@ -1863,6 +1869,7 @@ CONFIG_SCHEDSTATS=y
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
CONFIG_DEBUG_FS=y
# CONFIG_DEBUG_STACK_USAGE is not set
CONFIG_KPROBES=y
# CONFIG_DEBUG_DCFLUSH is not set
...
...
arch/sparc64/lib/memmove.S
View file @
dea9f2aa
...
...
@@ -8,18 +8,16 @@
.
align
32
.
globl
memmove
.
type
memmove
,#
function
memmove
:
memmove
:
/
*
o0
=
dst
o1
=
src
o2
=
len
*/
mov
%
o0
,
%
g1
cmp
%
o0
,
%
o1
blu
,
pt
%
xcc
,
memcpy
sub
%
o0
,
%
o1
,
%
g5
add
%
o1
,
%
o2
,
%
g3
cmp
%
g3
,
%
o0
bleu
,
pt
%
xcc
,
memcpy
add
%
o1
,
%
o2
,
%
g5
add
%
o0
,
%
o2
,
%
o5
cmp
%
g5
,
%
o0
bleu
,
pt
%
xcc
,
memcpy
add
%
o0
,
%
o2
,
%
o5
sub
%
g5
,
1
,
%
o1
sub
%
o5
,
1
,
%
o0
1
:
ldub
[%
o1
],
%
g5
subcc
%
o2
,
1
,
%
o2
...
...
fs/binfmt_elf.c
View file @
dea9f2aa
...
...
@@ -110,15 +110,17 @@ static int set_brk(unsigned long start, unsigned long end)
be in memory */
static
void
padzero
(
unsigned
long
elf_bss
)
static
int
padzero
(
unsigned
long
elf_bss
)
{
unsigned
long
nbyte
;
nbyte
=
ELF_PAGEOFFSET
(
elf_bss
);
if
(
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 */
...
...
@@ -134,7 +136,7 @@ static void padzero(unsigned long elf_bss)
#define STACK_ALLOC(sp, len) ({ sp -= len ; sp; })
#endif
static
void
static
int
create_elf_tables
(
struct
linux_binprm
*
bprm
,
struct
elfhdr
*
exec
,
int
interp_aout
,
unsigned
long
load_addr
,
unsigned
long
interp_load_addr
)
...
...
@@ -179,7 +181,8 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr * exec,
STACK_ALLOC
(
p
,
((
current
->
pid
%
64
)
<<
7
));
#endif
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 */
...
...
@@ -241,7 +244,8 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr * exec,
#endif
/* 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
)
{
argv
=
sp
+
2
;
envp
=
argv
+
argc
+
1
;
...
...
@@ -259,25 +263,29 @@ create_elf_tables(struct linux_binprm *bprm, struct elfhdr * exec,
__put_user
((
elf_addr_t
)
p
,
argv
++
);
len
=
strnlen_user
((
void
__user
*
)
p
,
PAGE_SIZE
*
MAX_ARG_PAGES
);
if
(
!
len
||
len
>
PAGE_SIZE
*
MAX_ARG_PAGES
)
return
;
return
0
;
p
+=
len
;
}
__put_user
(
0
,
argv
);
if
(
__put_user
(
0
,
argv
))
return
-
EFAULT
;
current
->
mm
->
arg_end
=
current
->
mm
->
env_start
=
p
;
while
(
envc
--
>
0
)
{
size_t
len
;
__put_user
((
elf_addr_t
)
p
,
envp
++
);
len
=
strnlen_user
((
void
__user
*
)
p
,
PAGE_SIZE
*
MAX_ARG_PAGES
);
if
(
!
len
||
len
>
PAGE_SIZE
*
MAX_ARG_PAGES
)
return
;
return
0
;
p
+=
len
;
}
__put_user
(
0
,
envp
);
if
(
__put_user
(
0
,
envp
))
return
-
EFAULT
;
current
->
mm
->
env_end
=
p
;
/* Put the elf_info on the stack in the right place. */
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
...
...
@@ -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
* 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 */
/* Map the last of the bss segment */
...
...
@@ -791,7 +803,11 @@ static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
nbyte
=
ELF_MIN_ALIGN
-
nbyte
;
if
(
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)
send_sig
(
SIGKILL
,
current
,
0
);
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
(
interpreter_type
==
INTERPRETER_AOUT
)
...
...
@@ -1039,7 +1059,10 @@ static int load_elf_library(struct file *file)
goto
out_free_ph
;
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
);
bss
=
elf_phdata
->
p_memsz
+
elf_phdata
->
p_vaddr
;
...
...
@@ -1246,8 +1269,8 @@ static void fill_prstatus(struct elf_prstatus *prstatus,
cputime_to_timeval
(
p
->
signal
->
cstime
,
&
prstatus
->
pr_cstime
);
}
static
void
fill_psinfo
(
struct
elf_prpsinfo
*
psinfo
,
struct
task_struct
*
p
,
struct
mm_struct
*
mm
)
static
int
fill_psinfo
(
struct
elf_prpsinfo
*
psinfo
,
struct
task_struct
*
p
,
struct
mm_struct
*
mm
)
{
int
i
,
len
;
...
...
@@ -1257,8 +1280,9 @@ static void fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p,
len
=
mm
->
arg_end
-
mm
->
arg_start
;
if
(
len
>=
ELF_PRARGSZ
)
len
=
ELF_PRARGSZ
-
1
;
copy_from_user
(
&
psinfo
->
pr_psargs
,
(
const
char
__user
*
)
mm
->
arg_start
,
len
);
if
(
copy_from_user
(
&
psinfo
->
pr_psargs
,
(
const
char
__user
*
)
mm
->
arg_start
,
len
))
return
-
EFAULT
;
for
(
i
=
0
;
i
<
len
;
i
++
)
if
(
psinfo
->
pr_psargs
[
i
]
==
0
)
psinfo
->
pr_psargs
[
i
]
=
' '
;
...
...
@@ -1279,7 +1303,7 @@ static void fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p,
SET_GID
(
psinfo
->
pr_gid
,
p
->
gid
);
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. */
...
...
fs/compat_ioctl.c
View file @
dea9f2aa
...
...
@@ -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
* in the ioctl handler instead.
*/
copy_to_user
(
&
u_ifreq64
->
ifr_ifrn
.
ifrn_name
[
0
],
&
tmp_buf
[
0
],
IFNAMSIZ
);
__put_user
(
data64
,
&
u_ifreq64
->
ifr_ifru
.
ifru_data
);
if
(
copy_to_user
(
&
u_ifreq64
->
ifr_ifrn
.
ifrn_name
[
0
],
&
tmp_buf
[
0
],
IFNAMSIZ
))
return
-
EFAULT
;
if
(
__put_user
(
data64
,
&
u_ifreq64
->
ifr_ifru
.
ifru_data
))
return
-
EFAULT
;
return
sys_ioctl
(
fd
,
cmd
,
(
unsigned
long
)
u_ifreq64
);
}
...
...
@@ -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_off
,
&
d32
->
d_off
);
__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
;
}
...
...
@@ -2486,7 +2491,8 @@ static int serial_struct_ioctl(unsigned fd, unsigned cmd, unsigned long arg)
if
(
cmd
==
TIOCSSERIAL
)
{
if
(
verify_area
(
VERIFY_READ
,
ss32
,
sizeof
(
SS32
)))
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
);
ss
.
iomem_base
=
compat_ptr
(
udata
);
__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)
if
(
cmd
==
TIOCGSERIAL
&&
err
>=
0
)
{
if
(
verify_area
(
VERIFY_WRITE
,
ss32
,
sizeof
(
SS32
)))
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
?
0xffffffff
:
(
unsigned
)(
unsigned
long
)
ss
.
iomem_base
,
&
ss32
->
iomem_base
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment