From mboxrd@z Thu Jan 1 00:00:00 1970 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 44A71C61DA4 for ; Thu, 9 Feb 2023 14:05:07 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B15686B0074; Thu, 9 Feb 2023 09:05:06 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id A9EEC6B0075; Thu, 9 Feb 2023 09:05:06 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 966486B0078; Thu, 9 Feb 2023 09:05:06 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 827FC6B0074 for ; Thu, 9 Feb 2023 09:05:06 -0500 (EST) Received: from smtpin12.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 5D1F21C67D8 for ; Thu, 9 Feb 2023 14:05:06 +0000 (UTC) X-FDA: 80447925012.12.6CAD05B Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) by imf29.hostedemail.com (Postfix) with ESMTP id BD0B612002E for ; Thu, 9 Feb 2023 14:05:03 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=RnfF8r6W; spf=pass (imf29.hostedemail.com: domain of olsajiri@gmail.com designates 209.85.128.52 as permitted sender) smtp.mailfrom=olsajiri@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1675951503; 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-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=FnUKwrf3QmUwHRYbPJhz1oxuhL0RjLzvi0U8XbLlOpg=; b=HeWrX3OBHx91IsdVKAR9IJiRDbrN2DODA4UrsYqcfGKgPcRrRbiOwUEckawbqVNprZblwG PV9B9UDdFEn7Z/q/lOXVda/3Tlu2zbuMM0bTq4MxQmh3o5OgxiCTcZwtotIugZ1YE+QDnf tU1YLgP+CP3UUDHLx8X03BUe3uT7Q1o= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=RnfF8r6W; spf=pass (imf29.hostedemail.com: domain of olsajiri@gmail.com designates 209.85.128.52 as permitted sender) smtp.mailfrom=olsajiri@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1675951503; a=rsa-sha256; cv=none; b=Euts+/ci80CWV9zT59HtTdDjC4pLItTG4x4XKHHcODOBDfkONxPFKramwppHW3eKa8qUK6 3U0AniD03G5aRQf7Z58h3h5o650MFMyG4c28gUXLVzoy78X4iyVB0teOxrs3kJy/cb8H8v 9/NhdMygnk8hUDSG8+kjzYiuSezt5YM= Received: by mail-wm1-f52.google.com with SMTP id m16-20020a05600c3b1000b003dc4050c94aso1592752wms.4 for ; Thu, 09 Feb 2023 06:05:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:from:to:cc:subject:date:message-id:reply-to; bh=FnUKwrf3QmUwHRYbPJhz1oxuhL0RjLzvi0U8XbLlOpg=; b=RnfF8r6WdKv8s7KDGECSXbdB+Dek6BzSaaDqDq42vhSJ7zuuK7XDZovNmyitEjA2zS UKSbw03VN/NKFo5OKrh1NqG7I8uCfs4LYo4HEZPKZr7L4Epo2bXLBpUrUTJgpReErF+E mN/EDanqdDS54R3YVZ20ue01rk9K3nosbqM7I8bnH3tvH7c76KRnX0L67kyAXiIggrcd lrpDewkEcV/xw0Jzk/qJwswf8D/+xzJmz8slTGA7ltTCL7fJveqpfPXdUhmyObv9K3ix PpUmVpAqJc6lClWSquZT8nI4aE/jQbB+JOeUwINSRfzXLXfZpmwkch38I863B+HY0LiA R/hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:date:from:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=FnUKwrf3QmUwHRYbPJhz1oxuhL0RjLzvi0U8XbLlOpg=; b=D19KNgwOPSTFgTAQZhBqtUuFbQJngiIk/+GCqNE4sCLYCjYlfRrQyqgevEC0Mv/vwm 4/uBBlmEYPIOz21vYQZqjGDnsv85df4klAoM+d8EhA+0OqyrAEkD9OVdHs0pc5Yt5ijQ Fd5bH5rjtn8LzpjXkEtk8fZv2dJhR1kpfOVZDvjTAh/BGXb6LeBI6vkqLT9igxLH3PDw XVbFcufFi/eIihrfqjwIfjfMO2652zt9NZHHKXIPI9/479DnKMTILhdQmSsDky2glXbh UG4MtRj02Lv9W5w5Igi4xXyvI6REkfhjjyKFmUo8Yq6IR8Vrb2vfqRe9sjZrlFLDvui/ RouA== X-Gm-Message-State: AO0yUKV0rbs/iWc9Fp7pF8Hs775DKi32ko/jSC5qB2PeSh5PTDpXfmdd 477O4m5ijcEJBHZVKl6gIY0= X-Google-Smtp-Source: AK7set/JJyWcN/ZigLNQVpbyMC5FbBQwDmTp/uGnEBqtMWRRn8UgHASP8FT2mp83fiKVHo+M2g04Rw== X-Received: by 2002:a05:600c:998:b0:3dc:59ee:7978 with SMTP id w24-20020a05600c099800b003dc59ee7978mr10073277wmp.38.1675951502499; Thu, 09 Feb 2023 06:05:02 -0800 (PST) Received: from krava (2001-1ae9-1c2-4c00-726e-c10f-8833-ff22.ip6.tmcz.cz. [2001:1ae9:1c2:4c00:726e:c10f:8833:ff22]) by smtp.gmail.com with ESMTPSA id n13-20020a05600c3b8d00b003dc434900e1sm2144836wms.34.2023.02.09.06.05.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Feb 2023 06:05:02 -0800 (PST) From: Jiri Olsa X-Google-Original-From: Jiri Olsa Date: Thu, 9 Feb 2023 15:04:59 +0100 To: Andrii Nakryiko Cc: Alexei Starovoitov , Andrii Nakryiko , Hao Luo , Andrew Morton , Alexander Viro , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , bpf@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-perf-users@vger.kernel.org, Martin KaFai Lau , Song Liu , Yonghong Song , John Fastabend , KP Singh , Stanislav Fomichev , Daniel Borkmann Subject: Re: [PATCH RFC 1/5] mm: Store build id in file object Message-ID: References: <20230201135737.800527-1-jolsa@kernel.org> <20230201135737.800527-2-jolsa@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Rspamd-Queue-Id: BD0B612002E X-Stat-Signature: rqxf1jq9osi55yamy95x9hapcnrok9a9 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1675951503-212954 X-HE-Meta: U2FsdGVkX19cbCseiac3BtKouDpGf51ZUgPTwqcItgDmDuhIuvN5xxxqgoXz4wGAmpYQSZ6emASljseDMGqu2av+8Lu0a+WZODAL0Vb0c/SdgkghxSADVT6Ut0VCk+ofkIVtbfJZY5RcR+3kxIQpI2dEZHQVQHt28CyxKQ8gohI0GaYVX3+VEe4Mh4hNR1GXzwQgQP/2VR8G9FUOqvGR7xnPRYTgixcohx/vVY26x7VKgHBGIuz2PA4z2iauBLN6nmlkWi3h/8XiDujROaBhY6fWYJl19bxfzvPL+P+wQ5QqdIZH2jO9/sCUdmPm5zWZ+6aWoVrjW4+u2/lgJ2gFyEQyPyB79ZoI0p66yi9WJa8KlfqRfFcGkhBzx7cN5niuaQM5GJh+qcx1xd3NC8cD+K3QrpsW38MOD1ednS8DosdRXx+qLIybyy0GfSxsb+QNemfX/njvw1qyQ1rtLRULI2T6v3YZIj1EHjJKBkLQJHVET7sWaiPnRXkJluGgp/lX+UwGyI0hZGzf4xzJKLU7YItq203v1HJ5zOY2eribVSZ/GY50QkIluT25yzJ5RNC9JsEK299xFOkUqWJXfQ10QV1hdi+Y6tZ81zADf5tkR2Y11ryj+UQD0zfpcboc0CxUM039HDSEbMNvBct5kwXxpCQLMIPGyJ7x+fT8Zb+VWIm10xrSgpsYmevvr4GH/RD/hl1m6GQ8EH4bjtq3uFsw/zYW3NpjLjvvXiEY5gduY0VTazdIbUEv5FPUrkDDhxg3DXmt2BAwCfUD5c8zFZeQYwdDKBBptV0eQmtWQrXQG+8ZpH41I+1RIM/+uIP946fDf4Tpq1h4P/IUaoy2JrdB5j4+ZQsPMcyafGpFQIxDfydkxN8qMlDBKSzbRbQrSiiBWUz6IMCvXmOn2eRp0R1SdxfK+gyJZE4BGyVNOFOuE+G2w7jowVLvVFrHOk9P4063kymSrzk8qscCLTGQMqU ssTJ0IVU 6t2bySdnfm/iVl3dHQ0PvPYVyElWyDKu5iDGfkU1Y2mTJskVLLUPvFeE2k7/NkdbBFGmGu5VZBQJcsHndwcOWMxyfxTr1pjR06SQ8ThdxAU2FVL3Hq6os3fJV4Vgxnkj8n0HM+mXTfgxX3h6yun0k6TAIAOc5NlikwSv2IVb71EjAzPINCNi2LKsfDd3EbfFBqImGhxIiNVU73FvpSkGbO3TdIGT7mo3wozMsANAr1WkU9ofLjsthimYAZQEOUTp7g0eLDaucOW+6MxIytWVwQv7PvX7d34ur1A1AXr3brIBCUBWmIYUQxbJ/MGjKbOR2Qw7PSl4B6/8nRm57fjeWirieEWFTxhb5FKFo3piKh7QeWCdDu5OY0AopltaZeUniIiStDFblCwGY0+EjsvRePUCLvjd8YX7IunydpncYePLdnN9t76NozY4O0kIwnRvGkP/OrImzdsG/w5ICT22WdZ0kr93tluog1rAuFA9dOhiqQdZ8O4JC/lTg/w== 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: On Wed, Feb 08, 2023 at 03:52:40PM -0800, Andrii Nakryiko wrote: SNIP > > diff --git a/include/linux/buildid.h b/include/linux/buildid.h > > index 3b7a0ff4642f..7c818085ad2c 100644 > > --- a/include/linux/buildid.h > > +++ b/include/linux/buildid.h > > @@ -3,9 +3,15 @@ > > #define _LINUX_BUILDID_H > > > > #include > > +#include > > > > #define BUILD_ID_SIZE_MAX 20 > > > > +struct build_id { > > + u32 sz; > > + char data[BUILD_ID_SIZE_MAX]; > > don't know if 21 vs 24 matters for kmem_cache_create(), but we don't > need 4 bytes to store build_id size, given max size is 20, so maybe > use u8 for sz? ok > > > +}; > > + > > int build_id_parse(struct vm_area_struct *vma, unsigned char *build_id, > > __u32 *size); > > int build_id_parse_buf(const void *buf, unsigned char *build_id, u32 buf_size); > > @@ -17,4 +23,15 @@ void init_vmlinux_build_id(void); > > static inline void init_vmlinux_build_id(void) { } > > #endif > > > > +#ifdef CONFIG_FILE_BUILD_ID > > +void __init build_id_init(void); > > +void build_id_free(struct build_id *bid); > > +int vma_get_build_id(struct vm_area_struct *vma, struct build_id **bidp); > > +void file_build_id_free(struct file *f); > > +#else > > +static inline void __init build_id_init(void) { } > > +static inline void build_id_free(struct build_id *bid) { } > > +static inline void file_build_id_free(struct file *f) { } > > +#endif /* CONFIG_FILE_BUILD_ID */ > > + > > #endif > > diff --git a/include/linux/fs.h b/include/linux/fs.h > > index c1769a2c5d70..9ad5e5fbf680 100644 > > --- a/include/linux/fs.h > > +++ b/include/linux/fs.h > > @@ -975,6 +975,9 @@ struct file { > > struct address_space *f_mapping; > > errseq_t f_wb_err; > > errseq_t f_sb_err; /* for syncfs */ > > +#ifdef CONFIG_FILE_BUILD_ID > > + struct build_id *f_bid; > > naming nit: anything wrong with f_buildid or f_build_id? all the > related APIs use fully spelled out "build_id" ok SNIP > > diff --git a/mm/mmap.c b/mm/mmap.c > > index 425a9349e610..a06f744206e3 100644 > > --- a/mm/mmap.c > > +++ b/mm/mmap.c > > @@ -2530,6 +2530,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr, > > pgoff_t vm_pgoff; > > int error; > > MA_STATE(mas, &mm->mm_mt, addr, end - 1); > > + struct build_id *bid = NULL; > > > > /* Check against address space limit. */ > > if (!may_expand_vm(mm, vm_flags, len >> PAGE_SHIFT)) { > > @@ -2626,6 +2627,13 @@ unsigned long mmap_region(struct file *file, unsigned long addr, > > if (error) > > goto unmap_and_free_vma; > > > > +#ifdef CONFIG_FILE_BUILD_ID > > + if (vma->vm_flags & VM_EXEC && !file->f_bid) { > > + error = vma_get_build_id(vma, &bid); > > + if (error) > > + goto close_and_free_vma; > > do we want to fail mmap_region() if we get -ENOMEM from > vma_get_build_id()? can't we just store ERR_PTR(error) in f_bid field? > So we'll have f_bid == NULL for non-exec files, ERR_PTR() for when we > tried and failed to get build ID, and a valid pointer if we succeeded? I guess we can do that.. might be handy for debugging also build_id_parse might fail on missing build id, so you're right, we should not fail mmap_region in here thanks, jirka