Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752693AbbHTJ6U (ORCPT ); Thu, 20 Aug 2015 05:58:20 -0400 Received: from mail-wi0-f169.google.com ([209.85.212.169]:36286 "EHLO mail-wi0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751286AbbHTJ6R (ORCPT ); Thu, 20 Aug 2015 05:58:17 -0400 MIME-Version: 1.0 In-Reply-To: <1440061141-9778-1-git-send-email-yalin.wang2010@gmail.com> References: <1440061141-9778-1-git-send-email-yalin.wang2010@gmail.com> Date: Thu, 20 Aug 2015 11:58:16 +0200 Message-ID: Subject: Re: [RFC] fs/kcore: change copy_to_user to copy_in_user From: Frans Klaver To: yalin wang Cc: bp@suse.de, Ingo Molnar , dave@sr71.net, bhe@redhat.com, Andrew Morton , "linux-kernel@vger.kernel.org" Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2171 Lines: 48 On Thu, Aug 20, 2015 at 10:59 AM, yalin wang wrote: > the copy_to_user() here expect can fix the fault on both kernel and > user address, this is not true on other platforms except x86, > change to user copy_in_user() so that can detect the page fault, > work as expected. Could you rephrase this into multiple sentences in comprehensible English? What is the expected behavior, what is the unexpected behavior and what can people do to trigger it? > Signed-off-by: yalin wang > --- > fs/proc/kcore.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/fs/proc/kcore.c b/fs/proc/kcore.c > index 92e6726..4f28deb 100644 > --- a/fs/proc/kcore.c > +++ b/fs/proc/kcore.c > @@ -515,8 +515,12 @@ read_kcore(struct file *file, char __user *buffer, size_t buflen, loff_t *fpos) > } else { > if (kern_addr_valid(start)) { > unsigned long n; > - > - n = copy_to_user(buffer, (char *)start, tsz); > + if ((start + tsz < tsz) || > + (start + tsz) > TASK_SIZE) > + return -EFAULT; > + set_fs(KERNEL_DS); > + n = copy_in_user(buffer, (char *)start, tsz); > + set_fs(USER_DS); > /* > * We cannot distinguish between fault on source > * and fault on destination. When this happens > -- > 1.9.1 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/