From patchwork Mon Jan 23 17:37:34 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 47303 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp1745088wrn; Mon, 23 Jan 2023 10:08:34 -0800 (PST) X-Google-Smtp-Source: AMrXdXtsIWTaH6BRqKmBTgmqI0Z+MHHaKkCDjnA4CnOtmtzh/d+FIzMKP1da+OVNu6yeEjx9ASI/ X-Received: by 2002:a05:6a20:d2c6:b0:b8:5ab4:279c with SMTP id ir6-20020a056a20d2c600b000b85ab4279cmr26164282pzb.30.1674497314476; Mon, 23 Jan 2023 10:08:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1674497314; cv=none; d=google.com; s=arc-20160816; b=S+6r0WZ0hKNP40ZIVF8RksqZmkXm5lgACTD0neL4lFJsTR1YQVxaY1o61PdcpYiojA pljgV5DbDmtQVSDByhT/JIUQgY2a5TyIvmWt5o1zvAoYBT2ej48ug7yVLd2wMmPJGsE1 B3QwsTDEhixsxCd93ow9WrVdrID/1z3+lUUAf8zrh+9y/LwtQ4QIsfz7HiGfP7zHixKE ABSl4LwGU5XiSRm/PNVKyLlNafEB2Z5RgZjIWRh7/jRFmRSzTYRJ6wrL/pEAL7ZUtxFe 0XK4D+43BBWZk87QUw2ZDLTqO7bbzBBVtIdNajSMRSpyoaEx4deDtKEXo9mJqf88i4Ql ghcw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=ucXKiMMl7/A42LPHk0QGuSkEvmMvvR8fx4BZygA5Bmg=; b=ZWgoIt+zOLiWJSTVTCqpC3NITf99OaK1tDUTMfbnnoYA6e7NJAAhTx5b73rzANRi8D QEoaaL6faFL1IY/6OqYBP/AzdYHLgr86i3wJNx1eysEwHqZ1Aa6fSyNC2gQgYVUiDuiE S0zl94uRQecGk5V+Z66KuCCIZr0loFAeqUYCHIgAtpgespHEm1gO1cHK5vDEcfOw18rz kXvz6939zpNBfUR4u6O7HZRgpfVQR9mvvdB4r5zjb5BexE8g8j8fAjmw/VYHHqHNX6V7 zxRK+YafiT/BxO5nuO0iSStyYEqijXB3ns87Cw5iRS6LukSTFafnlQNHjDMpw7BrT/hL BtvA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id n20-20020a635914000000b00498688359b6si51820164pgb.287.2023.01.23.10.08.22; Mon, 23 Jan 2023 10:08:34 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233797AbjAWSGy (ORCPT + 99 others); Mon, 23 Jan 2023 13:06:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47414 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233793AbjAWSGv (ORCPT ); Mon, 23 Jan 2023 13:06:51 -0500 Received: from 66-220-144-178.mail-mxout.facebook.com (66-220-144-178.mail-mxout.facebook.com [66.220.144.178]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C608330E83 for ; Mon, 23 Jan 2023 10:06:34 -0800 (PST) Received: by dev0134.prn3.facebook.com (Postfix, from userid 425415) id 572115616BDD; Mon, 23 Jan 2023 09:37:56 -0800 (PST) From: Stefan Roesch To: linux-mm@kvack.org Cc: shr@devkernel.io, linux-doc@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-trace-kernel@vger.kernel.org Subject: [RESEND RFC PATCH v1 06/20] mm: add new prctl option to get and set ksm for a process Date: Mon, 23 Jan 2023 09:37:34 -0800 Message-Id: <20230123173748.1734238-7-shr@devkernel.io> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230123173748.1734238-1-shr@devkernel.io> References: <20230123173748.1734238-1-shr@devkernel.io> MIME-Version: 1.0 X-Spam-Status: No, score=2.4 required=5.0 tests=BAYES_00,RDNS_DYNAMIC, SPF_HELO_PASS,SPF_NEUTRAL,SUSPICIOUS_RECIPS,TVD_RCVD_IP autolearn=no autolearn_force=no version=3.4.6 X-Spam-Level: ** X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1755837695903428179?= X-GMAIL-MSGID: =?utf-8?q?1755837695903428179?= This adds two new options to the prctl system call - enable ksm for all vmas of a process (if the vmas support it). - query if ksm has been enabled for a process. Signed-off-by: Stefan Roesch --- include/uapi/linux/prctl.h | 2 ++ kernel/sys.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/include/uapi/linux/prctl.h b/include/uapi/linux/prctl.h index a5e06dcbba13..b8ba85f18e43 100644 --- a/include/uapi/linux/prctl.h +++ b/include/uapi/linux/prctl.h @@ -284,4 +284,6 @@ struct prctl_mm_map { #define PR_SET_VMA 0x53564d41 # define PR_SET_VMA_ANON_NAME 0 +#define PR_SET_MEMORY_MERGE 65 +#define PR_GET_MEMORY_MERGE 66 #endif /* _LINUX_PRCTL_H */ diff --git a/kernel/sys.c b/kernel/sys.c index 5fd54bf0e886..de218e3b6f42 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -2626,6 +2627,34 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, case PR_SET_VMA: error = prctl_set_vma(arg2, arg3, arg4, arg5); break; +#ifdef CONFIG_KSM + case PR_SET_MEMORY_MERGE: + if (!capable(CAP_SYS_RESOURCE)) + return -EPERM; + + if (arg2) { + if (mmap_write_lock_killable(me->mm)) + return -EINTR; + + if (test_bit(MMF_VM_MERGEABLE, &me->mm->flags)) + error = -EINVAL; + else if (!test_bit(MMF_VM_MERGE_ANY, &me->mm->flags)) + error = __ksm_enter(me->mm, MMF_VM_MERGE_ANY); + mmap_write_unlock(me->mm); + } else { + __ksm_exit(me->mm, MMF_VM_MERGE_ANY); + } + break; + case PR_GET_MEMORY_MERGE: + if (!capable(CAP_SYS_RESOURCE)) + return -EPERM; + + if (arg2 || arg3 || arg4 || arg5) + return -EINVAL; + + error = !!test_bit(MMF_VM_MERGE_ANY, &me->mm->flags); + break; +#endif default: error = -EINVAL; break;