From nobody Wed Apr 8 12:37:38 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EF742C38142 for ; Mon, 23 Jan 2023 17:05:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232926AbjAWRFM (ORCPT ); Mon, 23 Jan 2023 12:05:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41212 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232944AbjAWRFK (ORCPT ); Mon, 23 Jan 2023 12:05:10 -0500 Received: from mail-oi1-x232.google.com (mail-oi1-x232.google.com [IPv6:2607:f8b0:4864:20::232]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3D4D323DA2 for ; Mon, 23 Jan 2023 09:05:07 -0800 (PST) Received: by mail-oi1-x232.google.com with SMTP id n8so10975529oih.0 for ; Mon, 23 Jan 2023 09:05:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enfabrica.net; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FThLWOoZZXBRMb3ocbeHMeCYRMJ3a8JkbY9XwLoGNJM=; b=A9lLC3vexpFb3gkXoiJam0gSNrJv94xqiphCLdx0LFU3eh7KEeYgStPEfrRN9g8zpw A3GchVFNx8Xz92R77r69+TnXkwRpLv0f4SZTWcoUkzMuuJzYUJuOqeeBVn734rIYAV5a ZSElJIx6NA7ipjRKAKc6R/bCELanuH/z572MGTGOY/3RBmynGJYcxLyAB+MhLJjkzjTp eAzUI7z7K7TtjO4lofdlRwFJ+XwX3f4c3cbfcDtynWMve6g7lcHq27Ht6HeTI24ykwVL bpYboW7jXSyPhRl2YQPckiVdwmsGgnTOi1G2xrchCMOiIvay6/B7evJ0+peTalvlZgsC oWpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FThLWOoZZXBRMb3ocbeHMeCYRMJ3a8JkbY9XwLoGNJM=; b=t2ACi1qVjrf7eewcfeYc4IfJGY4cdlf8sz2SBJ/pPzMej/cif+S6sChX8OXEVjh/x3 F/Lki4nIK1ezYp9Em0/swUvApZQ0Nw58XCWpQnQj6OF9+MRLKe1AOwYoNw7cyKyYiXIu L2LJ6OfzTSyHZ7I2CGK1km/aMyPqkqKbOtOucXKSbEubLesKpN/f1xDY2ON4a/g0V0cC VPWTS20PtyQZiGe4U46G9MSM96+AxDY7R1I7LOtEv8FSVQKm6LQ/6O7D7bGMzwabcEvC 9DHOAac882JKlp/keq5bEe04wlqvrr1S6M0Levw29fbNXpCCM3OKdMwwsOmmzv6lq3uL Swpw== X-Gm-Message-State: AFqh2koIc3t++/0ard1OLYzdYnvZ3lP7f7CtZBhE/ZfzoN+eEX42067m /BpYjpew957vTPSOeMNF4lLDFxmwAyru+8tgafXLBFUTvSqBvA69RC+FdOHrp2BPmSZvNt57H5K 7+ZdY7p5QKnC4OZfBcs7IR25BE9fVnLO1XXTFpV3/gT8CCtpxA44tH+h2wU8RgYybN8wNwX2izV SvDf2jR1Tc0ANp X-Google-Smtp-Source: AMrXdXtkuNeB5js0YY7EQvF6CWd2gqsNNMHEQebeRjWsftml8x/8mMpKwTlodh8Si41JeAy8tMMlEQ== X-Received: by 2002:a05:6808:300e:b0:364:f962:afd1 with SMTP id ay14-20020a056808300e00b00364f962afd1mr13072058oib.56.1674493506352; Mon, 23 Jan 2023 09:05:06 -0800 (PST) Received: from DESKTOP-B7RB26P.localdomain (cpe-70-114-202-97.austin.res.rr.com. [70.114.202.97]) by smtp.gmail.com with ESMTPSA id 2-20020aca0502000000b0035ec1384c9esm23160163oif.23.2023.01.23.09.05.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 09:05:06 -0800 (PST) From: George Prekas To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: Catalin Marinas , Andrew Morton , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Vlastimil Babka , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Thomas Gleixner , "Eric W. Biederman" , Sebastian Andrzej Siewior , Andy Lutomirski , Peter Zijlstra , "Liam R. Howlett" , Fenghua Yu , Andrei Vagin , George Prekas Subject: [PATCH 1/9] mm: kmemleak: properly disable task stack scanning Date: Mon, 23 Jan 2023 11:04:11 -0600 Message-Id: <20230123170419.7292-2-george@enfabrica.net> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230123170419.7292-1-george@enfabrica.net> References: <20230123170419.7292-1-george@enfabrica.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" kmemleak has a flag to enable or disable task stack scanning. Unfortunately, this flag does not work as intended. Even when the user disables stack scanning, kmemleak will scan them. Stacks are allocated with vmalloc and are included in the list of objects to scan of kmemleak. Introduce a new function kmemleak_mark_stack that marks an allocation as a stack. This allows kmemleak to properly decide whether to scan or not the object based on the respective flag. Signed-off-by: George Prekas --- include/linux/kmemleak.h | 1 + kernel/fork.c | 3 +++ mm/kmemleak.c | 39 ++++++++++++++++++++++----------------- 3 files changed, 26 insertions(+), 17 deletions(-) diff --git a/include/linux/kmemleak.h b/include/linux/kmemleak.h index 6a3cd1bf4680..1e2e8deac6dc 100644 --- a/include/linux/kmemleak.h +++ b/include/linux/kmemleak.h @@ -33,6 +33,7 @@ extern void kmemleak_alloc_phys(phys_addr_t phys, size_t = size, gfp_t gfp) __ref; extern void kmemleak_free_part_phys(phys_addr_t phys, size_t size) __ref; extern void kmemleak_ignore_phys(phys_addr_t phys) __ref; +extern void kmemleak_mark_stack(const void *ptr) __ref; =20 static inline void kmemleak_alloc_recursive(const void *ptr, size_t size, int min_count, slab_flags_t flags, diff --git a/kernel/fork.c b/kernel/fork.c index 9f7fe3541897..e66337ce88d4 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -97,6 +97,7 @@ #include #include #include +#include =20 #include #include @@ -316,6 +317,8 @@ static int alloc_thread_stack_node(struct task_struct *= tsk, int node) if (!stack) return -ENOMEM; =20 + kmemleak_mark_stack(stack); + vm =3D find_vm_area(stack); if (memcg_charge_kernel_stack(vm)) { vfree(stack); diff --git a/mm/kmemleak.c b/mm/kmemleak.c index 92f670edbf51..b40735539abd 100644 --- a/mm/kmemleak.c +++ b/mm/kmemleak.c @@ -176,6 +176,8 @@ struct kmemleak_object { #define OBJECT_FULL_SCAN (1 << 3) /* flag set for object allocated with physical address */ #define OBJECT_PHYS (1 << 4) +/* flag set by alloc_thread_stack_node for stacks */ +#define OBJECT_STACK (1 << 5) =20 #define HEX_PREFIX " " /* number of bytes to print per line; must be 16 or 32 */ @@ -1229,6 +1231,24 @@ void __ref kmemleak_ignore_phys(phys_addr_t phys) } EXPORT_SYMBOL(kmemleak_ignore_phys); =20 +/** + * kmemleak_mark_stack - mark the allocated object as a kernel stack + * + * @ptr: pointer to beginning of the object + */ +void __ref kmemleak_mark_stack(const void *ptr) +{ + struct kmemleak_object *object; + + if (kmemleak_enabled && ptr && !IS_ERR(ptr)) { + object =3D find_and_get_object(ptr, 0); + if (object) { + object->flags |=3D OBJECT_STACK; + put_object(object); + } + } +} + /* * Update an object's checksum and return true if it was modified. */ @@ -1404,6 +1424,8 @@ static void scan_object(struct kmemleak_object *objec= t) if (!(object->flags & OBJECT_ALLOCATED)) /* already freed object */ goto out; + if (!kmemleak_stack_scan && object->flags & OBJECT_STACK) + goto out; =20 obj_ptr =3D object->flags & OBJECT_PHYS ? __va((phys_addr_t)object->pointer) : @@ -1586,23 +1608,6 @@ static void kmemleak_scan(void) } put_online_mems(); =20 - /* - * Scanning the task stacks (may introduce false negatives). - */ - if (kmemleak_stack_scan) { - struct task_struct *p, *g; - - rcu_read_lock(); - for_each_process_thread(g, p) { - void *stack =3D try_get_task_stack(p); - if (stack) { - scan_block(stack, stack + THREAD_SIZE, NULL); - put_task_stack(p); - } - } - rcu_read_unlock(); - } - /* * Scan the objects already referenced from the sections scanned * above. --=20 2.37.1 From nobody Wed Apr 8 12:37:38 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0B37FC38142 for ; Mon, 23 Jan 2023 17:05:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232986AbjAWRFP (ORCPT ); Mon, 23 Jan 2023 12:05:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41126 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232912AbjAWRFM (ORCPT ); Mon, 23 Jan 2023 12:05:12 -0500 Received: from mail-oi1-x229.google.com (mail-oi1-x229.google.com [IPv6:2607:f8b0:4864:20::229]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CBEDE1E1F2 for ; Mon, 23 Jan 2023 09:05:09 -0800 (PST) Received: by mail-oi1-x229.google.com with SMTP id s124so10949357oif.1 for ; Mon, 23 Jan 2023 09:05:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enfabrica.net; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Kp4WYRpASf5CVsJFYjl+ZnZkRci2IQqrsIcj0lr85Wg=; b=So8Z6Rqf1NYD+bATgnx25yeR3ZEQYv6xfpev5aAJBoSfG0j6uNny0FS3K8CyhMwahK VxlTg7zggBSoEtqV9ZoZKkrhRfYhDRYT/aHS8hUc4S8IahBStPNwBWjYddsZaiduXtaL +fvHuVuUAVcrg4M+v9xOhd7Yw2REstoxg9WzPgGEpv3zo2QisRZzSno1G32LUG/6t38U xj//tnhcajOK+iOekBC+deLs5/CakXMUWxw03E3DsXu2vAktxqs1YMn840No/iWRsryS Ybkl28Qh0h3+YYcP23/lrgMYCIpGXi5x822cqBOqRVDkzSJhZOn54To1sN9Low5BrKq1 ZwQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Kp4WYRpASf5CVsJFYjl+ZnZkRci2IQqrsIcj0lr85Wg=; b=KzVVzpDov3RUJOBnLFuV2m7NrQ6Q4QhvUMEGs/ZzzU1jWrD33zwQouoPrQ2Jze72sI sMi1QHgNtckTSZR6VLZDGVQDk7Lss0E3IFgPe1rYU9BhxXAueEo+D3OUK0SObMnAH22o PJF/n79yWo0rXbZXqG4gNJb50zp2o3GFr4h+VvIZsUzAxpmWD7dRQ+EXNBkS5GybOOHD plMVRNmkDBaut0NGnY24at5Mu0W/yQulROyfLDok3SrrDbq17mkVjVT8GO85LhSsoWWn UuVCZ5pHdGhYxwSIyXeX8P0lJ0uBQjtBHlCmEMnZIMzmJCAEltAMqIvUpq36nwKnWvBf Ttmg== X-Gm-Message-State: AFqh2krwjVLScUepZVX5+nhuieAKmMZYgjXeuxVbWw9RrVBCNDaSu7k1 R/Tz8jpfq5ek/OrQNv6IhLFSgjlL19skPzhdyDBb7CNvKjaD4sUzCv2Ztw3ATzGfHidOLNtM9mA jlz57PVUhcygA12S8OdCvTPntarmimVALqGT19XZPJCk03N/hTZ9Rm5iTjzcUfoTgAiKR6nBy6v lw0u+phj/M9ZRR X-Google-Smtp-Source: AMrXdXuN1RJ5ZNaZEPdtdf1wuP6Clsbzl7xIblCQ8qoK09KR8XE7O+qkKulzCI9CedZR0H4QTQwr8g== X-Received: by 2002:aca:230f:0:b0:364:d7f0:3847 with SMTP id e15-20020aca230f000000b00364d7f03847mr10623413oie.38.1674493508937; Mon, 23 Jan 2023 09:05:08 -0800 (PST) Received: from DESKTOP-B7RB26P.localdomain (cpe-70-114-202-97.austin.res.rr.com. [70.114.202.97]) by smtp.gmail.com with ESMTPSA id 2-20020aca0502000000b0035ec1384c9esm23160163oif.23.2023.01.23.09.05.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 09:05:08 -0800 (PST) From: George Prekas To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: Catalin Marinas , Andrew Morton , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Vlastimil Babka , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Thomas Gleixner , "Eric W. Biederman" , Sebastian Andrzej Siewior , Andy Lutomirski , Peter Zijlstra , "Liam R. Howlett" , Fenghua Yu , Andrei Vagin , George Prekas Subject: [PATCH 2/9] Revert "mm/kmemleak: make create_object return void" Date: Mon, 23 Jan 2023 11:04:12 -0600 Message-Id: <20230123170419.7292-3-george@enfabrica.net> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230123170419.7292-1-george@enfabrica.net> References: <20230123170419.7292-1-george@enfabrica.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This reverts commit b955aa70a3ac9f1dd5e26d4c7673ec3c28a8c2af. The function delete_object_part can use the return value of create_object to propagate flags from the old object to the new objects. Signed-off-by: George Prekas --- mm/kmemleak.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/mm/kmemleak.c b/mm/kmemleak.c index b40735539abd..2b9c9ad68806 100644 --- a/mm/kmemleak.c +++ b/mm/kmemleak.c @@ -616,8 +616,9 @@ static noinline depot_stack_handle_t set_track_prepare(= void) * memory block and add it to the object_list and object_tree_root (or * object_phys_tree_root). */ -static void __create_object(unsigned long ptr, size_t size, - int min_count, gfp_t gfp, bool is_phys) +static struct kmemleak_object *__create_object(unsigned long ptr, size_t s= ize, + int min_count, gfp_t gfp, + bool is_phys) { unsigned long flags; struct kmemleak_object *object, *parent; @@ -629,7 +630,7 @@ static void __create_object(unsigned long ptr, size_t s= ize, if (!object) { pr_warn("Cannot allocate a kmemleak_object structure\n"); kmemleak_disable(); - return; + return NULL; } =20 INIT_LIST_HEAD(&object->object_list); @@ -698,6 +699,7 @@ static void __create_object(unsigned long ptr, size_t s= ize, */ dump_object_info(parent); kmem_cache_free(object_cache, object); + object =3D NULL; goto out; } } @@ -707,20 +709,21 @@ static void __create_object(unsigned long ptr, size_t= size, list_add_tail_rcu(&object->object_list, &object_list); out: raw_spin_unlock_irqrestore(&kmemleak_lock, flags); + return object; } =20 /* Create kmemleak object which allocated with virtual address. */ -static void create_object(unsigned long ptr, size_t size, - int min_count, gfp_t gfp) +static struct kmemleak_object *create_object(unsigned long ptr, size_t siz= e, + int min_count, gfp_t gfp) { - __create_object(ptr, size, min_count, gfp, false); + return __create_object(ptr, size, min_count, gfp, false); } =20 /* Create kmemleak object which allocated with physical address. */ -static void create_object_phys(unsigned long ptr, size_t size, - int min_count, gfp_t gfp) +static struct kmemleak_object *create_object_phys(unsigned long ptr, size_= t size, + int min_count, gfp_t gfp) { - __create_object(ptr, size, min_count, gfp, true); + return __create_object(ptr, size, min_count, gfp, true); } =20 /* --=20 2.37.1 From nobody Wed Apr 8 12:37:38 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E6BDFC54E94 for ; Mon, 23 Jan 2023 17:05:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233090AbjAWRFY (ORCPT ); Mon, 23 Jan 2023 12:05:24 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41568 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233075AbjAWRFR (ORCPT ); Mon, 23 Jan 2023 12:05:17 -0500 Received: from mail-oi1-x22a.google.com (mail-oi1-x22a.google.com [IPv6:2607:f8b0:4864:20::22a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7D1641714 for ; Mon, 23 Jan 2023 09:05:12 -0800 (PST) Received: by mail-oi1-x22a.google.com with SMTP id r205so10909846oib.9 for ; Mon, 23 Jan 2023 09:05:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enfabrica.net; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yJTWO2OBrXE35+2ST38bazfrcM89QJcHIOlGqfogZ20=; b=NSgjC4hw3fEAnNl7SM0zZQjjJtjRvXkPMrmVnBT32ZBngvEkPukpqb5qQFusr1IW2l mEuBPgVWKLc4iYnfp0G67SkL5iJg8kRMUs51J/jV44M5Hxtl+7fET9rc2rczoADtB4Nj hmYLfi4G8LVKiw5v/UkyvyI4ccoDGf198WfeFl+kIsfNVB+khlUSI5d9UWwu+ySIg6qP UfiuTEqFgoZMwG/hO7JtE5Qo4t4GdoJ3FLvrwkLJfQ++q3yu2+l5RjoSe9bJOULtNmKq hogj8oFn/iRz3PC1y1jQTMMb/0ry+uFYKbAI389Cj7PSaVvdzQAGaC+V2Lhib2zuMTi3 IsXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yJTWO2OBrXE35+2ST38bazfrcM89QJcHIOlGqfogZ20=; b=UmicGrHW7d6E7tXgzgQf7/YiDGvzHKSk5vOiyNPlyi64sjWmRGIyhVL5zW7RjtwRh6 dvsCyUfJYvldI6holVhZMtjuKZ7hCi9KcbNtg3tNEiJgR6vrNAQCgax/2wwmsMfDoYRM si3FJQOCVQYvFQmHrziS3b28Jofvs1+KyYIEFUDYK1TZ51iarqhO6WXjjI4jeamiLl8n EuwN9MnVTr0sE5oBTXJLFbOz5kh1v0gcjxCAp7v2Fv50FsUSlvONDuFYjbeX/R11shFj ifB49AzK5hcS9r3BVgT/GdZJmkQ2HGEEHmTlLkN9xe0jQI+gHfRBzdbbOi/xDt88K+uO JeDg== X-Gm-Message-State: AFqh2krpJs40ncxBA0bt7HtF1Xw3KgINx31BqRz1pO2zkcnNh6V9Zgec vYhnEg4966k707HMW3SCHINb782nUFE0eg6Te9v1Eme1kKC0VrXIpdcKpg5FsjuU3D2YJHghH7P bBJuNNeU2bvvV373eRZC4aXWE+2kAa9hvuWZwiReWxuUjgMH2NvjYGxhiqlH6Nng6qK/NoAkGyP 1/bAWpGXwri5yz X-Google-Smtp-Source: AMrXdXuwAu7Phr7hWIyFW8DqKNxzBjmiQoF9ywUbD8dPtf/ETIlI/OPtYt0DkjFc7YBiZevXoCyc2A== X-Received: by 2002:a54:4009:0:b0:364:3792:97aa with SMTP id x9-20020a544009000000b00364379297aamr12138081oie.10.1674493511610; Mon, 23 Jan 2023 09:05:11 -0800 (PST) Received: from DESKTOP-B7RB26P.localdomain (cpe-70-114-202-97.austin.res.rr.com. [70.114.202.97]) by smtp.gmail.com with ESMTPSA id 2-20020aca0502000000b0035ec1384c9esm23160163oif.23.2023.01.23.09.05.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 09:05:11 -0800 (PST) From: George Prekas To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: Catalin Marinas , Andrew Morton , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Vlastimil Babka , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Thomas Gleixner , "Eric W. Biederman" , Sebastian Andrzej Siewior , Andy Lutomirski , Peter Zijlstra , "Liam R. Howlett" , Fenghua Yu , Andrei Vagin , George Prekas Subject: [PATCH 3/9] mm: kmemleak: propagate NO_SCAN flag in delete_object_part Date: Mon, 23 Jan 2023 11:04:13 -0600 Message-Id: <20230123170419.7292-4-george@enfabrica.net> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230123170419.7292-1-george@enfabrica.net> References: <20230123170419.7292-1-george@enfabrica.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" When part of an object is deleted, propagate the OBJECT_NO_SCAN flag to the 2 new created objects. Signed-off-by: George Prekas --- mm/kmemleak.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/mm/kmemleak.c b/mm/kmemleak.c index 2b9c9ad68806..5882f60d127c 100644 --- a/mm/kmemleak.c +++ b/mm/kmemleak.c @@ -772,7 +772,7 @@ static void delete_object_full(unsigned long ptr) */ static void delete_object_part(unsigned long ptr, size_t size, bool is_phy= s) { - struct kmemleak_object *object; + struct kmemleak_object *object, *o1 =3D NULL, *o2 =3D NULL; unsigned long start, end; =20 object =3D find_and_remove_object(ptr, 1, is_phys); @@ -792,11 +792,19 @@ static void delete_object_part(unsigned long ptr, siz= e_t size, bool is_phys) start =3D object->pointer; end =3D object->pointer + object->size; if (ptr > start) - __create_object(start, ptr - start, object->min_count, - GFP_KERNEL, is_phys); + o1 =3D __create_object(start, ptr - start, object->min_count, + GFP_KERNEL, is_phys); if (ptr + size < end) - __create_object(ptr + size, end - ptr - size, object->min_count, - GFP_KERNEL, is_phys); + o2 =3D __create_object(ptr + size, end - ptr - size, + object->min_count, GFP_KERNEL, is_phys); + + /* Propagate the NO_SCAN flag */ + if (object->flags & OBJECT_NO_SCAN) { + if (o1) + o1->flags |=3D OBJECT_NO_SCAN; + if (o2) + o2->flags |=3D OBJECT_NO_SCAN; + } =20 __delete_object(object); } --=20 2.37.1 From nobody Wed Apr 8 12:37:38 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4F184C38142 for ; Mon, 23 Jan 2023 17:05:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233189AbjAWRF2 (ORCPT ); Mon, 23 Jan 2023 12:05:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41686 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233060AbjAWRFW (ORCPT ); Mon, 23 Jan 2023 12:05:22 -0500 Received: from mail-oi1-x229.google.com (mail-oi1-x229.google.com [IPv6:2607:f8b0:4864:20::229]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4AFAA23D9E for ; Mon, 23 Jan 2023 09:05:16 -0800 (PST) Received: by mail-oi1-x229.google.com with SMTP id r9so10894944oie.13 for ; Mon, 23 Jan 2023 09:05:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enfabrica.net; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=88a4EcsyoImPea13g+jXS6DiIw9vwnj7Q3nYiAaYWFo=; b=S1Qps+QWqSAgJqvVuhDhPBwLsxy8BoOsJSz/h0OhtVDBaooKT4fb8zDOwrF0VjUxZk ntDm0tto2zMPa/NYeadxggaX5k1JqfGiVRd5syWRqmWx0Ngs7KprGV3neIsYqBOXzLk4 smxVyWxlA0zkX3om66NoDSmZfbqV0ICYZZj1dKjW1SasAQ4dHHEoH/g05vV4tizc7u7H xBBiJpdsDNJcuk92X+NMceSQUHZasUDAuCjsbdGpzIu3xK65przH/X7fVdtM3qGWNFy3 g21a3V43cRiLYhbIFBI0N0GDROUsiZBqO4cApy4/Yav1LjzCk4H6o7H3ZIiR6gFiHrCj FcVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=88a4EcsyoImPea13g+jXS6DiIw9vwnj7Q3nYiAaYWFo=; b=hX0uiUZhGHSXFPkHW19tBZ0asJlbxiEPjb1EQGJojyselAgnlE+KJitCCKO/wOlOMO bgvwwRp1qtYqKot9LsftffN7KPZsFWh9hD/oHNh+MQmu8cslUpdZNKzFfpEGiI0BZnbw eY3HqfpBypJdhA/9a+wt6vn0msZHXVN6QaaTaM0xJoeJXZgtNMmVXkny9KO2SEE4FRWr g1ATdwS0DM5AE4Ytf2AD55kCDs3urBSkv1sQy0eV55F8hez4QSQnDSsabLwoZi2MAkwp 6rLeJteKHnRBQsOZQtePGMNZB/6zn/nXHU/8uYNq9qncS1dv0HWQOb02uhBYZM90Z2BQ 5syA== X-Gm-Message-State: AFqh2krjT1LGRhB8oCuSgSAXAbhbqj1tclMGE4N/HWaMK6t0qc6Mp6Uf K9vB2NUyL+g4OE1p+TvQwYK58t4xrltKwuoUo2VBWhOBJNh5BSRfZsEbwwM/iFN2sERRuN/wtex DXzC2Gdo5WiKz9OU4ydlWKWCkf3vxRTgmTNepGgAaKDn0fJcOjQTD0pdlTTU7ElHg/Rzj0vHnJ4 aXM6TmMp+pGIsz X-Google-Smtp-Source: AMrXdXvrTP6NKOk9RnbyL+czq+G2DpbJC3hFN/EnFfOXtejW+ehF57bYGWslNLJhLEGzZzI+Fm5ytw== X-Received: by 2002:a05:6808:120a:b0:364:cc8c:1870 with SMTP id a10-20020a056808120a00b00364cc8c1870mr14930314oil.41.1674493514028; Mon, 23 Jan 2023 09:05:14 -0800 (PST) Received: from DESKTOP-B7RB26P.localdomain (cpe-70-114-202-97.austin.res.rr.com. [70.114.202.97]) by smtp.gmail.com with ESMTPSA id 2-20020aca0502000000b0035ec1384c9esm23160163oif.23.2023.01.23.09.05.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 09:05:13 -0800 (PST) From: George Prekas To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: Catalin Marinas , Andrew Morton , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Vlastimil Babka , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Thomas Gleixner , "Eric W. Biederman" , Sebastian Andrzej Siewior , Andy Lutomirski , Peter Zijlstra , "Liam R. Howlett" , Fenghua Yu , Andrei Vagin , George Prekas Subject: [PATCH 4/9] mm: kmemleak: add kmemleak_noscan_phys function Date: Mon, 23 Jan 2023 11:04:14 -0600 Message-Id: <20230123170419.7292-5-george@enfabrica.net> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230123170419.7292-1-george@enfabrica.net> References: <20230123170419.7292-1-george@enfabrica.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" This function should be used instead of kmemleak_noscan when the object has been registered with kmemleak_alloc_phys. Signed-off-by: George Prekas --- include/linux/kmemleak.h | 4 ++++ mm/kmemleak.c | 20 +++++++++++++++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/include/linux/kmemleak.h b/include/linux/kmemleak.h index 1e2e8deac6dc..42069e0c1ac8 100644 --- a/include/linux/kmemleak.h +++ b/include/linux/kmemleak.h @@ -29,6 +29,7 @@ extern void kmemleak_not_leak(const void *ptr) __ref; extern void kmemleak_ignore(const void *ptr) __ref; extern void kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp) __= ref; extern void kmemleak_no_scan(const void *ptr) __ref; +extern void kmemleak_no_scan_phys(phys_addr_t phys) __ref; extern void kmemleak_alloc_phys(phys_addr_t phys, size_t size, gfp_t gfp) __ref; extern void kmemleak_free_part_phys(phys_addr_t phys, size_t size) __ref; @@ -106,6 +107,9 @@ static inline void kmemleak_erase(void **ptr) static inline void kmemleak_no_scan(const void *ptr) { } +static inline void kmemleak_no_scan_phys(phys_addr_t phys) +{ +} static inline void kmemleak_alloc_phys(phys_addr_t phys, size_t size, gfp_t gfp) { diff --git a/mm/kmemleak.c b/mm/kmemleak.c index 5882f60d127c..6e037dcf322f 100644 --- a/mm/kmemleak.c +++ b/mm/kmemleak.c @@ -939,12 +939,12 @@ static void object_set_excess_ref(unsigned long ptr, = unsigned long excess_ref) * pointer. Such object will not be scanned by kmemleak but references to = it * are searched. */ -static void object_no_scan(unsigned long ptr) +static void object_no_scan(unsigned long ptr, bool is_phys) { unsigned long flags; struct kmemleak_object *object; =20 - object =3D find_and_get_object(ptr, 0); + object =3D __find_and_get_object(ptr, 0, is_phys); if (!object) { kmemleak_warn("Not scanning unknown object at 0x%08lx\n", ptr); return; @@ -1188,10 +1188,24 @@ void __ref kmemleak_no_scan(const void *ptr) pr_debug("%s(0x%p)\n", __func__, ptr); =20 if (kmemleak_enabled && ptr && !IS_ERR(ptr)) - object_no_scan((unsigned long)ptr); + object_no_scan((unsigned long)ptr, false); } EXPORT_SYMBOL(kmemleak_no_scan); =20 +/** + * kmemleak_no_scan_phys - similar to kmemleak_no_scan but taking a physic= al + * address argument + * @phys: physical address of the object + */ +void __ref kmemleak_no_scan_phys(phys_addr_t phys) +{ + pr_debug("%s(0x%pa)\n", __func__, &phys); + + if (kmemleak_enabled && phys) + object_no_scan((unsigned long)phys, true); +} +EXPORT_SYMBOL(kmemleak_no_scan_phys); + /** * kmemleak_alloc_phys - similar to kmemleak_alloc but taking a physical * address argument --=20 2.37.1 From nobody Wed Apr 8 12:37:38 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B5003C38142 for ; Mon, 23 Jan 2023 17:05:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232663AbjAWRFf (ORCPT ); Mon, 23 Jan 2023 12:05:35 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41488 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232750AbjAWRFX (ORCPT ); Mon, 23 Jan 2023 12:05:23 -0500 Received: from mail-oi1-x230.google.com (mail-oi1-x230.google.com [IPv6:2607:f8b0:4864:20::230]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 41CD72CFF0 for ; Mon, 23 Jan 2023 09:05:17 -0800 (PST) Received: by mail-oi1-x230.google.com with SMTP id v17so10909953oie.5 for ; Mon, 23 Jan 2023 09:05:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enfabrica.net; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=bIxaYzXG+vaQkdBzDvgzY0uG6gWijIiHh8BJL3SYw7o=; b=Rngullo9FIQWmYiF+ZxTZkXPONEiae8rLiI21tPQuQM7sel0wQrIaqKGTfGlyJBYHi BZloPHvNsYpAB8Gjfq+/MLy+JFG1bzk9t4DEAy5bahBhWPSMcKlhIaQDxnWkS4E2ZfMh wZxkcA3BZUUaKrNCRvUanXkMY/EQKELh7+/g1BPznjojLSKoZdicMlmspziUhSnqotUK 4gf7K+AEVEXHRBuH95fye+Pn26CWzGSzOf0MgsD7nrYkVs73JTz+/9vjgUZZkV5BCZEJ pKn+T9w2ueZQx9kRjRDuaeK0hP1PuZupTr0opup9/ZBIs7pDl5ZdZ4dC2rzu8Dko5QBl yiaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=bIxaYzXG+vaQkdBzDvgzY0uG6gWijIiHh8BJL3SYw7o=; b=Zibnmg+YKECytdB+XXbYqBkbcROq0KNMGRYEu2s5Dv/e0kV2TUYVnDg1c6QX6DaMwp dmZCKzTy8GkHpFUbwnUCAUdQtnJ+LN+GsS2fVYt/a/2fI74IH+mwqYdGfsvGs1XPE0/5 VtQxCGBihDLuybGy23J5wktdsG7mtRBxogLSesY5nipHxRav0ItIkkTDCElOpVdP+HMt 2Jw+RWiMImjsUdODMiJFAHOT18oLUw88UOXvcSOCxEt2O5GHmPqgzxskvxHF8sfkF6lI 33AYOef1p0mz39J51WPtoglHF25eFZikSzJbJi60ENTR42FGcEcX9rXGdzw9W3XecqyQ 6A2Q== X-Gm-Message-State: AFqh2kqdvAoSNJqdw2U4vAW5RwOP3uKlt0NX48wgs4RjAY+B0Cuvm2ry PYbPdqrP3GOjQ2wWW7Eteln41NF39rZRv+ogpzU71Z3Mr8r7DXvxPtDkuIgdhA6guTCc/KNeI0V x7yLPS2fjBqU1/UgFaBhgoXuioi6rZBAWtSP6yFs0B+Wlvb2GQmn5jd0fNaCSgpbzOMH6lNPc7C v78H3AjEipAJ5Z X-Google-Smtp-Source: AMrXdXtmQsBbX7TxTVWro+5YzIyFVsPhCNiCtKLjq/clS6dNMO6H0Okkpr01ZFCld64pV0RG/sUUQA== X-Received: by 2002:aca:ea56:0:b0:364:458a:a719 with SMTP id i83-20020acaea56000000b00364458aa719mr12645525oih.23.1674493516311; Mon, 23 Jan 2023 09:05:16 -0800 (PST) Received: from DESKTOP-B7RB26P.localdomain (cpe-70-114-202-97.austin.res.rr.com. [70.114.202.97]) by smtp.gmail.com with ESMTPSA id 2-20020aca0502000000b0035ec1384c9esm23160163oif.23.2023.01.23.09.05.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 09:05:15 -0800 (PST) From: George Prekas To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: Catalin Marinas , Andrew Morton , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Vlastimil Babka , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Thomas Gleixner , "Eric W. Biederman" , Sebastian Andrzej Siewior , Andy Lutomirski , Peter Zijlstra , "Liam R. Howlett" , Fenghua Yu , Andrei Vagin , George Prekas Subject: [PATCH 5/9] mm: kmemleak: do not scan sparsemap_buf Date: Mon, 23 Jan 2023 11:04:15 -0600 Message-Id: <20230123170419.7292-6-george@enfabrica.net> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230123170419.7292-1-george@enfabrica.net> References: <20230123170419.7292-1-george@enfabrica.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" sparsemap_buf is used for vmemmap and vmemmap contains an array of struct page. kmemleak scans the pages separately. If it scans them twice, then it will duplicate the number of found references and will cause missed leaks. Signed-off-by: George Prekas --- mm/sparse.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mm/sparse.c b/mm/sparse.c index 2779b419ef2a..49df7a052037 100644 --- a/mm/sparse.c +++ b/mm/sparse.c @@ -14,6 +14,7 @@ #include #include #include +#include =20 #include "internal.h" #include @@ -466,6 +467,8 @@ static void __init sparse_buffer_init(unsigned long siz= e, int nid) */ sparsemap_buf =3D memmap_alloc(size, section_map_size(), addr, nid, true); sparsemap_buf_end =3D sparsemap_buf + size; + /* sparsemap_buf has been registered with its physical address in kmemlea= k */ + kmemleak_no_scan_phys(virt_to_phys(sparsemap_buf)); } =20 static void __init sparse_buffer_fini(void) --=20 2.37.1 From nobody Wed Apr 8 12:37:38 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E86D6C05027 for ; Mon, 23 Jan 2023 17:05:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233234AbjAWRFh (ORCPT ); Mon, 23 Jan 2023 12:05:37 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41874 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233112AbjAWRF1 (ORCPT ); Mon, 23 Jan 2023 12:05:27 -0500 Received: from mail-oi1-x229.google.com (mail-oi1-x229.google.com [IPv6:2607:f8b0:4864:20::229]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CE7B727D6E for ; Mon, 23 Jan 2023 09:05:18 -0800 (PST) Received: by mail-oi1-x229.google.com with SMTP id s124so10949773oif.1 for ; Mon, 23 Jan 2023 09:05:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enfabrica.net; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=f2GRRNrDhCrnlwVW91CW9FSUCR/cr5m9HywrBeRIIiU=; b=finZTNj1eGWaV2AmpSJfvqcxLGxQU2fTE9yH9iw/wQIpHK0AtwI358OYChnUXm/8iJ 885GsZ7L+Qd2HsByw4673Ec8W+rPwybrY8NNH9uVdmzttMMGB3crZ6X3JaWMwMfvVtZ5 Kat9fNB7+JiCO6EMl4pHgb/8bzTiYCfgU5JtHk2K5dkGGaEJs7DbGIxeER6UUFvFSuBS gyV74PLOidorQhN12tk9QB59wPIuufCpu3l30daIVWeu9BC3GItN8Y5FYyuJDN1xy7xZ Dw46z8YRHz0afNEvAByA6Aq4wWLUJrJAEcTazwhOgd3Fof5IFs50ES3tOmcCZL68xZil mneg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=f2GRRNrDhCrnlwVW91CW9FSUCR/cr5m9HywrBeRIIiU=; b=wtJAjAu6kTq6tzVtqGEecOsSO4HtCatwlLSjJVnfrFBpeaNpaeo7N51zWtUyJ4Tfg/ UpdCSDnJCD4c/qR835Jdf2M+eeBjVMOgsHp3MbT/bT0+sxsmcw8dj8+oBjHkjpAZBlUS +wj6fZn0TxydNfsMJP5MiLuxCpqPkdiNWZd4+Dt4EIy9MUitdGFTckzVaFOksZNzezVA Hgfcv1tnhM/x3rCYd3XU6yEqviGZicgmDyuY/LZPwoIgWI9ft0bfmmmceEwxcARJk6pt gteOlDniMfnFERgiulOjfkWhNTihPd8x9W8HuyJtKlxf73GPU5TQxr7sFh7gL/BeiOtB caSw== X-Gm-Message-State: AFqh2ko+MqRxjn2snaNbo5c8UCZo6WOsBNXJRw/ZjgXIANVS2vJiuskL aPUJFpHySW3mIwfqYSWOSJZTTy3kyfvLpyD2ieeeOzKJL5wQ/ViS9HJsUjKeAab2vgCck8KsIL8 CpMCWNOE+403AKNcKTYwdApFYCrbN35pHNibirLvo1mkM4S+QCL9hD3f0Bj/4pm7hanuQig33ub xRnYB62CQPzA== X-Google-Smtp-Source: AMrXdXtf3m6tswAwu4JAcP7eCbHkFbal+Boirz42qiwEY8KwjUMPKGRMWdR5Ardxhr7Hb+ZCseEe/g== X-Received: by 2002:a05:6808:1414:b0:363:b9af:ec89 with SMTP id w20-20020a056808141400b00363b9afec89mr15920247oiv.1.1674493518413; Mon, 23 Jan 2023 09:05:18 -0800 (PST) Received: from DESKTOP-B7RB26P.localdomain (cpe-70-114-202-97.austin.res.rr.com. [70.114.202.97]) by smtp.gmail.com with ESMTPSA id 2-20020aca0502000000b0035ec1384c9esm23160163oif.23.2023.01.23.09.05.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 09:05:18 -0800 (PST) From: George Prekas To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: Catalin Marinas , Andrew Morton , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Vlastimil Babka , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Thomas Gleixner , "Eric W. Biederman" , Sebastian Andrzej Siewior , Andy Lutomirski , Peter Zijlstra , "Liam R. Howlett" , Fenghua Yu , Andrei Vagin , George Prekas Subject: [PATCH 6/9] mm: kmemleak: do not scan cpu_cache of struct kmem_cache Date: Mon, 23 Jan 2023 11:04:16 -0600 Message-Id: <20230123170419.7292-7-george@enfabrica.net> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230123170419.7292-1-george@enfabrica.net> References: <20230123170419.7292-1-george@enfabrica.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The code already makes sure that kmemleak will not scan similar caches: array_cache and alien_cache. For the cpu_cache, the code takes a different approach using kmemleak_erase. This approach handles object allocations but does not handle transfers to other caches and leads to undetected leaks. According to the comment in alloc_arraycache: [...] when such objects are allocated or transferred to another cache the pointers are not cleared and they could be counted as valid references during a kmemleak scan. Therefore, kmemleak must not scan such objects. Signed-off-by: George Prekas --- mm/slab.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) diff --git a/mm/slab.c b/mm/slab.c index 29300fc1289a..a927e1a285d1 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -1744,6 +1744,7 @@ static struct array_cache __percpu *alloc_kmem_cache_= cpus( for_each_possible_cpu(cpu) { init_arraycache(per_cpu_ptr(cpu_cache, cpu), entries, batchcount); + kmemleak_no_scan(per_cpu_ptr(cpu_cache, cpu)); } =20 return cpu_cache; @@ -3023,20 +3024,8 @@ static inline void *____cache_alloc(struct kmem_cach= e *cachep, gfp_t flags) =20 STATS_INC_ALLOCMISS(cachep); objp =3D cache_alloc_refill(cachep, flags); - /* - * the 'ac' may be updated by cache_alloc_refill(), - * and kmemleak_erase() requires its correct value. - */ - ac =3D cpu_cache_get(cachep); =20 out: - /* - * To avoid a false negative, if an object that is in one of the - * per-CPU caches is leaked, we need to make sure kmemleak doesn't - * treat the array pointers as a reference to the object. - */ - if (objp) - kmemleak_erase(&ac->entry[ac->avail]); return objp; } =20 --=20 2.37.1 From nobody Wed Apr 8 12:37:38 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A3096C05027 for ; Mon, 23 Jan 2023 17:05:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233287AbjAWRFk (ORCPT ); Mon, 23 Jan 2023 12:05:40 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:42128 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233254AbjAWRFd (ORCPT ); Mon, 23 Jan 2023 12:05:33 -0500 Received: from mail-ot1-x32e.google.com (mail-ot1-x32e.google.com [IPv6:2607:f8b0:4864:20::32e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 76A44FF38 for ; Mon, 23 Jan 2023 09:05:21 -0800 (PST) Received: by mail-ot1-x32e.google.com with SMTP id f5-20020a9d5f05000000b00684c0c2eb3fso7679808oti.10 for ; Mon, 23 Jan 2023 09:05:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enfabrica.net; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6ru6CLB0URVzEwIi8l9mzpkjbwVXFEWjh4LnzIwtBgg=; b=eRHkK9RSp5RdUPbYzc2ONDyMk1JVlFNsVwUGHf/NxgfjQtB2EguW9rSon5vUJDEQcR csImBlv1J/8eJb0qw56nUOkalGbV3a9x7Y+1iaTyUJQzHKwhtDEC6PfRxanAeXV8m/hK nTV9ZRDqUFiBL5abS70FxjIdsRGoYa90GQtfcK5xG7MVLKvFuzLiCfhSXpOsVNqfGowy yaZpYooq8OyDfvz1AP5wzOv1luRGdwp9M89VSrRpL+BaQ2XkmmKQ86jTzfYdyjLqmp4z KGg5dcZYHnUHIh/GT9M4dDHpW67G6ZesHaPm+nvGRaQp/gfK7aqKufdBPwIZeV8GR0OF sltA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6ru6CLB0URVzEwIi8l9mzpkjbwVXFEWjh4LnzIwtBgg=; b=qyFn0cokiwG6tnsbWW3wGmeY5v1fakQKLz8w4U87uNQp0L7L0l1446b+MUa7jEM0o3 w4PND+o8UnpaxOpLb50WTUrq1JlQ3ti7zt/bR1NPX6a1QKEGygZt1PvqPQ96gD1saEOM Uud2iJwi6kW4in/8ENZZu6WUTJjeT5bCWYAIVVVo4ydbdWEjhM0prC3cqR2OPQy44yxe +PBvNLAqsAt+Shjn5mqQMgY4oBrE/oeT8OGbToHTSnGrfFLZi42A0RSAd/l6XchH/w8q /WRd+ddqfEdivxEhB15znBeimfVaFo2V4t6LhUjOvEqKHWH1Qk+Oh7yRT0w1pJWPrhzk 3KSg== X-Gm-Message-State: AFqh2kpJVlm/2+qsvD8VQUXgmwVEVpeAXY+dcK1RsLNxl2qs0Jz8kzcR LzzlbDM435IpUQ/a41MNcksXbQ3s4aQZfwZGVnLlfff3IlvS7evw2tXPvqTCv9+gN/bH2Lpm6sI txfCyYvs7hbKUjlQVIGMRnLmsmPjWhCO1LLKEiZhxxx5IAw9B15xOKnLE9E9ZxrRdU6n6GO1f1f XIxfIn77Zrxg== X-Google-Smtp-Source: AMrXdXvByCWK7YSdHMdSB0mW02MoC6pySSXn6CG8IdG7KukUbpOeHf13LuBKC6y/KYQF7TZq9bxuGw== X-Received: by 2002:a05:6830:1358:b0:670:9f08:2c48 with SMTP id r24-20020a056830135800b006709f082c48mr12522432otq.9.1674493520590; Mon, 23 Jan 2023 09:05:20 -0800 (PST) Received: from DESKTOP-B7RB26P.localdomain (cpe-70-114-202-97.austin.res.rr.com. [70.114.202.97]) by smtp.gmail.com with ESMTPSA id 2-20020aca0502000000b0035ec1384c9esm23160163oif.23.2023.01.23.09.05.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 09:05:20 -0800 (PST) From: George Prekas To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: Catalin Marinas , Andrew Morton , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Vlastimil Babka , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Thomas Gleixner , "Eric W. Biederman" , Sebastian Andrzej Siewior , Andy Lutomirski , Peter Zijlstra , "Liam R. Howlett" , Fenghua Yu , Andrei Vagin , George Prekas Subject: [PATCH 7/9] mm: kmemleak: erase page->s_mem in slab_destroy Date: Mon, 23 Jan 2023 11:04:17 -0600 Message-Id: <20230123170419.7292-8-george@enfabrica.net> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230123170419.7292-1-george@enfabrica.net> References: <20230123170419.7292-1-george@enfabrica.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The field s_mem of struct page is initialized with the virtual address of the page in function alloc_slabmgmt. If kmalloc allocates an object that starts on this page, then kmemleak knows that this object has 2 references. On slab_destroy, s_mem should not continue referring to any allocated object in the future. Specifically, assume that initially the 4KB cache uses page[5] and its s_mem =3D 0x5000. Then assume that this cache releases page[5] and the 8KB cache allocates page[4] and page[5]. Subsequently, kmalloc returns an 8KB object at address 0x4000 which will have 3 references: the returned pointer from kmalloc, page[4].s_mem =3D 0x4000, and page[5].s_mem. This object can leak without detection. Signed-off-by: George Prekas --- mm/slab.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mm/slab.c b/mm/slab.c index a927e1a285d1..aa5eb725ee9c 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -1611,6 +1611,9 @@ static void slab_destroy(struct kmem_cache *cachep, s= truct slab *slab) { void *freelist; =20 + /* Erase the page's virtual address from s_mem */ + kmemleak_erase(&slab->s_mem); + freelist =3D slab->freelist; slab_destroy_debugcheck(cachep, slab); if (unlikely(cachep->flags & SLAB_TYPESAFE_BY_RCU)) --=20 2.37.1 From nobody Wed Apr 8 12:37:38 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5AAACC05027 for ; Mon, 23 Jan 2023 17:05:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232750AbjAWRFp (ORCPT ); Mon, 23 Jan 2023 12:05:45 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41478 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233092AbjAWRFe (ORCPT ); Mon, 23 Jan 2023 12:05:34 -0500 Received: from mail-oa1-x31.google.com (mail-oa1-x31.google.com [IPv6:2001:4860:4864:20::31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A80C21B55F for ; Mon, 23 Jan 2023 09:05:23 -0800 (PST) Received: by mail-oa1-x31.google.com with SMTP id 586e51a60fabf-142b72a728fso14624340fac.9 for ; Mon, 23 Jan 2023 09:05:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enfabrica.net; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ybecE7vl8IXqIAJRMP/wGF59IDlD/hkvogtnVPzlVAI=; b=APL7TitIWu54rYa8SCVe8M3t0wMgLY+EV18cpTS1TnvN1zchHcLl1Ucf9YXLj3UDrT 7NgDbZrD/5d1Ri7Y5BX5j4wEvWROYTj6Ah0D07piXUurw4bQNf8fHkltGPmYEovdFyir W9EIKbIvyhtvwkPubU2J5RShw8WGwD7mOV65YKKY+C8iQUexFcSXqJ8D+Nu/qoUYtrgr UDfKq36+TkUnpoof+BMglXhqxWwr95hspOcKgpJ0NxFlgRsNSWsde/dbjtRXeJJuWh+J e0Jus9A143Rj74MtKcxi6llOf07toQnooc0l0KLGRcLgGCvhUs8IrZwiXNMGjX99G0Ta FxNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ybecE7vl8IXqIAJRMP/wGF59IDlD/hkvogtnVPzlVAI=; b=SLT3EI7gaXd/6J04mt/obJCwey8QdREFx1AIqy+wOIki85SLGU4d1vU0V0zyosvqjW x+PEFzMf1i/kvCPzVyNzXaHS7/Cq4rCqNki4ETdqQxjIAgVqFNhNhT3cmE7w2nyW7HMM GVENMWBKyNekd9tTRdDVkyB1FxhmqfPjAVaNJ5yvOUuVSoDnH1MGED9hwInbs0s1ivX9 emfDssSP6M4a2QUHHY2p26HOILI0kIP5+fzb3X5D5cpDM/Ni12xannB0pJUIJdepdM3v WaQDc1X+WkZI662QJA9C/OI4nCS1eKIQs3DhxMcPabWS6Gu8i/RyyYK4hqgxwzHso2oT BN6w== X-Gm-Message-State: AFqh2kovHv5S5rBFtIzTezHLDB7+PAaKsceybavhiczaq2Qe9gK+ZxND aRkpZIdXtVLSFlTnfTDSye5/VVdcN5KcpIc3RNqfF8sTY7ma8sKgczBzItDrGhhHxMdj5gzZbDF LCRyahKuG3sqh5W3wUuGuhi82KY25QVM2DFR2ECgafPPBaXfc14mJeqpsXLA6OoDef4inax8zhE wrtIp1F3k4pQ== X-Google-Smtp-Source: AMrXdXsRhvT7IPixwWUMSoAngcVnbBU4uqLsWAOHwwINbPYyJOELbPpvjBW1uZWQE2O5oDk3JmtS4w== X-Received: by 2002:a05:6870:ab84:b0:15f:32b:6e46 with SMTP id gs4-20020a056870ab8400b0015f032b6e46mr13704980oab.49.1674493522851; Mon, 23 Jan 2023 09:05:22 -0800 (PST) Received: from DESKTOP-B7RB26P.localdomain (cpe-70-114-202-97.austin.res.rr.com. [70.114.202.97]) by smtp.gmail.com with ESMTPSA id 2-20020aca0502000000b0035ec1384c9esm23160163oif.23.2023.01.23.09.05.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 09:05:22 -0800 (PST) From: George Prekas To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: Catalin Marinas , Andrew Morton , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Vlastimil Babka , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Thomas Gleixner , "Eric W. Biederman" , Sebastian Andrzej Siewior , Andy Lutomirski , Peter Zijlstra , "Liam R. Howlett" , Fenghua Yu , Andrei Vagin , George Prekas Subject: [PATCH 8/9] mm: kmemleak: erase page->freelist in slab_destroy Date: Mon, 23 Jan 2023 11:04:18 -0600 Message-Id: <20230123170419.7292-9-george@enfabrica.net> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230123170419.7292-1-george@enfabrica.net> References: <20230123170419.7292-1-george@enfabrica.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" slab_destroy frees the allocated memory pointed by page->freelist. It should also erase the reference to it. Otherwise, when the memory is reused for another object, kmemleak will find the stale pointer and erroneously increase the reference count of the new object. That will lead to undetected memory leaks. Signed-off-by: George Prekas --- mm/slab.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mm/slab.c b/mm/slab.c index aa5eb725ee9c..12acce274502 100644 --- a/mm/slab.c +++ b/mm/slab.c @@ -1625,8 +1625,10 @@ static void slab_destroy(struct kmem_cache *cachep, = struct slab *slab) * From now on, we don't use freelist * although actual page can be freed in rcu context */ - if (OFF_SLAB(cachep)) + if (OFF_SLAB(cachep)) { kfree(freelist); + kmemleak_erase(&slab->freelist); + } } =20 /* --=20 2.37.1 From nobody Wed Apr 8 12:37:38 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 58939C38142 for ; Mon, 23 Jan 2023 17:05:48 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233485AbjAWRFr (ORCPT ); Mon, 23 Jan 2023 12:05:47 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41990 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233052AbjAWRFi (ORCPT ); Mon, 23 Jan 2023 12:05:38 -0500 Received: from mail-oi1-x230.google.com (mail-oi1-x230.google.com [IPv6:2607:f8b0:4864:20::230]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 76A531A4A1 for ; Mon, 23 Jan 2023 09:05:25 -0800 (PST) Received: by mail-oi1-x230.google.com with SMTP id v17so10910339oie.5 for ; Mon, 23 Jan 2023 09:05:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enfabrica.net; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8f88CXcixnrI/0j1gGMVDwRYunITviumj406DJ1Inns=; b=ObJDc3GJ8VcmrPLtvbGBaEyaJOUaLxXFD5DlwgYRAYb107fIdWq3sp37PFvexXW2O+ qDy5o60fDjYQGPlMWnhZRjjcK9Nf24oENVbFcVPE2xui9vzipy98GDJRKGTtB8KxuRx7 HGO2p7RRACpczYh8QIoQQyD/XbATvL1WU4jKphVHo7JWbxpYvN2oWQ56MnXuhmiXuYq3 1t1fQtsqvb5JgpF9ihIrEzFkntjB3E3tWbiMlTsoY9QQ+juCR38vimxgbRVFQBtxduwy fVw5bRmcm9HN+wjVYzvVr+L/2VKYKQ4KvMPsaJPjlehXxzkTbFY8dnG4VMlByzqj0y/h ACSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8f88CXcixnrI/0j1gGMVDwRYunITviumj406DJ1Inns=; b=PDpJUIjGPqUeL69BYU9pvVFtff+pBqfcxsPpYfps94pMIQAaq6tWgPlr+5fZtI7LVF 2SN7r8DwKOfUG8nuQGQ6v195evl6/nHIpc0Oy+rBKXAs95tNUGQitJm+Z/X9VgGsAF+6 mJJOCxZjG55Rx/mRLZg3cBExFB1KFG06ajs8KtuMc3pE61feRzt82TsXUD+Graty7yzB vH4MVezHUA8wrOyW23o34ZlDVMiQxA4WNo5mNJu4Dv9AQvy89MlBQYG1fnypdXUPT33k Lvkpg0QM8dn1katXiULvNxCSX2VI2GROjS4EjzfdOmFt+4YEB2DMOveUCFKeweWiIlXc l0Ug== X-Gm-Message-State: AFqh2koJiCbPCB2o/QIogGq0NdXu6THhvgSFmkCebFg8VHaMaEx7jqAF fJx2urK826LqgCmzUi1LBnELM5Keyw8IWR9RNsassbGw0iDB0ExjnHY5qUuNTSuxDY4pySOWrga OGxsxzTB0BZ7MNocN8aHK8yTEzPKHT4zBdi5Pcwi/HfvhZRArIBynRXzFJ0L/K22SpaBt0gTSQy npAX3cM6WsgQ== X-Google-Smtp-Source: AMrXdXsg6f/N8/NWAWLTaBNp5bBEClmYxq8/0OQjAJX+T5+d9whQAFDyY71xO+WqBPcWrsx5a5Kx7A== X-Received: by 2002:a05:6808:120a:b0:364:cc8c:1870 with SMTP id a10-20020a056808120a00b00364cc8c1870mr14930650oil.41.1674493524876; Mon, 23 Jan 2023 09:05:24 -0800 (PST) Received: from DESKTOP-B7RB26P.localdomain (cpe-70-114-202-97.austin.res.rr.com. [70.114.202.97]) by smtp.gmail.com with ESMTPSA id 2-20020aca0502000000b0035ec1384c9esm23160163oif.23.2023.01.23.09.05.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Jan 2023 09:05:24 -0800 (PST) From: George Prekas To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: Catalin Marinas , Andrew Morton , Christoph Lameter , Pekka Enberg , David Rientjes , Joonsoo Kim , Vlastimil Babka , Roman Gushchin , Hyeonggon Yoo <42.hyeyoo@gmail.com>, Thomas Gleixner , "Eric W. Biederman" , Sebastian Andrzej Siewior , Andy Lutomirski , Peter Zijlstra , "Liam R. Howlett" , Fenghua Yu , Andrei Vagin , George Prekas Subject: [PATCH 9/9] mm: kmemleak: fix undetected leaks for page aligned objects Date: Mon, 23 Jan 2023 11:04:19 -0600 Message-Id: <20230123170419.7292-10-george@enfabrica.net> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230123170419.7292-1-george@enfabrica.net> References: <20230123170419.7292-1-george@enfabrica.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" If kmalloc returns a page aligned object, then the object has 2 references: the pointer returned by kmalloc and page->s_mem of the first page of the object. Account for this extra reference, so that kmemleak can correctly detect leaks for page aligned objects. Signed-off-by: George Prekas --- mm/slab.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/mm/slab.h b/mm/slab.h index 7cc432969945..76341c7c048e 100644 --- a/mm/slab.h +++ b/mm/slab.h @@ -734,6 +734,7 @@ static inline void slab_post_alloc_hook(struct kmem_cac= he *s, unsigned int orig_size) { unsigned int zero_size =3D s->object_size; + int min_count; size_t i; =20 flags &=3D gfp_allowed_mask; @@ -761,7 +762,11 @@ static inline void slab_post_alloc_hook(struct kmem_ca= che *s, p[i] =3D kasan_slab_alloc(s, p[i], flags, init); if (p[i] && init && !kasan_has_integrated_init()) memset(p[i], 0, zero_size); - kmemleak_alloc_recursive(p[i], s->object_size, 1, + min_count =3D 1; + /* If p[i] is page aligned, then a page->s_mem refers to it. */ + if (((uintptr_t)p[i] & ~PAGE_MASK) =3D=3D 0) + min_count++; + kmemleak_alloc_recursive(p[i], s->object_size, min_count, s->flags, flags); kmsan_slab_alloc(s, p[i], flags); } --=20 2.37.1