From patchwork Tue Dec 19 21:19:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: andrey.konovalov@linux.dev X-Patchwork-Id: 13499115 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id CAF71C41535 for ; Tue, 19 Dec 2023 21:20:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 34FD76B0078; Tue, 19 Dec 2023 16:20:01 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 2DF696B007B; Tue, 19 Dec 2023 16:20:01 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 12D666B007D; Tue, 19 Dec 2023 16:20:01 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id EA1756B0078 for ; Tue, 19 Dec 2023 16:20:00 -0500 (EST) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id A98271C03DF for ; Tue, 19 Dec 2023 21:20:00 +0000 (UTC) X-FDA: 81584835360.15.5A939F8 Received: from out-188.mta1.migadu.com (out-188.mta1.migadu.com [95.215.58.188]) by imf12.hostedemail.com (Postfix) with ESMTP id E6CA34001B for ; Tue, 19 Dec 2023 21:19:58 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=elb7wJjm; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf12.hostedemail.com: domain of andrey.konovalov@linux.dev designates 95.215.58.188 as permitted sender) smtp.mailfrom=andrey.konovalov@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1703020799; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=nejB0rN/5EGuA3SQQpabp67CuxIikS5y1NrnTFuMISI=; b=xJ5bVarqDpGyCyQCN92Wv5JaysHoAsDMS2mlbuuTPtH1JrWuZUZQZoeSK56L/vHhbBZnf9 /RiwB3O+8TzWv74JFT3BX27GoFCFjnBeupOLeqMqYfO+m3DMU705B/VbxfJ4XbHgMnaCBO u4Y2NFlyMRsAVG75XMKQ1UOCTQADF98= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=elb7wJjm; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf12.hostedemail.com: domain of andrey.konovalov@linux.dev designates 95.215.58.188 as permitted sender) smtp.mailfrom=andrey.konovalov@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1703020799; a=rsa-sha256; cv=none; b=FzAZWwXD1Uyj9EcObhm137nKpZKpkk7HPEBdXZvoXPVdJOcImwlsHbdfg06uO2pady2qeP X65XrP+raB9TWYNDBI6B6IsfBNz12G6yz31/P5X5SBFVUWCcaJVlyjjXDQpjkd5y2eZx2Z eBhvU2VIqjVyWtQqy++xta4DvnNfH4s= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1703020797; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nejB0rN/5EGuA3SQQpabp67CuxIikS5y1NrnTFuMISI=; b=elb7wJjmHVmMnqrahneo3nmWE9hHEyTRVGuiSBGymfQVeOW15J6gqNykSrIgFdw9PIMbZF ta1kf9P/xFptBLk6yUizJYveQGUO6hzXz1/PIciaF5j55mJ3tEib32Ug4OJ35XYc+zlmf1 5OklhsBMYdcTGxBkNXOkqzloDUn2vJw= From: andrey.konovalov@linux.dev To: Andrew Morton Cc: Andrey Konovalov , Marco Elver , Alexander Potapenko , Dmitry Vyukov , Vlastimil Babka , kasan-dev@googlegroups.com, Evgenii Stepanov , Tetsuo Handa , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Andrey Konovalov Subject: [PATCH v3 mm 1/4] lib/stackdepot: add printk_deferred_enter/exit guards Date: Tue, 19 Dec 2023 22:19:50 +0100 Message-Id: <82092f9040d075a161d1264377d51e0bac847e8a.1703020707.git.andreyknvl@google.com> In-Reply-To: References: MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: E6CA34001B X-Stat-Signature: s3camqy69ih9z3r1o18y97r38g7ppfhs X-HE-Tag: 1703020798-937322 X-HE-Meta: U2FsdGVkX1+dIegCAWc1wkrMHfKkUdZ3vMqNzt1kQC91o/yQnq5ygp0Cfm8qrFtAZnjh3TJ2r5hMTttNL+DeMMrFvIXL0oGnN324/2bnchzizoLTgKH/qrYac1RX1UUwYnSqJza5v2PFfmuwWN8aeK1M9z09YuS9PIg74w8TvVVTJywp8EIWlzWpaSMRJFC1T+4XMXYQV7UKItwdDb2ZUjDHqxixEHohuTnWnpLZOwwOq5YGLB2mc6fF6K5F5xUAk87eDfR0t9h4KA/tX7mlsNZGlUQe1/4sYWCWNGoZREp7Vnz2+sJF8MjkhiG9uQrzlWVpY2HbjE0LstlUatchbCDz9yNlwluuPJQJ6owixTrONDgBrjKeAWRLCzMiXa0XqL97bJUQpw02RsFXqiUu+NwkDvoBTXA/2RrZlWG/tcLUooaRVdDD51JJYCctJjis7XOFnKeuTEwtdxODIBvKrfUUB2Imd9487rKSvJJgW4jDp9t30R13NCijAWK8a4v7TgfSre1H7l5Qphhh6qRyvR8D3gv4Hj8VoLjrr4q23zQ6Yc9aQcwvZT0N++Ee32R+kFLspJCUoEDSah9zbtHhPBLjhcMD6yS3HNVjsA7Jvpg3kxoWgRTf8QpuCdcUBWCJNZC3D6G9d7PWzFLO9q/CTHlug25WkZHxMQNv/1KVnfMRDYNMM43UApsQUzBLP8ntGy3WhCzQle0P8v256xIQpNEOvkSzyEBhvksC5ZX7tSxOMJMPjaoJEGwH3wyzJIcmC0TWy6nvMRb+LlNu8YKycMDh/ETVenxH83bUnTLV46cTqSAH2QgmzL7hTCwD2sZJHr2+FxJ7cR3wPeHac1qowoU2R5ohaR1+eevDhjV6Q3d5laeNsWMSIK+6+pOe7iuEYFiRmoaERBjWHLigJXn5H3hteTKeOli+AGqJSY9kEPxppAapSVCuAT2xXefcg6IWAn7a0FUlJQMVE3w0i8b ZMEq70fr wAFjrCmEcT4jT2wVqnIAmJB+lCpUecHISfdw0crfN4hcnuyQ9OtUrNuUmu0FdLWTiPTwR2nbt2X7cWtC+3hRm158HQOTOUTGzSe8Q2FkmABS7/CsgoN10yC7WNz4f5qhqYcu1RW5MEwAtv2drQQYFVKWoXvVhWqpVuQa2Kj0E7ZyxJS4= 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: List-Subscribe: List-Unsubscribe: From: Andrey Konovalov Stack depot functions can be called from various contexts that do allocations, including with console locks taken. At the same time, stack depot functions might print WARNING's or refcount-related failures. This can cause a deadlock on console locks. Add printk_deferred_enter/exit guards to stack depot to avoid this. Reported-by: Tetsuo Handa Closes: https://lore.kernel.org/all/000000000000f56750060b9ad216@google.com/ Fixes: 108be8def46e ("lib/stackdepot: allow users to evict stack traces") Fixes: cd11016e5f52 ("mm, kasan: stackdepot implementation. Enable stackdepot for SLAB") Reviewed-by: Marco Elver Signed-off-by: Andrey Konovalov --- lib/stackdepot.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/stackdepot.c b/lib/stackdepot.c index 870cce2f4cbd..a0be5d05c7f0 100644 --- a/lib/stackdepot.c +++ b/lib/stackdepot.c @@ -506,12 +506,14 @@ depot_stack_handle_t stack_depot_save_flags(unsigned long *entries, bucket = &stack_table[hash & stack_hash_mask]; read_lock_irqsave(&pool_rwlock, flags); + printk_deferred_enter(); /* Fast path: look the stack trace up without full locking. */ found = find_stack(bucket, entries, nr_entries, hash); if (found) { if (depot_flags & STACK_DEPOT_FLAG_GET) refcount_inc(&found->count); + printk_deferred_exit(); read_unlock_irqrestore(&pool_rwlock, flags); goto exit; } @@ -520,6 +522,7 @@ depot_stack_handle_t stack_depot_save_flags(unsigned long *entries, if (new_pool_required) need_alloc = true; + printk_deferred_exit(); read_unlock_irqrestore(&pool_rwlock, flags); /* @@ -541,6 +544,7 @@ depot_stack_handle_t stack_depot_save_flags(unsigned long *entries, } write_lock_irqsave(&pool_rwlock, flags); + printk_deferred_enter(); found = find_stack(bucket, entries, nr_entries, hash); if (!found) { @@ -562,6 +566,7 @@ depot_stack_handle_t stack_depot_save_flags(unsigned long *entries, depot_keep_new_pool(&prealloc); } + printk_deferred_exit(); write_unlock_irqrestore(&pool_rwlock, flags); exit: if (prealloc) { @@ -600,9 +605,11 @@ unsigned int stack_depot_fetch(depot_stack_handle_t handle, return 0; read_lock_irqsave(&pool_rwlock, flags); + printk_deferred_enter(); stack = depot_fetch_stack(handle); + printk_deferred_exit(); read_unlock_irqrestore(&pool_rwlock, flags); *entries = stack->entries; @@ -619,6 +626,7 @@ void stack_depot_put(depot_stack_handle_t handle) return; write_lock_irqsave(&pool_rwlock, flags); + printk_deferred_enter(); stack = depot_fetch_stack(handle); if (WARN_ON(!stack)) @@ -633,6 +641,7 @@ void stack_depot_put(depot_stack_handle_t handle) } out: + printk_deferred_exit(); write_unlock_irqrestore(&pool_rwlock, flags); } EXPORT_SYMBOL_GPL(stack_depot_put); From patchwork Tue Dec 19 21:19:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: andrey.konovalov@linux.dev X-Patchwork-Id: 13499117 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id AF8FCC41535 for ; Tue, 19 Dec 2023 21:20:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 0969C6B007D; Tue, 19 Dec 2023 16:20:02 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id DB2326B007E; Tue, 19 Dec 2023 16:20:01 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id BE1C56B0081; Tue, 19 Dec 2023 16:20:01 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id A28566B007E for ; Tue, 19 Dec 2023 16:20:01 -0500 (EST) Received: from smtpin02.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 8424FA0156 for ; Tue, 19 Dec 2023 21:20:01 +0000 (UTC) X-FDA: 81584835402.02.5647B90 Received: from out-179.mta1.migadu.com (out-179.mta1.migadu.com [95.215.58.179]) by imf24.hostedemail.com (Postfix) with ESMTP id A8086180017 for ; Tue, 19 Dec 2023 21:19:59 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=IR+Whe6+; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf24.hostedemail.com: domain of andrey.konovalov@linux.dev designates 95.215.58.179 as permitted sender) smtp.mailfrom=andrey.konovalov@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1703020799; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=IugD6msAA76PLOkulY8RL+cRtUx1nL2a5VcYM7ZPFvs=; b=EWneya9LsYU1L0pyNhfY3FTVJNmtDww4iRQW8/wU30JWouwBLB5yylLJbqUzRMRsf0LlmX 7sMqBrSj/ZI0b5225lJ8ZMXdTxIbEMXi0yhPLlbMMbYpIjQgEc4Xy9CQ+Zb/Nq3xXi1Pnk /bDPB5gjQoKCYSPWsZca6hBpf97VfbY= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=IR+Whe6+; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf24.hostedemail.com: domain of andrey.konovalov@linux.dev designates 95.215.58.179 as permitted sender) smtp.mailfrom=andrey.konovalov@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1703020799; a=rsa-sha256; cv=none; b=qKsMl6VXiYBAtW5Q6qeu54ZdMEVsFBARSCy3IevfA2tqr/hnhsroCElZ2hHpDXoY98wPB2 qIoCSTFjUNw4mulnq2CyfDWp5Lho1Q2H9LbPTclOK0iCqOr4omFF3wD1M0M2NjPobo+dNX GoKHmHKm569bCLB71Sws3rUbnptN7z4= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1703020798; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=IugD6msAA76PLOkulY8RL+cRtUx1nL2a5VcYM7ZPFvs=; b=IR+Whe6+qpxv+At+vArbXY01tYtvfspW3PKw8UAncGDGnEEps0UIMWhP+wPzEx5NxY9M8h m1TDVtQZm9HrpXOj1mV5z/Lc+HwiQjOjMkmc/bfj2auMjP1/9llRH/NH6L89Gq+qP7zEz3 M7vUVsknaJSSv98tDJGKvpfbqCVOHN0= From: andrey.konovalov@linux.dev To: Andrew Morton Cc: Andrey Konovalov , Marco Elver , Alexander Potapenko , Dmitry Vyukov , Vlastimil Babka , kasan-dev@googlegroups.com, Evgenii Stepanov , Tetsuo Handa , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Andrey Konovalov , syzbot+186b55175d8360728234@syzkaller.appspotmail.com Subject: [PATCH v3 mm 2/4] kasan: handle concurrent kasan_record_aux_stack calls Date: Tue, 19 Dec 2023 22:19:51 +0100 Message-Id: <1606b960e2f746862d1f459515972f9695bf448a.1703020707.git.andreyknvl@google.com> In-Reply-To: References: MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: A8086180017 X-Stat-Signature: o7fj1b5gkrn7upx4twio15z33hyyt1rk X-HE-Tag: 1703020799-361599 X-HE-Meta: U2FsdGVkX19cqsLTC1wyDTZgNYgoqWWCQqwkp58f/qypSLX68pUeGep3onJkIjtRcuBvTO/YpChx0R/E2SyvQUZY/CeuWxOgWGtHERfQ9hKb1kANNXpMoomPz+QvjBuLFGpkWnJNaSXJWXUs249mAK/9myx9OToZhJfIFhRc9X1qB6KRjwb/3NHoO5xLP6fqzxh+rdYj8LEfdcw+6N2bt8YqS47a2s9/4nuI27yPGsNsdC7bErho3c8OPArMv2DDm74JszuM08WyPxruXYUWkx5G67NmAPPv7zshmF/chBxKV5oG+4TcXvS0TQbvf2HikoXVBdpKusw/wRXxGcTkg6qS8HDb3wQiJZ6mN6V6s8b6WlVcIHL08a3MqPh6oY/WTQ5EbAqdL6WXq5dNxP+nYfTZGpWlBK7jMTDIdMozKv2r9o4cG4RGFTMhj30pQoEljs2yZ7vvMTZXYmFtkoGeSO9JP2QheaaGSXk/dYZxQILF17VfEfhh58Kb5UULLf2c9ade/6gyJliH/luspAeY9hqfUVzKanS7TStnR4pONvMUdvGmzXmUv5+NEJNcvZ0lGUlNAN/q62/a0hfRurX7afHXh0GCnx2u3TLFmVIEWtDjuUc8FIb++pRCXJAG9qWSESvEY047n7aqm8sFrHJ2Htj0W1ZojD2VcdXwa2Xcrgf54SlpTAXGI7VmrKsjrIASSHKIeqzW4EYz//22QIEuGfArXCeRlPvZthz8JUv+em9CnuxDDY8azaLMPzCQacB/7JslEGa+BcRwSedHKOwR1OHqqsYRRDIPv7/Yuto+eyoo4FIYA0eFpEGdkgJx8h2+rqBYlJcloRxcm90RH1owwoixls3+ULCF7U4P/b1XiB52x34ik5jiwyctaNFUk/f5xi9C/TAn2c9WUQDi/f52k7PpTCwpcDydjVM7LfsNl8utbE4zsMI7B+6EGYOzKHOLsrtcLLSOJQwINdG40u+ QVDMPIH6 Lh2+h15MsfUk8ZRwQbnM1/U8ig7Nd9VpvAp1mymvpnXKOk+gH8q70qz3EmAW+pIgdQ02hhDb0nExb6T7YozldbrHRF9mD8wBgJMRzQcQTsWdvmvxQSyahbRHc3q/9Sd13t+CP69VuYMkuucFKJi31uJ+4HKhYiOkvMaf+unFH25U8CyClI0y2GUVkXY/hio9kgUo68+O3yR0V2Xm4auQD2pDTPSkNbCTSi51lrgQAD1/aZTEi601Qes1WoDSSrd1l9xRKdO9UrtX0qbE/vaGVCBp55LDDYN0t82LwPGIVGt92lVSy5Rk0k63L4Rbes+dZ3KuA+eZHvenA74k= 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: List-Subscribe: List-Unsubscribe: From: Andrey Konovalov kasan_record_aux_stack can be called concurrently on the same object. This might lead to a race condition when rotating the saved aux stack trace handles, which in turns leads to incorrect accounting of stack depot handles and refcount underflows in the stack depot code. Fix by introducing a raw spinlock to protect the aux stack trace handles in kasan_record_aux_stack. Reported-by: Tetsuo Handa Reported-by: syzbot+186b55175d8360728234@syzkaller.appspotmail.com Closes: https://lore.kernel.org/all/000000000000784b1c060b0074a2@google.com/ Fixes: 773688a6cb24 ("kasan: use stack_depot_put for Generic mode") Signed-off-by: Andrey Konovalov Reviewed-by: Marco Elver --- Changes v2->v3: - Use raw spinlock to avoid lockdep complaints on RT kernels. Changes v1->v2: - Use per-object spinlock instead of a global one. --- mm/kasan/generic.c | 32 +++++++++++++++++++++++++++++--- mm/kasan/kasan.h | 8 ++++++++ 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/mm/kasan/generic.c b/mm/kasan/generic.c index 54e20b2bc3e1..55e6b5db2cae 100644 --- a/mm/kasan/generic.c +++ b/mm/kasan/generic.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -471,8 +472,18 @@ void kasan_init_object_meta(struct kmem_cache *cache, const void *object) struct kasan_free_meta *free_meta; alloc_meta = kasan_get_alloc_meta(cache, object); - if (alloc_meta) + if (alloc_meta) { __memset(alloc_meta, 0, sizeof(*alloc_meta)); + + /* + * Temporarily disable KASAN bug reporting to allow instrumented + * raw_spin_lock_init to access aux_lock, which resides inside + * of a redzone. + */ + kasan_disable_current(); + raw_spin_lock_init(&alloc_meta->aux_lock); + kasan_enable_current(); + } free_meta = kasan_get_free_meta(cache, object); if (free_meta) __memset(free_meta, 0, sizeof(*free_meta)); @@ -502,6 +513,8 @@ static void __kasan_record_aux_stack(void *addr, depot_flags_t depot_flags) struct kmem_cache *cache; struct kasan_alloc_meta *alloc_meta; void *object; + depot_stack_handle_t new_handle, old_handle; + unsigned long flags; if (is_kfence_address(addr) || !slab) return; @@ -512,9 +525,22 @@ static void __kasan_record_aux_stack(void *addr, depot_flags_t depot_flags) if (!alloc_meta) return; - stack_depot_put(alloc_meta->aux_stack[1]); + new_handle = kasan_save_stack(0, depot_flags); + + /* + * Temporarily disable KASAN bug reporting to allow instrumented + * spinlock functions to access aux_lock, which resides inside of a + * redzone. + */ + kasan_disable_current(); + raw_spin_lock_irqsave(&alloc_meta->aux_lock, flags); + old_handle = alloc_meta->aux_stack[1]; alloc_meta->aux_stack[1] = alloc_meta->aux_stack[0]; - alloc_meta->aux_stack[0] = kasan_save_stack(0, depot_flags); + alloc_meta->aux_stack[0] = new_handle; + raw_spin_unlock_irqrestore(&alloc_meta->aux_lock, flags); + kasan_enable_current(); + + stack_depot_put(old_handle); } void kasan_record_aux_stack(void *addr) diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h index 5e298e3ac909..69e4f5e58e33 100644 --- a/mm/kasan/kasan.h +++ b/mm/kasan/kasan.h @@ -6,6 +6,7 @@ #include #include #include +#include #include #if defined(CONFIG_KASAN_SW_TAGS) || defined(CONFIG_KASAN_HW_TAGS) @@ -249,6 +250,13 @@ struct kasan_global { struct kasan_alloc_meta { struct kasan_track alloc_track; /* Free track is stored in kasan_free_meta. */ + /* + * aux_lock protects aux_stack from accesses from concurrent + * kasan_record_aux_stack calls. It is a raw spinlock to avoid sleeping + * on RT kernels, as kasan_record_aux_stack_noalloc can be called from + * non-sleepable contexts. + */ + raw_spinlock_t aux_lock; depot_stack_handle_t aux_stack[2]; }; From patchwork Tue Dec 19 21:19:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: andrey.konovalov@linux.dev X-Patchwork-Id: 13499118 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id E2081C41535 for ; Tue, 19 Dec 2023 21:20:09 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 65F5E6B007E; Tue, 19 Dec 2023 16:20:02 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 5E6FD6B0080; Tue, 19 Dec 2023 16:20:02 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4618B6B0081; Tue, 19 Dec 2023 16:20:02 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 1F9EC6B0080 for ; Tue, 19 Dec 2023 16:20:02 -0500 (EST) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id F38181A044D for ; Tue, 19 Dec 2023 21:20:01 +0000 (UTC) X-FDA: 81584835444.30.6DFF07F Received: from out-185.mta1.migadu.com (out-185.mta1.migadu.com [95.215.58.185]) by imf22.hostedemail.com (Postfix) with ESMTP id 3EA8CC000A for ; Tue, 19 Dec 2023 21:20:00 +0000 (UTC) Authentication-Results: imf22.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=qSi6bCK8; spf=pass (imf22.hostedemail.com: domain of andrey.konovalov@linux.dev designates 95.215.58.185 as permitted sender) smtp.mailfrom=andrey.konovalov@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1703020800; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=fOHzqh8IZvvUQEcAVUngjlYsg+ArhHiPZJoDS72WUGY=; b=aABxJ8YdNyB6FW0PHYybFA4MTcvSRvdV0LeT+9WA1DaNHsgSqJwbE7nzSORG/nxcOrHa9Q P2gNw+tZrGn83XAupje1gRtvlpe4KlKYFP5X4SUNwFpTEU3veUU4BV9U08E4GS6YWplI8m IcFmC3mx8Btau9F/D35S2aIivP4p9VQ= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1703020800; a=rsa-sha256; cv=none; b=EfmLaNgzpf688rFby96U08TgOvlO/2uiHCgqXpcVdfo2uCchbfrN84AvW+CrmMINd2HABC hEpwSFE3MMWoTdJx69d73nJ6A0MC7QqRph1pOApP5lk/CClbjXw/OXJM702xrWG0zuFsvH Te9onLo6X65uzTYPns73aGh7xWebbRQ= ARC-Authentication-Results: i=1; imf22.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=qSi6bCK8; spf=pass (imf22.hostedemail.com: domain of andrey.konovalov@linux.dev designates 95.215.58.185 as permitted sender) smtp.mailfrom=andrey.konovalov@linux.dev; dmarc=pass (policy=none) header.from=linux.dev X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1703020798; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=fOHzqh8IZvvUQEcAVUngjlYsg+ArhHiPZJoDS72WUGY=; b=qSi6bCK82bZzb5eDpiDbrLAgv900bdtXCroZwQk+HMxNuCcAH6RDEUBSEuZXglh3sQ52dp y4hliOr/Z2u8q2lAKSTk3GSjbIMKCqYtE46R+/r0JsXgn8CkNa8Ohm/TliCh9Gv/qOmJ9H dqjaS5WqDKLwR54ujuGm3mhTRxi7Yx0= From: andrey.konovalov@linux.dev To: Andrew Morton Cc: Andrey Konovalov , Marco Elver , Alexander Potapenko , Dmitry Vyukov , Vlastimil Babka , kasan-dev@googlegroups.com, Evgenii Stepanov , Tetsuo Handa , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Andrey Konovalov Subject: [PATCH v3 mm 3/4] kasan: memset free track in qlink_free Date: Tue, 19 Dec 2023 22:19:52 +0100 Message-Id: In-Reply-To: References: MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: 3EA8CC000A X-Rspam-User: X-Rspamd-Server: rspam11 X-Stat-Signature: 5oojmbcjqpbs34j9zduhwopjie6xw4aw X-HE-Tag: 1703020800-548066 X-HE-Meta: U2FsdGVkX18zpWD7sYIhTeFWppLtsvTXDrIEyiQKwHuMldWm/5qxoYHBh/hiC4mwMJLmVFH4S0VDCLW2WKMfTS4DyrMfNVool1luVh+NVb/DxjVnZ5W1buwQ40p0mC+hHfwY21M80vIH1UfVFVvtKcgpE4QeCBNblGrm9e9SJnCp+Zum0vAWwOMNn7htSPX9cIwBFYPFZFVg32Kuxw5z+EGaAW3skIEBznWldem0UwaLpS4t1o5RK9tunJbJUJa3kl+xq2K6RO7yzJgqncEnEoKRvh3QSeBaIfnsZAv75PyeLSjDKAVOm5QAs/hi3UZ23uk0TYzdkEYJBxjN8XWUrMeCbDLJ1u6QJ3+qZsUNtZ4xacNruAsXR417kroTagU1J489yYjOkLtoI8X/Ualk4CFCMPCBrjFQWb/MIfCL0T39krqi+AIJYk8fo/z7AINtR/PwrWRoOQ734jJYJ1EEUAbQYYWWWS7LnZRErxswTPwhxahMHG1RBj6Lcld153WI7ExvH5yh1f2Q8ReMgW04eJ8yed6ZmzzZPkExTcktv9QEGskwvYQeGKuWLVYtru9WzxUL4r4tQG3d2D3bb+FlFAKnk5jxh7gtUo/+G9vZdpIJNuwk2qfaC1Y9q6KX6AZjieOfoDXk6LAqOhOAhVrtEfkt+jPMVFe3Ct9SLEBBl7+KVEJsR9uqI6IYX7m/w7yrimZn5s4aw8G8dy7acSVq4n6cv2at2Ipb/OTAngU3g8MuWxxDFhAncKzmqFSwpiBAxVWiopW6fwhxZTjXCciu7YNw8iGaN/2dyGAmxZxOw5tZIQoV+oADjqu5P2dLnHANuvdDP3s/TPTah2I7ePhbeHnLsu00gmjjOuxoBZWUT5nUJhiVfOLuaUam5alrP+Nm3dwhCckkEo+ka5z1e/s6v5AgudtxeQfv0nGhz3wxmoNwApJTO9s5taoGP3eoaV77maWnFrVSd+sJpTE/o9V 9F7NPcMn tFH0kxMBm+6aGt6QSk2u5jJYspyE7rqUzAyYBVwmoaKQqFXWwFdZ9zCr2J3kNFY9Mw6Ujf5YfCjTHpf6L2UIe1kMSE98vDWoYR0+kWZHfGXuA/YE= 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: List-Subscribe: List-Unsubscribe: From: Andrey Konovalov Instead of only zeroing out the stack depot handle when evicting the free stack trace in qlink_free, zero out the whole track. Do this just to produce a similar effect for alloc and free meta. The other fields of the free track besides the stack trace handle are considered invalid at this point anyway, so no harm in zeroing them out. Fixes: 773688a6cb24 ("kasan: use stack_depot_put for Generic mode") Reviewed-by: Marco Elver Signed-off-by: Andrey Konovalov --- mm/kasan/quarantine.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/kasan/quarantine.c b/mm/kasan/quarantine.c index 265ca2bbe2dd..782e045da911 100644 --- a/mm/kasan/quarantine.c +++ b/mm/kasan/quarantine.c @@ -157,7 +157,7 @@ static void qlink_free(struct qlist_node *qlink, struct kmem_cache *cache) if (free_meta && *(u8 *)kasan_mem_to_shadow(object) == KASAN_SLAB_FREETRACK) { stack_depot_put(free_meta->free_track.stack); - free_meta->free_track.stack = 0; + __memset(&free_meta->free_track, 0, sizeof(free_meta->free_track)); } /* From patchwork Tue Dec 19 21:19:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: andrey.konovalov@linux.dev X-Patchwork-Id: 13499119 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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9D47DC41535 for ; Tue, 19 Dec 2023 21:20:12 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 109DE6B0080; Tue, 19 Dec 2023 16:20:03 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id F12FD6B0081; Tue, 19 Dec 2023 16:20:02 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D608B6B0082; Tue, 19 Dec 2023 16:20:02 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id B84F36B0080 for ; Tue, 19 Dec 2023 16:20:02 -0500 (EST) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 8924AA040E for ; Tue, 19 Dec 2023 21:20:02 +0000 (UTC) X-FDA: 81584835444.25.52B1276 Received: from out-174.mta1.migadu.com (out-174.mta1.migadu.com [95.215.58.174]) by imf24.hostedemail.com (Postfix) with ESMTP id D2E49180002 for ; Tue, 19 Dec 2023 21:20:00 +0000 (UTC) Authentication-Results: imf24.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=vWTr3qhn; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf24.hostedemail.com: domain of andrey.konovalov@linux.dev designates 95.215.58.174 as permitted sender) smtp.mailfrom=andrey.konovalov@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1703020801; a=rsa-sha256; cv=none; b=p/n4xZF2hckSY9XaEGsO8rywh507EzKBU2EaEvQsDmt7kgUqYo14DZfqo+69Yym60xI14W c5cjsFgCSMsiQNDW0vZ3MLCSzjzykeG2DzWgtpWctzWnU3e2FSVIEmfP0lfy9HOZAsfNU+ EW9J5qzdXFD1cIMpyCFOZJIUzee6I4A= ARC-Authentication-Results: i=1; imf24.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=vWTr3qhn; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf24.hostedemail.com: domain of andrey.konovalov@linux.dev designates 95.215.58.174 as permitted sender) smtp.mailfrom=andrey.konovalov@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1703020801; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=nCFM+nFcyoFd/gCQWZCb7EKvVZ+qSBSDeoPEA8Jfh0A=; b=POnj1tdE2BcRLB7aMrbfuhiWwNiDNFVZnrZKMpY3B9jYujHmOjRYGGe0rNAn6UH9A9rRnf xDwNQrWAIV8ocJwYewjbPn/fsQ0XTeTmN4roHyB1fa5Wgr0IGKvCONlLoJTAP1nSaFNi2D mqHoxjZGsTH+ljXTN3CcOUu6tFMFU+o= X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1703020799; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=nCFM+nFcyoFd/gCQWZCb7EKvVZ+qSBSDeoPEA8Jfh0A=; b=vWTr3qhn77AyDPItr7Jb1Va+xZtAYsJMZbCeKfs5+hQd3T8gMEEYCJMliC2zyzhGEytQiS pdedlVWK/90vwulDxVVraP5pN7YgbdG3MBwinwjLSYYIyJMPDTtGDljZA7elKcrlFiXdm6 5vpKeJm4v97c+Ecf3o21M8gf1GjoJH0= From: andrey.konovalov@linux.dev To: Andrew Morton Cc: Andrey Konovalov , Marco Elver , Alexander Potapenko , Dmitry Vyukov , Vlastimil Babka , kasan-dev@googlegroups.com, Evgenii Stepanov , Tetsuo Handa , linux-mm@kvack.org, linux-kernel@vger.kernel.org, Andrey Konovalov Subject: [PATCH v3 mm 4/4] lib/stackdepot: fix comment in include/linux/stackdepot.h Date: Tue, 19 Dec 2023 22:19:53 +0100 Message-Id: <0ebe712d91f8d302a8947d3c9e9123bc2b1b8440.1703020707.git.andreyknvl@google.com> In-Reply-To: References: MIME-Version: 1.0 X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: D2E49180002 X-Stat-Signature: mbgg8ucfyi8dksjizesszxxe8peunpzm X-HE-Tag: 1703020800-290158 X-HE-Meta: U2FsdGVkX184eBLBZYQ2heuEOeM3Dp+rrb8ScA092gBoRMV+oiJhUNQ5j80jtHeTsAc2WDWikWaGpgyHdrUWEgDtc/69+QuMvWhKwxaS6tbtVyw1rE0zidGzeEql+La90057DGmktXo0f6hQQmBUSfYE29mt+fZs2ZvCQjDI0zdcuH2BGtL0wbq962Z0i6vsuJemS6ZF9p053uWXa5QN6r+3h0kMS0zySW68IvIXcXToHSpH1ZZ/eH5dNc/3w1OjeJUQfL1nDAZeKKWEMvEfNODIlnkGyczuZqSAALYXZW5PfxyEjHWZQ3BDDQ7yP33PHj9kMrKiOzSN0ZgK5dqXJOCoxA3nALrgerCPJd785NUYkJdPsBcfOJ7Ihmo3gNyVkRZUmK5rnfEq/NMZjBQz+H4BVI1rSg+eIEyxlbRUreS1rYQmWR4wFT56B0nmh72mqQdSicFEmB1YxSv9c7jQj34Qz5BYxfLdgGROdAyv49fTmH/3rVXQAT8gZ99+rxyPGv99KI6LSoF2Hi8APNJRRqnpezlTlZ2xFn7pjnIrZ1DHDX0wpfnd5BZwDny34h60eYZZFOR8LtHdUw7sqqnKGg4bD+a3yVNp921nzZqwcACuYJbDjOEazvNV6eREO+skCP4T//DohjdMut6JUvf+X1wcqNIZkCUAWaw/7JIUJ05Dckq2PPA2zVA9YTLOuvhU175/KWeebz+1Hzoan4INNHmgrXR1ov5/3zoABlg2eB6Hucfq5XAW/8kFpWxTiXEnZ5/q3QtawQ760D2GfFMW/boprth1LevhTuHM1kQQQRPjgxfeDZujQ6HxxPOU0Mgt2Z0OT6xS8hKj5fHyHAnKjvGb4cIHMgKqg02k0rvr8CFuxAkIEHYW6JlDbRKGn6+5vR/8PyyCHl4anmdYK3Ifam3AyWc9GO/Yc/uhvBn9a0GNps+KGqhmBW8gbn6HWMw3xCJdq5Zaa0IBoRIEoYX KYaePS6Y P7i5vPwnGZWbPqtmwkzC8xy+In6N+wo3VTVtZASQr6D9UXC9/eDBFpNLw9Fgf8xuvtzSukBgnCfjfkUtGwSkcafBZmKqnDL6CNO+e 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: List-Subscribe: List-Unsubscribe: From: Andrey Konovalov As stack traces can now be evicted from the stack depot, remove the comment saying that they are never removed. Fixes: 108be8def46e ("lib/stackdepot: allow users to evict stack traces") Reviewed-by: Marco Elver Signed-off-by: Andrey Konovalov --- include/linux/stackdepot.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/include/linux/stackdepot.h b/include/linux/stackdepot.h index a6796f178913..adcbb8f23600 100644 --- a/include/linux/stackdepot.h +++ b/include/linux/stackdepot.h @@ -11,8 +11,6 @@ * SLUB_DEBUG needs 256 bytes per object for that). Since allocation and free * stack traces often repeat, using stack depot allows to save about 100x space. * - * Stack traces are never removed from the stack depot. - * * Author: Alexander Potapenko * Copyright (C) 2016 Google, Inc. *