From patchwork Mon Nov 1 06:04:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yafang Shao X-Patchwork-Id: 12595837 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 mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9EA2CC433EF for ; Mon, 1 Nov 2021 06:04:32 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 2CFAE61078 for ; Mon, 1 Nov 2021 06:04:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 2CFAE61078 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=kvack.org Received: by kanga.kvack.org (Postfix) id 7F3668000D; Mon, 1 Nov 2021 02:04:31 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 7A33880008; Mon, 1 Nov 2021 02:04:31 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 66A958000D; Mon, 1 Nov 2021 02:04:31 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0157.hostedemail.com [216.40.44.157]) by kanga.kvack.org (Postfix) with ESMTP id 5550D80008 for ; Mon, 1 Nov 2021 02:04:31 -0400 (EDT) Received: from smtpin16.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id EAFC38249980 for ; Mon, 1 Nov 2021 06:04:30 +0000 (UTC) X-FDA: 78759321900.16.859E533 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) by imf04.hostedemail.com (Postfix) with ESMTP id 9A65650000B9 for ; Mon, 1 Nov 2021 06:04:23 +0000 (UTC) Received: by mail-pj1-f52.google.com with SMTP id nn3-20020a17090b38c300b001a03bb6c4ebso11695827pjb.1 for ; Sun, 31 Oct 2021 23:04:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=a2/IouPNFu5wyi245xdRfAAYC7lsGcupBh9KGLXXf00=; b=YsWtHI6NsvXSt6QQfPqv/Qv3K3tSJyfjP7ZoAV7ft7WfMR0HAqKm2asGGcRqw8t0GG om278XoO9zST4aqVEUeuY+jzGZFqlRrjdqfXmua+YSEZ+Z0QsqaM/YYyZ41x/ZuLuRAl sH2FhiEYN916iT658X2n7AqspVWS+RD110yr9oH13jwoCUB8Siejv04Fhml68LE7g4oL OIH/l9/tO7HBLTFjrszzJKqQ3ib3Kmu7nFS08QtyJQIPxxGaJOAD6HB8t5lWifwBgeLh 7NyysJZw7YEPxu+1e+9mGJuNnvlGDgj/XeuJK7Yqdxl9ncBzLpPoeISRrKYQdAcX/mna HnUg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=a2/IouPNFu5wyi245xdRfAAYC7lsGcupBh9KGLXXf00=; b=PcDSm4NkNgmHBW50J3FBi1WW+hL6dP69WboLBLR0e8HOC7/1cGu0J4Gyv6F+0aqpcn 2DdKwwoD79f8oMttsI9ARfvsuaEKudFUxWxJbUHxNQ3KaGjo85oh3BiRyPEK1NMPKcPF jLJi2C97yIy3b7lOsjaTzsdHIa4YZxS48OZIT2iSZLDLZq5OtLhdcrEG1iJUC3AWOVj/ siRxfyMUbD1OhjvFO4n3i/PzQbRgLUENUMsKFWWSkMdjiChu4WylygH7Ny2LNTSqYBUE +OySDiZftJP5bZsAD7kg7JfyZzTZgwWUJij7iqjYuiUk7EzWFRlbkQe6NYtMGm1dNj6A Q9BQ== X-Gm-Message-State: AOAM532ptmPWD0PV0KbIY0E+gOaZf6fktdB6+EqFunvKOuHsrVypADK7 B4F1j/OKSTQePB4c174/BOg= X-Google-Smtp-Source: ABdhPJzkg/WAYLUl9ag3Y8j/TZPBBsECAfgkSD6Vu+aWqdh9BmnGXE4iyfjNXyhkMiAqtmk9oQgGNg== X-Received: by 2002:a17:90a:5d89:: with SMTP id t9mr27144039pji.21.1635746669453; Sun, 31 Oct 2021 23:04:29 -0700 (PDT) Received: from localhost.localdomain ([144.202.123.152]) by smtp.gmail.com with ESMTPSA id g8sm3277586pfc.65.2021.10.31.23.04.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 31 Oct 2021 23:04:28 -0700 (PDT) From: Yafang Shao To: akpm@linux-foundation.org, keescook@chromium.org, rostedt@goodmis.org, mathieu.desnoyers@efficios.com, arnaldo.melo@gmail.com, pmladek@suse.com, peterz@infradead.org, viro@zeniv.linux.org.uk, valentin.schneider@arm.com, qiang.zhang@windriver.com, robdclark@chromium.org, christian@brauner.io, dietmar.eggemann@arm.com, mingo@redhat.com, juri.lelli@redhat.com, vincent.guittot@linaro.org, davem@davemloft.net, kuba@kernel.org, ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org, kafai@fb.com, songliubraving@fb.com, yhs@fb.com, john.fastabend@gmail.com, kpsingh@kernel.org, dennis.dalessandro@cornelisnetworks.com, mike.marciniszyn@cornelisnetworks.com, dledford@redhat.com, jgg@ziepe.ca Cc: linux-rdma@vger.kernel.org, netdev@vger.kernel.org, bpf@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, oliver.sang@intel.com, lkp@intel.com, Yafang Shao Subject: [PATCH v7 00/11] extend task comm from 16 to 24 Date: Mon, 1 Nov 2021 06:04:08 +0000 Message-Id: <20211101060419.4682-1-laoar.shao@gmail.com> X-Mailer: git-send-email 2.27.0 MIME-Version: 1.0 X-Rspamd-Server: rspam02 X-Rspamd-Queue-Id: 9A65650000B9 X-Stat-Signature: 4r8jzbufce4yiej3iofxc46juw3zhfms Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=YsWtHI6N; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf04.hostedemail.com: domain of laoar.shao@gmail.com designates 209.85.216.52 as permitted sender) smtp.mailfrom=laoar.shao@gmail.com X-HE-Tag: 1635746663-244423 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: There're many truncated kthreads in the kernel, which may make trouble for the user, for example, the user can't get detailed device information from the task comm. This patchset tries to improve this problem fundamentally by extending the task comm size from 16 to 24, which is a very simple way. In order to do that, we have to do some cleanups first. 1. Make the copy of task comm always safe no matter what the task comm size is. For example, Unsafe Safe strlcpy strscpy_pad strncpy strscpy_pad bpf_probe_read_kernel bpf_probe_read_kernel_str bpf_core_read_str bpf_get_current_comm perf_event__prepare_comm prctl(2) After this step, the comm size change won't make any trouble to the kernel or the in-tree tools for example perf, BPF programs. 2. Cleanup some old hard-coded 16 Actually we don't need to convert all of them to TASK_COMM_LEN or TASK_COMM_LEN_16, what we really care about is if the convert can make the code more reasonable or easier to understand. For example, some in-tree tools read the comm from sched:sched_switch tracepoint, as it is derived from the kernel, we'd better make them consistent with the kernel. 3. Extend the task comm size from 16 to 24 task_struct is growing rather regularly by 8 bytes. This size change should be acceptable. We used to think about extending the size for CONFIG_BASE_FULL only, but that would be a burden for maintenance and introduce code complexity. 4. Print a warning if the kthread comm is still truncated. 5. What will happen to the out-of-tree tools after this change? If the tool get task comm through kernel API, for example prctl(2), bpf_get_current_comm() and etc, then it doesn't matter how large the user buffer is, because it will always get a string with a nul terminator. While if it gets the task comm through direct string copy, the user tool must make sure the copied string has a nul terminator itself. As TASK_COMM_LEN is not exposed to userspace, there's no reason that it must require a fixed-size task comm. Changes since v6: Various suggestion from Kees: - replace strscpy_pad() with the helper get_task_comm() - fix typo - replace BUILD_BUG_ON() with __must_be_array() - don't change the size of pr_fname - merge two samples/bpf/ patches to one patch - keep TASK_COMM_LEN_16 per Changes since v5: - extend the comm size for both CONFIG_BASE_{FULL, SMALL} that could make the code more simple and easier to maintain. - avoid changing too much hard-coded 16 in BPF programs per Andrii. Changes since v4: - introduce TASK_COMM_LEN_16 and TASK_COMM_LEN_24 per Steven - replace hard-coded 16 with TASK_COMM_LEN_16 per Kees - use strscpy_pad() instead of strlcpy()/strncpy() per Kees - make perf test adopt to task comm size change per Arnaldo and Mathieu - fix warning reported by kernel test robot Changes since v3: - fixes -Wstringop-truncation warning reported by kernel test robot Changes since v2: - avoid change UAPI code per Kees - remove the description of out of tree code from commit log per Peter Changes since v1: - extend task comm to 24bytes, per Petr - improve the warning per Petr - make the checkpatch warning a separate patch Yafang Shao (11): fs/exec: make __set_task_comm always set a nul terminated string fs/exec: make __get_task_comm always get a nul terminated string sched.h: use __must_be_array instead of BUILD_BUG_ON in get_task_comm drivers/infiniband: make setup_ctxt always get a nul terminated task comm fs/binfmt_elf: make prpsinfo always get a nul terminated task comm samples/bpf/test_overhead_kprobe_kern: make it adopt to task comm size change tools/bpf/bpftool/skeleton: make it adopt to task comm size change tools/perf/test: make perf test adopt to task comm size change tools/testing/selftests/bpf: make it adopt to task comm size change sched.h: extend task comm from 16 to 24 kernel/kthread: show a warning if kthread's comm is truncated drivers/infiniband/hw/qib/qib.h | 2 +- drivers/infiniband/hw/qib/qib_file_ops.c | 2 +- fs/binfmt_elf.c | 2 +- fs/exec.c | 5 ++-- include/linux/sched.h | 16 +++++++----- kernel/kthread.c | 7 ++++- samples/bpf/offwaketime_kern.c | 4 +-- samples/bpf/test_overhead_kprobe_kern.c | 11 ++++---- samples/bpf/test_overhead_tp_kern.c | 5 ++-- tools/bpf/bpftool/skeleton/pid_iter.bpf.c | 4 +-- tools/include/linux/sched.h | 11 ++++++++ tools/perf/tests/evsel-tp-sched.c | 26 ++++++++++++++----- .../selftests/bpf/progs/test_stacktrace_map.c | 6 ++--- .../selftests/bpf/progs/test_tracepoint.c | 6 ++--- 14 files changed, 72 insertions(+), 35 deletions(-) create mode 100644 tools/include/linux/sched.h