Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp6702650imm; Tue, 24 Jul 2018 01:18:53 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfHq1WZqhRMstasc28Nif8pggiQ/ahgYqAWHZUhuhLSjrrHyXjfbPCLmMtI5WrzUWejTFdp X-Received: by 2002:a17:902:3a3:: with SMTP id d32-v6mr16130007pld.294.1532420333410; Tue, 24 Jul 2018 01:18:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1532420333; cv=none; d=google.com; s=arc-20160816; b=QAy3ZCYgZYPiEGvKhasdFAzAHCay6RELu9daFerlc1c8mnDzDGCt9NGhmKCdTv1yWQ VFfDtoz0qzZHS3XOUxQlaKN7oEd1cXErh+cdYR45RvECOpqJcx3ToKG7DgNaPe9EJTVK KhI8LX5GZgqMZ+uqrXzLQB6fYi8SVDeKqBSNt5/CH8HH76/gE0Nq9hHMwoQRrpCqEjSn 0aOMwaLVPA7ekaVR8uXO4ysjNk9VYaVhW+ApVEow9X1Zt2EFkQhfCEpeuUo9Iyu0DKrh 2JCVeh9S5iTuK5Z66OurGiXQlI/AMZthJTMrXUOxxW0H/t4EGjaPCO4mgOAi8NFjMmjT sWuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:arc-authentication-results; bh=ImhZOVnTSMpjAmALEYiKfwA5YuppGSJu8Fz7NnWelMs=; b=Fe4QyahKrpSELS2M7zlooIYa5y430zyvTjltu3qyXXPN+JZemYoLchypqfXXupVgL1 H6GKnSsymhQ48yLdRVz66j4cLuQOvahrw1MR7qIhNic3QidFtAW94BpPrKbxbRSGS24o B7I2VaqBi3SqBFHLwZPRvhSJIR4jrjatWEdrWHATbfoEGMBzLVJtAkemVCwYlD/oQ3Yg 8NSyQudbN01cqZcAcDH1n51fdyKHPYQ+GiXq/msd/Z2HVuR6IokOqxxVICZcdp9OpC3H xm8u6XT27+gpOsBVepWFy32DmJvSZMKH/o8FV90qcn0DJmyFL09FiPi4LJLY1+c3p4Jp IC+Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l33-v6si10966415pgm.350.2018.07.24.01.18.38; Tue, 24 Jul 2018 01:18:53 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388785AbeGXJW4 (ORCPT + 99 others); Tue, 24 Jul 2018 05:22:56 -0400 Received: from seldsegrel01.sonyericsson.com ([37.139.156.29]:3184 "EHLO SELDSEGREL01.sonyericsson.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388735AbeGXJW4 (ORCPT ); Tue, 24 Jul 2018 05:22:56 -0400 Subject: Re: [PATCH RESEND] kthread, tracing: Don't expose half-written comm when creating kthreads To: Steven Rostedt CC: , Ingo Molnar , Jens Axboe , Tejun Heo , Greg Kroah-Hartman , Linus Torvalds , Peter Enderborg , Yoshitaka Seto , Oleksiy Avramchenko , KOSAKI Motohiro , John Stultz References: <20180723134210.54013-1-snild@sony.com> <20180723095550.08203a24@gandalf.local.home> <9d762b4e-20a7-578f-90c8-10a044921d67@sony.com> <20180723113741.66df3b50@gandalf.local.home> <7749ed7d-50d5-4b95-fbd2-b056a1fff957@sony.com> <20180723124154.14ef0679@gandalf.local.home> From: Snild Dolkow Message-ID: <72573a9f-694e-fc4b-cfd1-d9cde504a480@sony.com> Date: Tue, 24 Jul 2018 10:17:37 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <20180723124154.14ef0679@gandalf.local.home> Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 07/23/2018 06:41 PM, Steven Rostedt wrote: > On Mon, 23 Jul 2018 17:49:36 +0200 > Snild Dolkow wrote: >> Any issues with the commit message? Reading it back again now, it doesn't >> seem quite as clear as when I wrote it. > > Yeah, I think it does need some updates: > >> There was a window for racing when task->comm was being written. The > > It would be nice to explain this race window in more detail. > I hope the following is more clear: kthread, tracing: Don't expose half-written comm when creating kthreads There is a window for racing when printing directly to task->comm, allowing other threads to see a non-terminated string. The vsnprintf function fills the buffer, counts the truncated chars, then finally writes the \0 at the end. creator other vsnprintf: fill (not terminated) count the rest read/use comm write \0 The consequences depend on how 'other' uses the string. In our case, it was copied into the tracing system's saved cmdlines, a buffer of adjacent TASK_COMM_LEN-byte buffers (note the 'n' where 0 should be): crash-arm64> x/1024s savedcmd->saved_cmdlines | grep 'evenk' 0xffffffd5b3818640: "irq/497-pwr_evenkworker/u16:12" ...and a strcpy out of there would cause stack corruption: [224761.522292] Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in: ffffff9bf9783c78 crash-arm64> kbt | grep 'comm\|trace_print_context' #6 0xffffff9bf9783c78 in trace_print_context+0x18c(+396) comm (char [16]) = "irq/497-pwr_even" crash-arm64> rd 0xffffffd4d0e17d14 8 ffffffd4d0e17d14: 2f71726900000000 5f7277702d373934 ....irq/497-pwr_ ffffffd4d0e17d24: 726f776b6e657665 3a3631752f72656b evenkworker/u16: ffffffd4d0e17d34: f9780248ff003231 cede60e0ffffff9b 12..H.x......`.. ffffffd4d0e17d44: cede60c8ffffffd4 00000fffffffffd4 .....`.......... The workaround in e09e28671 (use strlcpy in __trace_find_cmdline) was likely needed because of this same bug. Solved by vsnprintf:ing to a local buffer, then using set_task_comm(). This way, there won't be a window where comm is not terminated. //Snild