aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-03-03 15:58:43 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-03-03 15:58:43 -0500
commit530ede14cf63ef4a207b0003e14af2f750484180 (patch)
tree2849be2c8fd6d2d6a8a71447aebe5d7400317c8d /arch/s390/kernel
parent6977c6fc77b864dc1851e100c8528c2f3ed5bd9b (diff)
parent72a6b43e4bbb818ac1875a3a572cb2aa8c9af820 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux
Pull second set of s390 patches from Martin Schwidefsky: "The main part of this merge are Heikos uaccess patches. Together with commit 09884964335e ("mm: do not grow the stack vma just because of an overrun on preceding vma") the user string access is hopefully fixed for good. In addition some bug fixes and two cleanup patches." * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: s390/module: fix compile warning qdio: remove unused parameters s390/uaccess: fix kernel ds access for page table walk s390/uaccess: fix strncpy_from_user string length check input: disable i8042 PC Keyboard controller for s390 s390/dis: Fix invalid array size s390/uaccess: remove pointless access_ok() checks s390/uaccess: fix strncpy_from_user/strnlen_user zero maxlen case s390/uaccess: shorten strncpy_from_user/strnlen_user s390/dasd: fix unresponsive device after all channel paths were lost s390/mm: ignore change bit for vmemmap s390/page table dumper: add support for change-recording override bit
Diffstat (limited to 'arch/s390/kernel')
-rw-r--r--arch/s390/kernel/compat_signal.c14
-rw-r--r--arch/s390/kernel/dis.c4
-rw-r--r--arch/s390/kernel/module.c2
-rw-r--r--arch/s390/kernel/signal.c8
4 files changed, 3 insertions, 25 deletions
diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c
index 3e71194c1902..6de049fbe62d 100644
--- a/arch/s390/kernel/compat_signal.c
+++ b/arch/s390/kernel/compat_signal.c
@@ -53,9 +53,6 @@ int copy_siginfo_to_user32(compat_siginfo_t __user *to, siginfo_t *from)
53{ 53{
54 int err; 54 int err;
55 55
56 if (!access_ok (VERIFY_WRITE, to, sizeof(compat_siginfo_t)))
57 return -EFAULT;
58
59 /* If you change siginfo_t structure, please be sure 56 /* If you change siginfo_t structure, please be sure
60 this code is fixed accordingly. 57 this code is fixed accordingly.
61 It should never copy any pad contained in the structure 58 It should never copy any pad contained in the structure
@@ -110,9 +107,6 @@ int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from)
110 int err; 107 int err;
111 u32 tmp; 108 u32 tmp;
112 109
113 if (!access_ok (VERIFY_READ, from, sizeof(compat_siginfo_t)))
114 return -EFAULT;
115
116 err = __get_user(to->si_signo, &from->si_signo); 110 err = __get_user(to->si_signo, &from->si_signo);
117 err |= __get_user(to->si_errno, &from->si_errno); 111 err |= __get_user(to->si_errno, &from->si_errno);
118 err |= __get_user(to->si_code, &from->si_code); 112 err |= __get_user(to->si_code, &from->si_code);
@@ -244,8 +238,6 @@ asmlinkage long sys32_sigreturn(void)
244 sigframe32 __user *frame = (sigframe32 __user *)regs->gprs[15]; 238 sigframe32 __user *frame = (sigframe32 __user *)regs->gprs[15];
245 sigset_t set; 239 sigset_t set;
246 240
247 if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
248 goto badframe;
249 if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE32)) 241 if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE32))
250 goto badframe; 242 goto badframe;
251 set_current_blocked(&set); 243 set_current_blocked(&set);
@@ -265,8 +257,6 @@ asmlinkage long sys32_rt_sigreturn(void)
265 rt_sigframe32 __user *frame = (rt_sigframe32 __user *)regs->gprs[15]; 257 rt_sigframe32 __user *frame = (rt_sigframe32 __user *)regs->gprs[15];
266 sigset_t set; 258 sigset_t set;
267 259
268 if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
269 goto badframe;
270 if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) 260 if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set)))
271 goto badframe; 261 goto badframe;
272 set_current_blocked(&set); 262 set_current_blocked(&set);
@@ -325,8 +315,6 @@ static int setup_frame32(int sig, struct k_sigaction *ka,
325 sigset_t *set, struct pt_regs * regs) 315 sigset_t *set, struct pt_regs * regs)
326{ 316{
327 sigframe32 __user *frame = get_sigframe(ka, regs, sizeof(sigframe32)); 317 sigframe32 __user *frame = get_sigframe(ka, regs, sizeof(sigframe32));
328 if (!access_ok(VERIFY_WRITE, frame, sizeof(sigframe32)))
329 goto give_sigsegv;
330 318
331 if (frame == (void __user *) -1UL) 319 if (frame == (void __user *) -1UL)
332 goto give_sigsegv; 320 goto give_sigsegv;
@@ -391,8 +379,6 @@ static int setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info,
391{ 379{
392 int err = 0; 380 int err = 0;
393 rt_sigframe32 __user *frame = get_sigframe(ka, regs, sizeof(rt_sigframe32)); 381 rt_sigframe32 __user *frame = get_sigframe(ka, regs, sizeof(rt_sigframe32));
394 if (!access_ok(VERIFY_WRITE, frame, sizeof(rt_sigframe32)))
395 goto give_sigsegv;
396 382
397 if (frame == (void __user *) -1UL) 383 if (frame == (void __user *) -1UL)
398 goto give_sigsegv; 384 goto give_sigsegv;
diff --git a/arch/s390/kernel/dis.c b/arch/s390/kernel/dis.c
index c50665fe9435..3ad5e9540160 100644
--- a/arch/s390/kernel/dis.c
+++ b/arch/s390/kernel/dis.c
@@ -1711,10 +1711,10 @@ int insn_to_mnemonic(unsigned char *instruction, char buf[8])
1711 if (!insn) 1711 if (!insn)
1712 return -ENOENT; 1712 return -ENOENT;
1713 if (insn->name[0] == '\0') 1713 if (insn->name[0] == '\0')
1714 snprintf(buf, sizeof(buf), "%s", 1714 snprintf(buf, 8, "%s",
1715 long_insn_name[(int) insn->name[1]]); 1715 long_insn_name[(int) insn->name[1]]);
1716 else 1716 else
1717 snprintf(buf, sizeof(buf), "%.5s", insn->name); 1717 snprintf(buf, 8, "%.5s", insn->name);
1718 return 0; 1718 return 0;
1719} 1719}
1720EXPORT_SYMBOL_GPL(insn_to_mnemonic); 1720EXPORT_SYMBOL_GPL(insn_to_mnemonic);
diff --git a/arch/s390/kernel/module.c b/arch/s390/kernel/module.c
index f750bd7bd2c2..7845e15a17df 100644
--- a/arch/s390/kernel/module.c
+++ b/arch/s390/kernel/module.c
@@ -222,7 +222,7 @@ static int apply_rela(Elf_Rela *rela, Elf_Addr base, Elf_Sym *symtab,
222 struct mod_arch_syminfo *info; 222 struct mod_arch_syminfo *info;
223 Elf_Addr loc, val; 223 Elf_Addr loc, val;
224 int r_type, r_sym; 224 int r_type, r_sym;
225 int rc; 225 int rc = -ENOEXEC;
226 226
227 /* This is where to make the change */ 227 /* This is where to make the change */
228 loc = base + rela->r_offset; 228 loc = base + rela->r_offset;
diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c
index 9c6e747a5e1e..c45becf82e01 100644
--- a/arch/s390/kernel/signal.c
+++ b/arch/s390/kernel/signal.c
@@ -116,8 +116,6 @@ SYSCALL_DEFINE0(sigreturn)
116 sigframe __user *frame = (sigframe __user *)regs->gprs[15]; 116 sigframe __user *frame = (sigframe __user *)regs->gprs[15];
117 sigset_t set; 117 sigset_t set;
118 118
119 if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
120 goto badframe;
121 if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE)) 119 if (__copy_from_user(&set.sig, &frame->sc.oldmask, _SIGMASK_COPY_SIZE))
122 goto badframe; 120 goto badframe;
123 set_current_blocked(&set); 121 set_current_blocked(&set);
@@ -135,8 +133,6 @@ SYSCALL_DEFINE0(rt_sigreturn)
135 rt_sigframe __user *frame = (rt_sigframe __user *)regs->gprs[15]; 133 rt_sigframe __user *frame = (rt_sigframe __user *)regs->gprs[15];
136 sigset_t set; 134 sigset_t set;
137 135
138 if (!access_ok(VERIFY_READ, frame, sizeof(*frame)))
139 goto badframe;
140 if (__copy_from_user(&set.sig, &frame->uc.uc_sigmask, sizeof(set))) 136 if (__copy_from_user(&set.sig, &frame->uc.uc_sigmask, sizeof(set)))
141 goto badframe; 137 goto badframe;
142 set_current_blocked(&set); 138 set_current_blocked(&set);
@@ -195,8 +191,6 @@ static int setup_frame(int sig, struct k_sigaction *ka,
195 sigframe __user *frame; 191 sigframe __user *frame;
196 192
197 frame = get_sigframe(ka, regs, sizeof(sigframe)); 193 frame = get_sigframe(ka, regs, sizeof(sigframe));
198 if (!access_ok(VERIFY_WRITE, frame, sizeof(sigframe)))
199 goto give_sigsegv;
200 194
201 if (frame == (void __user *) -1UL) 195 if (frame == (void __user *) -1UL)
202 goto give_sigsegv; 196 goto give_sigsegv;
@@ -264,8 +258,6 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
264 rt_sigframe __user *frame; 258 rt_sigframe __user *frame;
265 259
266 frame = get_sigframe(ka, regs, sizeof(rt_sigframe)); 260 frame = get_sigframe(ka, regs, sizeof(rt_sigframe));
267 if (!access_ok(VERIFY_WRITE, frame, sizeof(rt_sigframe)))
268 goto give_sigsegv;
269 261
270 if (frame == (void __user *) -1UL) 262 if (frame == (void __user *) -1UL)
271 goto give_sigsegv; 263 goto give_sigsegv;