From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on gnuweeb.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, NICE_REPLY_A,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id E9082C433EF for ; Tue, 10 May 2022 20:30:22 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 664E36B0074; Tue, 10 May 2022 16:30:22 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 612B96B0075; Tue, 10 May 2022 16:30:22 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4DCD88D0001; Tue, 10 May 2022 16:30:22 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id 40DE56B0074 for ; Tue, 10 May 2022 16:30:22 -0400 (EDT) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 170CC32036 for ; Tue, 10 May 2022 20:30:22 +0000 (UTC) X-FDA: 79450975884.01.4D6D322 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by imf21.hostedemail.com (Postfix) with ESMTP id 0046E1C00A6 for ; Tue, 10 May 2022 20:30:13 +0000 (UTC) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id 5501DB81FA7; Tue, 10 May 2022 20:30:19 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 81084C385CA; Tue, 10 May 2022 20:30:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linux-foundation.org; s=korg; t=1652214618; bh=iEm7x6KjhRExhpq8F0JTOjT9f0YF/VsiFX+gYeNlJK0=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=qnY0IAokRE1n24DouxgKQ/dIlTNTA/skbjaNu0JimqWU696PDSQa5aznRCubtNuQr +hyAhNTkUT6YnJZMQrne3P8Wvp8+Hh0P/3UPvBr79RmcJSbWWQpKi+OXIB05k9Yr/s UydUk+T0xCHaGO+tzGOxcDoIaAsbYX/8OsSsyCcQ= Date: Tue, 10 May 2022 13:30:16 -0700 From: Andrew Morton To: Ammar Faizi Cc: cgel.zte@gmail.com, Kees Cook , Matthew Wilcox , Yang Yang , Ran Xiaokai , Yunkai Zhang , xu xin , wangyong , Linux MM Mailing List , Linux fsdevel Mailing List , Linux Kernel Mailing List Subject: Re: [PATCH v5] mm/ksm: introduce ksm_force for each process Message-Id: <20220510133016.9feff1aeec1a7a9ae137a8c3@linux-foundation.org> In-Reply-To: <435b5f7a-fcbd-f7ae-b66f-670e5997aa1b@gnuweeb.org> References: <20220507105926.d4423601230f698b0f5228d1@linux-foundation.org> <20220508092710.930126-1-xu.xin16@zte.com.cn> <435b5f7a-fcbd-f7ae-b66f-670e5997aa1b@gnuweeb.org> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.33; x86_64-redhat-linux-gnu) Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 0046E1C00A6 X-Stat-Signature: cuumw63xi8e1qs63dun3weozot3fo33z X-Rspam-User: Authentication-Results: imf21.hostedemail.com; dkim=pass header.d=linux-foundation.org header.s=korg header.b=qnY0IAok; spf=pass (imf21.hostedemail.com: domain of akpm@linux-foundation.org designates 145.40.68.75 as permitted sender) smtp.mailfrom=akpm@linux-foundation.org; dmarc=none X-Rspamd-Server: rspam09 X-HE-Tag: 1652214613-964117 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Wed, 11 May 2022 03:10:31 +0700 Ammar Faizi wrote: > On 5/8/22 4:27 PM, cgel.zte@gmail.com wrote: > > +static ssize_t ksm_force_write(struct file *file, const char __user *buf, > > + size_t count, loff_t *ppos) > > +{ > > + struct task_struct *task; > > + struct mm_struct *mm; > > + char buffer[PROC_NUMBUF]; > > + int force; > > + int err = 0; > > + > > + memset(buffer, 0, sizeof(buffer)); > > + if (count > sizeof(buffer) - 1) > > + count = sizeof(buffer) - 1; > > + if (copy_from_user(buffer, buf, count)) { > > + err = -EFAULT; > > + goto out_return; > > + } > > This one looks like over-zeroing to me. You don't need to zero > all elements in the array. You're going to overwrite it with > `copy_from_user()` anyway. > > Just zero the last potentially useful element by using @count > as the index. It can be like this: > > ``` > char buffer[PROC_NUMBUF]; > > if (count > sizeof(buffer) - 1) > count = sizeof(buffer) - 1; > if (copy_from_user(buffer, buf, count)) > return -EFAULT; > buffer[count] = '\0'; > ``` Use strncpy_from_user()? Can this code use proc_dointvec_minmax() or similar?