From patchwork Tue Sep 19 20:51:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 142088 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:172:b0:3f2:4152:657d with SMTP id h50csp3675379vqi; Tue, 19 Sep 2023 13:58:12 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFUtPET6h4k3UTv+meQoYgBG9X1sggtSJmVjHN+jmo8DNKhzWms//D9muMhJA6OIVRUZBxK X-Received: by 2002:a05:6a20:8f29:b0:135:bf8d:b758 with SMTP id b41-20020a056a208f2900b00135bf8db758mr4476990pzk.16.1695157092499; Tue, 19 Sep 2023 13:58:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695157092; cv=none; d=google.com; s=arc-20160816; b=XZON+DmyHJsad1K0JPNhecxkHYpm2yOyVbzdZoYOklKtxNwn3nXqXJYOEsOmqJybsa 5xUOPfx0caNaCyCsaIqHM1ChStAe9foWgNfhewn4fO4S6DlO4IqmVq5bmbecMtQYLbyh 2Oe8uswvoIUA5k9pDNGs++NGbXkKFya262tPwVBPsGttoVoL+e+JCOxaxXXPc9gntKh5 fdMwy/zpR1FGDP6p+F+HP6oOqAs1L75X9XREBAXNTIFb8p+Og5qpfMyCzgb16MwESR8F FlXbKJXv6k4Yjg5fSjGg6XLtyEGF54vdMcc5o0kTaTftWEUeF+iDM3zRmbkuHYJD27rv ot6g== 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=3lEmbQKIShknOwu0d4x/n3fyPteL3kdNeGzeCybOtVA=; fh=trQN94Iqca1GMQF1AkSOofuqg8pe0AKHPTTlJaXdYFw=; b=X7RayyplaTdMFo6kBEp4eH14ZxJQVQqs2pbAu39wgCaGpBV1K+f8JfAUVE506BL8ET 6WEix90A5xoIzGtvbZ6RmnYr6gEObllcaBk9IvcSOt+qB2sXFDSF5gLaAY7BFcfSN2YN orw7p/KQDnjlLCi/5QFWGz8WbjvqGY/2r4V4hJ4YLIq30FAyD1OUlhGMo+Kffs2drJ5q CY8OiV62TgjsRvjjEgmAJePKUP98laCzmH/Lq2gjuLtmgCThmvkdr4LusKxQcZd44KHV XZkndGhid1snZFQf0RiNfjLOBOIwMGoKDmbVz4Ma3ZlonCmKNMTaRfvsycgdJdphA1ca JwkA== 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:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id l20-20020a637014000000b00578d3f8d4d2si537541pgc.639.2023.09.19.13.58.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Sep 2023 13:58:12 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 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 snail.vger.email (Postfix) with ESMTP id 7E6CD81410DF; Tue, 19 Sep 2023 13:52:30 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233267AbjISUwY (ORCPT + 26 others); Tue, 19 Sep 2023 16:52:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48284 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229690AbjISUwV (ORCPT ); Tue, 19 Sep 2023 16:52:21 -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 3A50FBD for ; Tue, 19 Sep 2023 13:52:14 -0700 (PDT) Received: by devbig1114.prn1.facebook.com (Postfix, from userid 425415) id 51999C361C1D; Tue, 19 Sep 2023 13:51:59 -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 v1 1/2] mm/ksm: support fork/exec for prctl Date: Tue, 19 Sep 2023 13:51:57 -0700 Message-Id: <20230919205158.1897353-2-shr@devkernel.io> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20230919205158.1897353-1-shr@devkernel.io> References: <20230919205158.1897353-1-shr@devkernel.io> MIME-Version: 1.0 X-Spam-Status: No, score=-0.1 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,RDNS_DYNAMIC,SPF_HELO_PASS,SPF_NEUTRAL, TVD_RCVD_IP autolearn=no autolearn_force=no version=3.4.6 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-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Tue, 19 Sep 2023 13:52:30 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1777501043283433289 X-GMAIL-MSGID: 1777501043283433289 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 Reported-by: Carl Klemm Tested-by: Carl Klemm Reviewed-by: David Hildenbrand --- 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 Tue Sep 19 20:51:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Roesch X-Patchwork-Id: 142089 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:172:b0:3f2:4152:657d with SMTP id h50csp3675392vqi; Tue, 19 Sep 2023 13:58:15 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE1hrIyKjW12wK8apOJrdmlW2rHeMynHsiToLSyMV+uXAgAzzU4Vib5uX2dk5iSwJhdKcxD X-Received: by 2002:a17:90b:4f88:b0:276:9d55:1e3 with SMTP id qe8-20020a17090b4f8800b002769d5501e3mr854513pjb.31.1695157094762; Tue, 19 Sep 2023 13:58:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695157094; cv=none; d=google.com; s=arc-20160816; b=OIi/0xUbsoPL9GQN0E4gowdlFXB17VOIVLUbuyDYQdIArC+BZ3BE2j+ZtOrBjJUyr2 MhBYPuH53NPwH4b6vXuH8z3L/HCEOhhYhjeGjUJucHj1ZlNPqeyKh1MlLd/xFC2wBone yLGobDbLsltzylMn1SaHbB08fJhCrWMikbVKQy8epecYF4Ep56w6RgJTVHF+FgoTy5Ak dOozvNq9l6WV57Xf+iumHpQwrMeu1HIE/QPo3cxgX6Uh9C9yIs+poe5Xy3Lvcyw4GRbF Lht0rwb3jBK5T1EiplRiK6RIlR43xfIE1FiCKbGEb4COvjgqE5TSgPs7era6AQ3EODX6 cT4w== 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=d0iupzJ3mlaND78YmykYesWS4YSwbA5I10u5bAOpH3Q=; fh=sS+J4OyOC0EcVLWJpS3mBHGeO+0+dYZJ+ImCUfzsrH4=; b=fds/z/kge/EAemLQl9ry+ciCNTk27fZi3SoX3uVFOfbvcAVlFzPlTEk/7vNgQ1JJuO Nu7Vg4bBslxvHW3y4iT1l3I8JewzKZo/JinBqI+4At7jHn5s6uazhqVwecuzHJrmURnh SS5V39aH0EtMDFfo1dksENZvIuCnHcw2CIM5HcRycoyeeRTl8TCJwySb1YhoarFMoVEs pP7Ez19z5HJwtzJFv2JJNgU8nxk9LruVHW1KiGr0SWclYrLAq4gcp5cPTbrs/jdFCsLc 0XTJjMETWBiUMQOI7GPqyEMEoK+z7ryEjAq99z0cSNsbj+Q1ZiWMiVP1Y3SMCYUwQgLy 9ErA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: from snail.vger.email (snail.vger.email. [23.128.96.37]) by mx.google.com with ESMTPS id bf8-20020a17090b0b0800b0026810b074afsi56333pjb.3.2023.09.19.13.58.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Sep 2023 13:58:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 as permitted sender) client-ip=23.128.96.37; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.37 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 snail.vger.email (Postfix) with ESMTP id BF85C81444C8; Tue, 19 Sep 2023 13:52:34 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233274AbjISUw1 (ORCPT + 26 others); Tue, 19 Sep 2023 16:52:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48308 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233222AbjISUwV (ORCPT ); Tue, 19 Sep 2023 16:52:21 -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 01CD4B3 for ; Tue, 19 Sep 2023 13:52:15 -0700 (PDT) Received: by devbig1114.prn1.facebook.com (Postfix, from userid 425415) id 5FCBEC361C1F; Tue, 19 Sep 2023 13:51:59 -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 v1 2/2] mm/ksm: Test case for prctl fork/exec workflow Date: Tue, 19 Sep 2023 13:51:58 -0700 Message-Id: <20230919205158.1897353-3-shr@devkernel.io> X-Mailer: git-send-email 2.39.3 In-Reply-To: <20230919205158.1897353-1-shr@devkernel.io> References: <20230919205158.1897353-1-shr@devkernel.io> MIME-Version: 1.0 X-Spam-Status: No, score=-0.1 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_BLOCKED,RDNS_DYNAMIC,SPF_HELO_PASS,SPF_NEUTRAL, TVD_RCVD_IP autolearn=no autolearn_force=no version=3.4.6 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-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Tue, 19 Sep 2023 13:52:34 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1777501045523277952 X-GMAIL-MSGID: 1777501045523277952 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 --- tools/testing/selftests/mm/Makefile | 2 + .../selftests/mm/ksm_fork_exec_child.c | 9 ++++ .../selftests/mm/ksm_functional_tests.c | 50 ++++++++++++++++++- 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 tools/testing/selftests/mm/ksm_fork_exec_child.c diff --git a/tools/testing/selftests/mm/Makefile b/tools/testing/selftests/mm/Makefile index 6a9fc5693145..9ab6aa402544 100644 --- a/tools/testing/selftests/mm/Makefile +++ b/tools/testing/selftests/mm/Makefile @@ -73,6 +73,8 @@ ifneq ($(ARCH),arm64) TEST_GEN_PROGS += soft-dirty endif +TEST_GEN_PROGS += ksm_fork_exec_child + ifeq ($(ARCH),x86_64) CAN_BUILD_I386 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_32bit_program.c -m32) CAN_BUILD_X86_64 := $(shell ./../x86/check_cc.sh "$(CC)" ../x86/trivial_64bit_program.c) diff --git a/tools/testing/selftests/mm/ksm_fork_exec_child.c b/tools/testing/selftests/mm/ksm_fork_exec_child.c new file mode 100644 index 000000000000..298439f0d55f --- /dev/null +++ b/tools/testing/selftests/mm/ksm_fork_exec_child.c @@ -0,0 +1,9 @@ +#include +#include + +int main() +{ + /* Test if KSM is enabled for the process. */ + int ksm = prctl(68, 0, 0, 0, 0); + exit(ksm == 1 ? 0 : 1); +} diff --git a/tools/testing/selftests/mm/ksm_functional_tests.c b/tools/testing/selftests/mm/ksm_functional_tests.c index 901e950f9138..4dc0bb522c07 100644 --- a/tools/testing/selftests/mm/ksm_functional_tests.c +++ b/tools/testing/selftests/mm/ksm_functional_tests.c @@ -479,6 +479,53 @@ static void test_prctl_fork(void) ksft_test_result_pass("PR_SET_MEMORY_MERGE value is inherited\n"); } +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 *filename = "./ksm_fork_exec_child"; + char *argv_for_program[] = { filename, NULL }; + + execv(filename, argv_for_program);; + } else { + 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; + } + } + + 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,7 +583,7 @@ static void test_prot_none(void) int main(int argc, char **argv) { - unsigned int tests = 7; + unsigned int tests = 8; int err; #ifdef __NR_userfaultfd @@ -576,6 +623,7 @@ int main(int argc, char **argv) test_prctl(); test_prctl_fork(); + test_prctl_fork_exec(); test_prctl_unmerge(); err = ksft_get_fail_cnt();