diff -u linux-2.6.18-408.el5.028stab120.1-owl/kernel/ptrace.c linux-2.6.18-408.el5.028stab120.1-owl/kernel/ptrace.c --- linux-2.6.18-408.el5.028stab120.1-owl/kernel/ptrace.c 2016-08-23 15:41:27 +0000 +++ linux-2.6.18-408.el5.028stab120.1-owl/kernel/ptrace.c 2016-10-23 19:55:50 +0000 @@ -41,7 +41,7 @@ struct page *page; void *old_buf = buf; - down_read(&mm->mmap_sem); + down_write(&mm->mmap_sem); /* ignore errors, just check how much was sucessfully transfered */ while (len) { int bytes, ret, offset; @@ -72,7 +72,7 @@ buf += bytes; addr += bytes; } - up_read(&mm->mmap_sem); + up_write(&mm->mmap_sem); return buf - old_buf; } --- linux-2.6.18-408.el5.028stab120.1/mm/madvise.c 2016-01-25 08:11:41 +0000 +++ linux-2.6.18-408.el5.028stab120.1-owl/mm/madvise.c 2016-10-23 19:56:21 +0000 @@ -23,7 +23,6 @@ static int madvise_need_mmap_write(int b switch (behavior) { case MADV_REMOVE: case MADV_WILLNEED: - case MADV_DONTNEED: case MADV_DEACTIVATE: return 0; default: