diff options
author | Lorenzo Stoakes <lstoakes@gmail.com> | 2016-10-12 20:20:20 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-10-19 11:31:25 -0400 |
commit | f307ab6dcea03f9d8e4d70508fd7d1ca57cfa7f9 (patch) | |
tree | 94a96ebae9957cf1252231a69f8904796aa2563e /arch/m32r/kernel | |
parent | 6347e8d5bcce33fc36e651901efefbe2c93a43ef (diff) |
mm: replace access_process_vm() write parameter with gup_flags
This removes the 'write' argument from access_process_vm() and replaces
it with 'gup_flags' as use of this function previously silently implied
FOLL_FORCE, whereas after this patch callers explicitly pass this flag.
We make this explicit as use of FOLL_FORCE can result in surprising
behaviour (and hence bugs) within the mm subsystem.
Signed-off-by: Lorenzo Stoakes <lstoakes@gmail.com>
Acked-by: Jesper Nilsson <jesper.nilsson@axis.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Acked-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/m32r/kernel')
-rw-r--r-- | arch/m32r/kernel/ptrace.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/arch/m32r/kernel/ptrace.c b/arch/m32r/kernel/ptrace.c index 51f5e9aa4901..c145605a981f 100644 --- a/arch/m32r/kernel/ptrace.c +++ b/arch/m32r/kernel/ptrace.c | |||
@@ -493,7 +493,8 @@ unregister_all_debug_traps(struct task_struct *child) | |||
493 | int i; | 493 | int i; |
494 | 494 | ||
495 | for (i = 0; i < p->nr_trap; i++) | 495 | for (i = 0; i < p->nr_trap; i++) |
496 | access_process_vm(child, p->addr[i], &p->insn[i], sizeof(p->insn[i]), 1); | 496 | access_process_vm(child, p->addr[i], &p->insn[i], sizeof(p->insn[i]), |
497 | FOLL_FORCE | FOLL_WRITE); | ||
497 | p->nr_trap = 0; | 498 | p->nr_trap = 0; |
498 | } | 499 | } |
499 | 500 | ||
@@ -537,7 +538,8 @@ embed_debug_trap(struct task_struct *child, unsigned long next_pc) | |||
537 | unsigned long next_insn, code; | 538 | unsigned long next_insn, code; |
538 | unsigned long addr = next_pc & ~3; | 539 | unsigned long addr = next_pc & ~3; |
539 | 540 | ||
540 | if (access_process_vm(child, addr, &next_insn, sizeof(next_insn), 0) | 541 | if (access_process_vm(child, addr, &next_insn, sizeof(next_insn), |
542 | FOLL_FORCE) | ||
541 | != sizeof(next_insn)) { | 543 | != sizeof(next_insn)) { |
542 | return -1; /* error */ | 544 | return -1; /* error */ |
543 | } | 545 | } |
@@ -546,7 +548,8 @@ embed_debug_trap(struct task_struct *child, unsigned long next_pc) | |||
546 | if (register_debug_trap(child, next_pc, next_insn, &code)) { | 548 | if (register_debug_trap(child, next_pc, next_insn, &code)) { |
547 | return -1; /* error */ | 549 | return -1; /* error */ |
548 | } | 550 | } |
549 | if (access_process_vm(child, addr, &code, sizeof(code), 1) | 551 | if (access_process_vm(child, addr, &code, sizeof(code), |
552 | FOLL_FORCE | FOLL_WRITE) | ||
550 | != sizeof(code)) { | 553 | != sizeof(code)) { |
551 | return -1; /* error */ | 554 | return -1; /* error */ |
552 | } | 555 | } |
@@ -562,7 +565,8 @@ withdraw_debug_trap(struct pt_regs *regs) | |||
562 | addr = (regs->bpc - 2) & ~3; | 565 | addr = (regs->bpc - 2) & ~3; |
563 | regs->bpc -= 2; | 566 | regs->bpc -= 2; |
564 | if (unregister_debug_trap(current, addr, &code)) { | 567 | if (unregister_debug_trap(current, addr, &code)) { |
565 | access_process_vm(current, addr, &code, sizeof(code), 1); | 568 | access_process_vm(current, addr, &code, sizeof(code), |
569 | FOLL_FORCE | FOLL_WRITE); | ||
566 | invalidate_cache(); | 570 | invalidate_cache(); |
567 | } | 571 | } |
568 | } | 572 | } |
@@ -589,7 +593,8 @@ void user_enable_single_step(struct task_struct *child) | |||
589 | /* Compute next pc. */ | 593 | /* Compute next pc. */ |
590 | pc = get_stack_long(child, PT_BPC); | 594 | pc = get_stack_long(child, PT_BPC); |
591 | 595 | ||
592 | if (access_process_vm(child, pc&~3, &insn, sizeof(insn), 0) | 596 | if (access_process_vm(child, pc&~3, &insn, sizeof(insn), |
597 | FOLL_FORCE) | ||
593 | != sizeof(insn)) | 598 | != sizeof(insn)) |
594 | return; | 599 | return; |
595 | 600 | ||