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 25248C6FD1F for ; Thu, 16 Mar 2023 22:07:55 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B414D900006; Thu, 16 Mar 2023 18:07:54 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id ACB1A900002; Thu, 16 Mar 2023 18:07:54 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 99288900006; Thu, 16 Mar 2023 18:07:54 -0400 (EDT) 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 8A8DE900002 for ; Thu, 16 Mar 2023 18:07:54 -0400 (EDT) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 53E0F1415A1 for ; Thu, 16 Mar 2023 22:07:54 +0000 (UTC) X-FDA: 80576149668.09.2F23F73 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) by imf02.hostedemail.com (Postfix) with ESMTP id 7F26180009 for ; Thu, 16 Mar 2023 22:07:52 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=in34xBPe; spf=pass (imf02.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.208.43 as permitted sender) smtp.mailfrom=andrii.nakryiko@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=1679004472; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=oOALZKYk87ymZboEEVOkzREhSwRWC8GQ8w6I4E1YkJo=; b=bZiChDJyGGW8dDeFkP1sF7pslCJhkF6vK4Sx7zl8NCnGfZg9YigkX2oPzJZ4So1ffrXCJ9 E/OzkoRAxODSweb4y9hUFpPySCZh2r1Y9eICP3tJ5A2gZCGlN8QMeTeOiaDZrAR+oyMQ75 I2gNKwsHP3Gl8NJuQVv4DU2RPbxfUZw= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=in34xBPe; spf=pass (imf02.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.208.43 as permitted sender) smtp.mailfrom=andrii.nakryiko@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1679004472; a=rsa-sha256; cv=none; b=a1oWUylHz0tot8t2jeOKpGn/BJQPkBy1PYd4XoZamHy0zcY9bD5DwOVPokjc8RGU4YVJz3 wnichBRFYgajibOQ7m1apAkogLwwK6Gdbm1rHCm1GucQcIC08zgu9KU40uolxeRlUXgG4/ iC3fNIoiW8tM0pCuhMzIY+lvTl/Qxvk= Received: by mail-ed1-f43.google.com with SMTP id er8so1647360edb.0 for ; Thu, 16 Mar 2023 15:07:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1679004471; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=oOALZKYk87ymZboEEVOkzREhSwRWC8GQ8w6I4E1YkJo=; b=in34xBPeQYTEL3b+BKWYiDFJx3fjRjzM45nuAeTfdrrDD+SWWbSuLVByYQSPYEtyh/ LJkQvDM6AfBuXzaSQvLDL6bcHgVM/FajGW2t9QI7EO2B5nJmECSYxhcJUfEmnfjyfo6L 3qEh4U2HU4IryoVbYf3ZfYRktGLQXtPrCFHjvzPXNoXBsG10nnJQkG8aq3PiT9E2PNZS Uox6zB00WGxZ2BPU1pXkkyPJ2utVt8tc8SLQCDX5k0/F7Gefv6BTc7YsFqcZB9tQOWQh jlPZyIpvOlWniEoEnLA+2EAJ3OY3tCqS65xiSA2BTnfXirOh5YvXVccb+i3BAUfqbe/b zb3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679004471; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oOALZKYk87ymZboEEVOkzREhSwRWC8GQ8w6I4E1YkJo=; b=j472Sipc8W51vkf/tTOPJ+fhq8Iki4gKSND85EkBMjNxtSELdlnfFkgoXur9tgHgJq 8Ec89eXnV0r/Zsrxp9ZQX70eXw6MXX6HJXyB1sgXmf6iuKVX9bJRPYaucXPnpE8iRhL0 UeSq8tDtgY0yJUVWf0H58FdhNWXQrPxSzqasXEqi0NvrJcqYXq4FsW1OJk9JtahJTD+J 4G3ylHCRb3mFKLAz2Bnpt3JNOtmvedJg4FWC51wJy2cz3n//6PopChURybzw6vwitFK7 wco8lL1UkPLsZXBQPmrB9Th4WueZl/3PGUI6vGBKksgylCtm9ye48Lmz2XSA6XJEKmlq yyRQ== X-Gm-Message-State: AO0yUKWu22U/bAI7+tssl1Rrs8EU7vozOKOQ6vdd4P2S5qbRfy5ViOC7 28LL5PQo9wcoi+NkEIOYJ8ioN9y5u5AYiz4kKig= X-Google-Smtp-Source: AK7set9oRcqczZSug6uQ8e1BvxXTQIFidg+bqwd+pyGq8dOPEHDoU7I4CesioNRco9SN/0FMKqK741L01oMq1AIZHP8= X-Received: by 2002:a17:906:2b09:b0:931:ce20:db96 with SMTP id a9-20020a1709062b0900b00931ce20db96mr16322ejg.5.1679004470876; Thu, 16 Mar 2023 15:07:50 -0700 (PDT) MIME-Version: 1.0 References: <20230316170149.4106586-1-jolsa@kernel.org> <20230316170149.4106586-2-jolsa@kernel.org> In-Reply-To: <20230316170149.4106586-2-jolsa@kernel.org> From: Andrii Nakryiko Date: Thu, 16 Mar 2023 15:07:38 -0700 Message-ID: Subject: Re: [PATCHv3 bpf-next 1/9] mm: Store build id in file object To: Jiri Olsa Cc: Alexei Starovoitov , Andrii Nakryiko , Hao Luo , Andrew Morton , Alexander Viro , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Matthew Wilcox , 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 , Namhyung Kim , Dave Chinner Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Server: rspam03 X-Stat-Signature: 76s4j3gz5chbuep1akipdxi6jeymujqb X-Rspamd-Queue-Id: 7F26180009 X-HE-Tag: 1679004472-458295 X-HE-Meta: U2FsdGVkX18CQmKQOIwmEj7BumxAWYsU3aQMi8dQhJY++yF3Zm15K2Zp1jNKt3+CcGFc55T8ScZxfvZROqOtZQG4zoEeUVSj9efzkMyb/3hyoTOe+UwQfGu9zuWpRXI8meU9CGq28xFDbb1+EFXK5OMDxIJTbVIzb2auDp0e9afwPP3lxvORB216OCYnYCzMihSgaECL7n46jDyile43w7fwRXY4D+Z9FK27ewNJrwRs7NOr6uX3x8LarHQvEdVUd1TAdyLGyQWvhEZDjWhbjbg9lnAPDcxsJVEckz0aRXa2dS2Obnda58n3e4nAsOIWJ8xga9wmWjKaxhNFJVDn++js6Fc/aAiotRmSYLsayy4eSB0g2JOUrMX6gz3V4OW04uV+IMoHW9YG6smJDgOVED49qLrVl9umQd7DiGtrcq3akq8YYDvbgZvd4ok9BmT9QT8aVjciJbiX0OfVsHkpW4qoDsY7cwOWvQCAvbgFurYHeTGjC5ESU97NR4cjlsILHGKEoYIrWMv9ibzxWrGoBeIjK+xYJ8zdYRB3X0wzLf08ik4YswPZgFUg4vhA4/pKMs4VSuhv3IPkBzZ6jvCX12YCM4ZhghB8YKUn/TtSg3TcL5vi808jKTCojqADulloVcveseyNH4xv70SYcD8eY/gAGtha7YyYTWuVIRo0rUz3cMl4A6VaTD+U3l8IDxMzxJBt4CVwQAQvi/8tem0dIE1/Tz+1d3u6uFcB8u2Xr+PYwDHi+uCkb8FnE28+K/Wi2/wfAclqip9JPiM+TYzgFxnE5ZOKKQkKLwcxZRt6hf1TTiO8R4aHsFbuvYn1IzvNm/bpr1++SOCUvOV55kyj6lqld7j18uEXEyw6+VoeCfEWvs0K8Vxp60qfcCL0pqCLq96k2o9g0SqZMFeI8/DhFRo2ElfEjONEiST9q57w7ELCDyvgtaEIUdaYMlm1vQ+Uzgd4WbZgfyfwiqJwRGh t1jMjGwS XEoW2Zwux57C9j64ixPGxbzmTUdxnIBppUQOULkL9S597h+lgxbSCekC3yBpx18erh20uYx6DRg9jCIqWLxynt2Ot0enhaX5LEE8lqFcSQWSIwaiTaxisCAr1/uyTd8oHlqUZVK7RV7dhR9alUuAnbEdG7GSap9UXDglWmbcxZbBxn2A8LuX/8YA16LTF+U1Nes6Uh1UhZxd85XpuClBB0sm+NNz1CZJUYALDzb6Huflg5//2QHz5k6X7z4C2EG8MRc0B4BKlpRT1SWle9/ZRUMog7zSBN/WSWHaKJe841hLU/oFiWgBiKSzOr7Cq05PtdPYwHqz/Z82qYvmLGPKElgiD3OeBb58GW77v9++gjt4sXULtnnz3AzM0xCZZupM2AbTHAs3CL08vyEtlQHg4pqrHL3dWB2O5QF0tTKwqhCriYOcVAq1BwSOsf1ogJfTcXHN/vDt1tC4XjNnWqhKHEjBwxgyBIEB3gg1pFyTcN7Pj4/VCm6q2FvaZlNpfHOID29xXKmGT8Z/H1/jWJ2Xg4kXfTsVx/GZWRf3H87WI3A+Fx5Mblki4LB9/AEgperqWa/Qj 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 Thu, Mar 16, 2023 at 10:02=E2=80=AFAM Jiri Olsa wrote= : > > Storing build id in file object for elf executable with build > id defined. The build id is stored when file is mmaped. > > The build id object assignment to the file is locked with existing > file->f_mapping semaphore. > > The f_build_id pointer points either build id object or carries > the error the build id retrieval failed on. > > It's hidden behind new config option CONFIG_FILE_BUILD_ID. > > Signed-off-by: Jiri Olsa > --- > fs/file_table.c | 3 +++ > include/linux/buildid.h | 17 +++++++++++++++++ > include/linux/fs.h | 7 +++++++ > lib/buildid.c | 42 +++++++++++++++++++++++++++++++++++++++++ > mm/Kconfig | 9 +++++++++ > mm/mmap.c | 18 ++++++++++++++++++ > 6 files changed, 96 insertions(+) > > diff --git a/fs/file_table.c b/fs/file_table.c > index 372653b92617..d72f72503268 100644 > --- a/fs/file_table.c > +++ b/fs/file_table.c > @@ -29,6 +29,7 @@ > #include > #include > #include > +#include > > #include > > @@ -48,6 +49,7 @@ static void file_free_rcu(struct rcu_head *head) > { > struct file *f =3D container_of(head, struct file, f_rcuhead); > > + file_build_id_free(f); > put_cred(f->f_cred); > kmem_cache_free(filp_cachep, f); > } > @@ -413,6 +415,7 @@ void __init files_init(void) > filp_cachep =3D kmem_cache_create("filp", sizeof(struct file), 0, > SLAB_HWCACHE_ALIGN | SLAB_PANIC | SLAB_ACCOUNT, N= ULL); > percpu_counter_init(&nr_files, 0, GFP_KERNEL); > + build_id_init(); > } > > /* > diff --git a/include/linux/buildid.h b/include/linux/buildid.h > index 3b7a0ff4642f..b8b2e00420d6 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]; > +}; > + > 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); > +void file_build_id_free(struct file *f); > +void vma_read_build_id(struct vm_area_struct *vma, struct build_id **bid= p); > +#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 c85916e9f7db..ce03fd965cdb 100644 > --- a/include/linux/fs.h > +++ b/include/linux/fs.h > @@ -977,6 +977,13 @@ struct file { > struct address_space *f_mapping; > errseq_t f_wb_err; > errseq_t f_sb_err; /* for syncfs */ > +#ifdef CONFIG_FILE_BUILD_ID > + /* > + * Initialized when the file is mmaped (mmap_region), > + * guarded by f_mapping lock. > + */ > + struct build_id *f_build_id; > +#endif > } __randomize_layout > __attribute__((aligned(4))); /* lest something weird decides that 2 is= OK */ > > diff --git a/lib/buildid.c b/lib/buildid.c > index dfc62625cae4..04181c0b7c21 100644 > --- a/lib/buildid.c > +++ b/lib/buildid.c > @@ -5,6 +5,7 @@ > #include > #include > #include > +#include > > #define BUILD_ID 3 > > @@ -189,3 +190,44 @@ void __init init_vmlinux_build_id(void) > build_id_parse_buf(&__start_notes, vmlinux_build_id, size); > } > #endif > + > +#ifdef CONFIG_FILE_BUILD_ID > + > +/* SLAB cache for build_id structures */ > +static struct kmem_cache *build_id_cachep; > + > +void vma_read_build_id(struct vm_area_struct *vma, struct build_id **bid= p) this function clearly has a result to return, so why use void function and out parameters instead of just returning `struct build_id *`? > +{ > + struct build_id *bid =3D ERR_PTR(-ENOMEM); > + int err; > + > + bid =3D kmem_cache_alloc(build_id_cachep, GFP_KERNEL); > + if (!bid) > + goto out; > + err =3D build_id_parse(vma, bid->data, &bid->sz); > + if (err) { > + build_id_free(bid); > + bid =3D ERR_PTR(err); > + } [...]