From patchwork Wed Sep 20 19:01:16 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 142559 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:172:b0:3f2:4152:657d with SMTP id h50csp4366916vqi; Wed, 20 Sep 2023 12:13:36 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGc+SJ/2oHt3Cb3PUvweNedxl0bwljR8D9qWDdz3G4Qrge1W8nJyHZfRm7Gvm2SzQpMCZIl X-Received: by 2002:a05:6a00:390e:b0:68e:3735:1b8b with SMTP id fh14-20020a056a00390e00b0068e37351b8bmr3938489pfb.28.1695237216623; Wed, 20 Sep 2023 12:13:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695237216; cv=none; d=google.com; s=arc-20160816; b=G/xUkt+XirszkpZkABAoOWg2XoLWrD/QSLikAa/ZcFDFhgsHmYhUPIlrF9Gno6NdU+ of2b6AKsVh7rMuxEpUGJ8pzXlQPSswCP+/+CDlSTQpYkSgQFa60V5hTrjHMvgXjm5epe ApL4r3oOU+q2xnwBdhaHrjAttSx1z6h1RbdJcU2CpQqzWpAxQSZj4s32xzDZLS/ZdRvt dQZT4aCD3J+N7tSvKxOCzyxtmi1Xj4d2nsXcSKTuGs8L+d/Zimj9rSBH7d8QdIuuUQuA 3Jogu2Xa2zz7MgZr+2nGs90PEpTTPuAGZgM8ZKF0INsFHUgwki2NEp/FKhyBd9lnGwft c8yA== 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=2Ui9HQp2pxPJ3NIxebx6kuSf7rRkN1tIaYoms9ZvXGw=; fh=trQN94Iqca1GMQF1AkSOofuqg8pe0AKHPTTlJaXdYFw=; b=lgU0wdiISV0xNQ9/aGfqSeWyQBOUcovYO79b0dmTKzYCDNskqrpAQErfq5QOAWjMZS fpqntdNzR4IfkEPfftMyvcTvD4M0I8QTmlDnIKeYpfU5M+UPwQk2vj1mxoASHp9LCRxS YQlQAfn4QHb6rzoRXVq+LZPi6763Md2JTlh4Ckp6/m9Zmdqpf22CFBNrlRgJzDtijjjD ORhPzj4LvVpLC5nSOYyqq1XNKzdu3ZoZgbGYPc8qwy9j4JhrNeq4s4ZkXeR0FlsQjawx CG1nxCXZ/D4agYcwbazquE1QOUJG94cbNWMCTajcC9hBmKMrtdW+YS9Ef+EpgCETM5D3 6aRA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id z6-20020a633306000000b00573faa3bb3csi1675095pgz.307.2023.09.20.12.13.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Sep 2023 12:13:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 204028057B23; Wed, 20 Sep 2023 12:02:07 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229867AbjITTBp (ORCPT + 27 others); Wed, 20 Sep 2023 15:01:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42418 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229813AbjITTBm (ORCPT ); Wed, 20 Sep 2023 15:01:42 -0400 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 D56DBCF for ; Wed, 20 Sep 2023 12:01:35 -0700 (PDT) Received: by devbig1114.prn1.facebook.com (Postfix, from userid 425415) id 33BFBC4363F6; Wed, 20 Sep 2023 12:01:22 -0700 (PDT) From: Stefan Roesch To: kernel-team@fb.com Cc: shr@devkernel.io, akpm@linux-foundation.org, david@redhat.com, hannes@cmpxchg.org, riel@surriel.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, Carl Klemm Subject: [PATCH v2 1/2] mm/ksm: support fork/exec for prctl Date: Wed, 20 Sep 2023 12:01:16 -0700 Message-Id: <20230920190117.784151-2-shr@devkernel.io> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20230920190117.784151-1-shr@devkernel.io> References: <20230920190117.784151-1-shr@devkernel.io> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Wed, 20 Sep 2023 12:02:07 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1777585059602739279 X-GMAIL-MSGID: 1777585059602739279 A process can enable KSM with the prctl system call. When the process is forked the KSM flag is inherited by the child process. However if the process is executing an exec system call directly after the fork, the KSM setting is cleared. This patch addresses this problem. Signed-off-by: Stefan Roesch Fixes: d7597f59d1d3 ("mm: add new api to enable ksm per process") Reviewed-by: David Hildenbrand Reported-by: Carl Klemm Tested-by: Carl Klemm --- include/linux/sched/coredump.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/include/linux/sched/coredump.h b/include/linux/sched/coredump.h index 0ee96ea7a0e9..205aa9917394 100644 --- a/include/linux/sched/coredump.h +++ b/include/linux/sched/coredump.h @@ -87,8 +87,11 @@ static inline int get_dumpable(struct mm_struct *mm) #define MMF_DISABLE_THP_MASK (1 << MMF_DISABLE_THP) +#define MMF_VM_MERGE_ANY 29 +#define MMF_VM_MERGE_ANY_MASK (1 << MMF_VM_MERGE_ANY) + #define MMF_INIT_MASK (MMF_DUMPABLE_MASK | MMF_DUMP_FILTER_MASK |\ - MMF_DISABLE_THP_MASK | MMF_HAS_MDWE_MASK) + MMF_DISABLE_THP_MASK | MMF_HAS_MDWE_MASK |\ + MMF_VM_MERGE_ANY_MASK) -#define MMF_VM_MERGE_ANY 29 #endif /* _LINUX_SCHED_COREDUMP_H */ From patchwork Wed Sep 20 19:01:17 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 142557 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:172:b0:3f2:4152:657d with SMTP id h50csp4365943vqi; Wed, 20 Sep 2023 12:11:52 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGnjTe8+TMorTc7W9t6/7p6u8WDxOym2Aehra/Og7C51J1uGikhzv68BzLA3oxnrB7SiIDm X-Received: by 2002:a05:6358:9192:b0:134:d45b:7dd1 with SMTP id j18-20020a056358919200b00134d45b7dd1mr3233428rwa.21.1695237112375; Wed, 20 Sep 2023 12:11:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695237112; cv=none; d=google.com; s=arc-20160816; b=wpyMRHNcwdKscEJ3JQZXoTo8p0xynAAlhuqeJuFux8pGvzFabZW4PhuE15O2fzUmfX OddJg8dBos3KgyvkOy78Q7q3QLa63divOrHX60snhcoz2TMVaxjiccIMmWjLt+OAQvcA zs28l3/vJyp2VZPIWR1QU/lWe4gD+s16P+MEJPMx2tQ4B3rfGYYuB5Hlyq8+hXqAmw+g VGcJhObC8xsFRV+DQ8aiB/sevL9wy6nf70t/qKKJE2BOLmsfa7hy9xlYEoRM9FK+/QVJ v3TpCBaXiUwFqq50fGqvaipbmHtrg/PkU0d/C6jQ0qJWFu8C1MW0iIODGzi/CtCv+aIT 38sg== 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=KIinxHgd3W5A5KZig7FsyZOy3C3CzjLyJqwrfF5qVT8=; fh=sS+J4OyOC0EcVLWJpS3mBHGeO+0+dYZJ+ImCUfzsrH4=; b=Ify7eth39Vb/HPexi/k4A20GckVbkrva8J7fSTvX2QIj5C6p5YS3wokvmOPdeipfnf o/FG4y8MR6BsUV+KiGiK69a+llsfpHncqPRc9LvsG7x6bsFfoQENU36fy4pUsJGa27fM mu/5nwLFLc/gSR+JjH7JTG7s+26pQK9ggcWQasKibDjkPHN9NsKBTtsPEipTslU+achO rM0q6/9O5JrLcLNxtK4QnGNAleMjRJxSND2IFMR3k93bvCGsQ2UZevskuRajQA0+JYWf NG5zVSdyDRVt1TfhL/KzRFiRo+d3TMh7xk9wOHho13GHCzjpYKIti1/xCi70877Lymam DffA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id f16-20020a63e310000000b0057458518e21si12422280pgh.630.2023.09.20.12.11.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 20 Sep 2023 12:11:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 082898293C98; Wed, 20 Sep 2023 12:02:08 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229873AbjITTBr (ORCPT + 27 others); Wed, 20 Sep 2023 15:01:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42426 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229832AbjITTBm (ORCPT ); Wed, 20 Sep 2023 15:01:42 -0400 Received: from 66-220-144-179.mail-mxout.facebook.com (66-220-144-179.mail-mxout.facebook.com [66.220.144.179]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D6F99C2 for ; Wed, 20 Sep 2023 12:01:35 -0700 (PDT) Received: by devbig1114.prn1.facebook.com (Postfix, from userid 425415) id 3BE9EC4363F8; Wed, 20 Sep 2023 12:01:22 -0700 (PDT) From: Stefan Roesch To: kernel-team@fb.com Cc: shr@devkernel.io, akpm@linux-foundation.org, david@redhat.com, hannes@cmpxchg.org, riel@surriel.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v2 2/2] mm/ksm: Test case for prctl fork/exec workflow Date: Wed, 20 Sep 2023 12:01:17 -0700 Message-Id: <20230920190117.784151-3-shr@devkernel.io> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20230920190117.784151-1-shr@devkernel.io> References: <20230920190117.784151-1-shr@devkernel.io> MIME-Version: 1.0 X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Wed, 20 Sep 2023 12:02:08 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1777584950683592713 X-GMAIL-MSGID: 1777584950683592713 This adds a new test case to the ksm functional tests to make sure that the KSM setting is inherited by the child process when doing a fork/exec. Signed-off-by: Stefan Roesch Reviewed-by: David Hildenbrand --- .../selftests/mm/ksm_functional_tests.c | 67 ++++++++++++++++++- 1 file changed, 66 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/mm/ksm_functional_tests.c b/tools/testing/selftests/mm/ksm_functional_tests.c index 901e950f9138..40b86c9caf3a 100644 --- a/tools/testing/selftests/mm/ksm_functional_tests.c +++ b/tools/testing/selftests/mm/ksm_functional_tests.c @@ -26,6 +26,7 @@ #define KiB 1024u #define MiB (1024 * KiB) +#define FORK_EXEC_CHILD_PRG_NAME "ksm_fork_exec_child" static int mem_fd; static int ksm_fd; @@ -479,6 +480,65 @@ static void test_prctl_fork(void) ksft_test_result_pass("PR_SET_MEMORY_MERGE value is inherited\n"); } +static int ksm_fork_exec_child(void) +{ + /* Test if KSM is enabled for the process. */ + int ksm = prctl(PR_GET_MEMORY_MERGE, 0, 0, 0, 0); + return ksm == 1; +} + +static void test_prctl_fork_exec(void) +{ + int ret, status; + pid_t child_pid; + + ksft_print_msg("[RUN] %s\n", __func__); + + ret = prctl(PR_SET_MEMORY_MERGE, 1, 0, 0, 0); + if (ret < 0 && errno == EINVAL) { + ksft_test_result_skip("PR_SET_MEMORY_MERGE not supported\n"); + return; + } else if (ret) { + ksft_test_result_fail("PR_SET_MEMORY_MERGE=1 failed\n"); + return; + } + + child_pid = fork(); + if (child_pid == -1) { + ksft_test_result_skip("fork() failed\n"); + return; + } else if (child_pid == 0) { + char *prg_name = "./ksm_functional_tests"; + char *argv_for_program[] = { prg_name, FORK_EXEC_CHILD_PRG_NAME }; + + execv(prg_name, argv_for_program); + return; + } + + if (waitpid(child_pid, &status, 0) > 0) { + if (WIFEXITED(status)) { + status = WEXITSTATUS(status); + if (status) { + ksft_test_result_fail("KSM not enabled\n"); + return; + } + } else { + ksft_test_result_fail("program didn't terminate normally\n"); + return; + } + } else { + ksft_test_result_fail("waitpid() failed\n"); + return; + } + + if (prctl(PR_SET_MEMORY_MERGE, 0, 0, 0, 0)) { + ksft_test_result_fail("PR_SET_MEMORY_MERGE=0 failed\n"); + return; + } + + ksft_test_result_pass("PR_SET_MEMORY_MERGE value is inherited\n"); +} + static void test_prctl_unmerge(void) { const unsigned int size = 2 * MiB; @@ -536,9 +596,13 @@ static void test_prot_none(void) int main(int argc, char **argv) { - unsigned int tests = 7; + unsigned int tests = 8; int err; + if (argc > 1 && !strcmp(argv[1], FORK_EXEC_CHILD_PRG_NAME)) { + exit(ksm_fork_exec_child() == 1 ? 0 : 1); + } + #ifdef __NR_userfaultfd tests++; #endif @@ -576,6 +640,7 @@ int main(int argc, char **argv) test_prctl(); test_prctl_fork(); + test_prctl_fork_exec(); test_prctl_unmerge(); err = ksft_get_fail_cnt();