git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git]
/
arch
/
sparc
/
kernel
/
unaligned.c
diff --git
a/arch/sparc/kernel/unaligned.c
b/arch/sparc/kernel/unaligned.c
index
4e635ae
..
a40bbcf
100644
(file)
--- a/
arch/sparc/kernel/unaligned.c
+++ b/
arch/sparc/kernel/unaligned.c
@@
-109,14
+109,14
@@
static inline unsigned long fetch_reg(unsigned int reg, struct pt_regs *regs)
static inline unsigned long safe_fetch_reg(unsigned int reg, struct pt_regs *regs)
{
static inline unsigned long safe_fetch_reg(unsigned int reg, struct pt_regs *regs)
{
- struct reg_window *win;
+ struct reg_window
__user
*win;
unsigned long ret;
unsigned long ret;
- if(reg < 16)
+ if
(reg < 16)
return (!reg ? 0 : regs->u_regs[reg]);
/* Ho hum, the slightly complicated case. */
return (!reg ? 0 : regs->u_regs[reg]);
/* Ho hum, the slightly complicated case. */
- win = (struct reg_window *) regs->u_regs[UREG_FP];
+ win = (struct reg_window
__user
*) regs->u_regs[UREG_FP];
if ((unsigned long)win & 3)
return -1;
if ((unsigned long)win & 3)
return -1;
@@
-137,8
+137,8
@@
static inline unsigned long *fetch_reg_addr(unsigned int reg, struct pt_regs *re
return &win->locals[reg - 16];
}
return &win->locals[reg - 16];
}
-static
inline
unsigned long compute_effective_address(struct pt_regs *regs,
-
unsigned int insn)
+static unsigned long compute_effective_address(struct pt_regs *regs,
+ unsigned int insn)
{
unsigned int rs1 = (insn >> 14) & 0x1f;
unsigned int rs2 = insn & 0x1f;
{
unsigned int rs1 = (insn >> 14) & 0x1f;
unsigned int rs2 = insn & 0x1f;
@@
-153,8
+153,8
@@
static inline unsigned long compute_effective_address(struct pt_regs *regs,
}
}
}
}
-
static inline
unsigned long safe_compute_effective_address(struct pt_regs *regs,
-
unsigned int insn)
+unsigned long safe_compute_effective_address(struct pt_regs *regs,
+ unsigned int insn)
{
unsigned int rs1 = (insn >> 14) & 0x1f;
unsigned int rs2 = insn & 0x1f;
{
unsigned int rs1 = (insn >> 14) & 0x1f;
unsigned int rs2 = insn & 0x1f;
@@
-431,29
+431,32
@@
static inline int ok_for_user(struct pt_regs *regs, unsigned int insn,
int retval, check = (dir == load) ? VERIFY_READ : VERIFY_WRITE;
int size = ((insn >> 19) & 3) == 3 ? 8 : 4;
int retval, check = (dir == load) ? VERIFY_READ : VERIFY_WRITE;
int size = ((insn >> 19) & 3) == 3 ? 8 : 4;
- if((regs->pc | regs->npc) & 3)
+ if
((regs->pc | regs->npc) & 3)
return 0;
/* Must verify_area() in all the necessary places. */
return 0;
/* Must verify_area() in all the necessary places. */
-#define WINREG_ADDR(regnum) ((void *)(((unsigned long *)regs->u_regs[UREG_FP])+(regnum)))
+#define WINREG_ADDR(regnum) \
+ ((void __user *)(((unsigned long *)regs->u_regs[UREG_FP])+(regnum)))
+
retval = 0;
reg = (insn >> 25) & 0x1f;
retval = 0;
reg = (insn >> 25) & 0x1f;
- if(reg >= 16) {
+ if
(reg >= 16) {
retval = verify_area(check, WINREG_ADDR(reg - 16), size);
retval = verify_area(check, WINREG_ADDR(reg - 16), size);
- if(retval)
+ if
(retval)
return retval;
}
reg = (insn >> 14) & 0x1f;
return retval;
}
reg = (insn >> 14) & 0x1f;
- if(reg >= 16) {
+ if
(reg >= 16) {
retval = verify_area(check, WINREG_ADDR(reg - 16), size);
retval = verify_area(check, WINREG_ADDR(reg - 16), size);
- if(retval)
+ if
(retval)
return retval;
}
return retval;
}
- if(!(insn & 0x2000)) {
+ if
(!(insn & 0x2000)) {
reg = (insn & 0x1f);
reg = (insn & 0x1f);
- if(reg >= 16) {
- retval = verify_area(check, WINREG_ADDR(reg - 16), size);
- if(retval)
+ if (reg >= 16) {
+ retval = verify_area(check, WINREG_ADDR(reg - 16),
+ size);
+ if (retval)
return retval;
}
}
return retval;
}
}
@@
-470,7
+473,7
@@
void user_mna_trap_fault(struct pt_regs *regs, unsigned int insn)
info.si_signo = SIGBUS;
info.si_errno = 0;
info.si_code = BUS_ADRALN;
info.si_signo = SIGBUS;
info.si_errno = 0;
info.si_code = BUS_ADRALN;
- info.si_addr = (void *)safe_compute_effective_address(regs, insn);
+ info.si_addr = (void
__user
*)safe_compute_effective_address(regs, insn);
info.si_trapno = 0;
send_sig_info(SIGBUS, &info, current);
}
info.si_trapno = 0;
send_sig_info(SIGBUS, &info, current);
}