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 A29DFC54E58 for ; Mon, 11 Mar 2024 22:06:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 27EB46B0135; Mon, 11 Mar 2024 18:06:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 22EEA6B0136; Mon, 11 Mar 2024 18:06:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 11DA96B0137; Mon, 11 Mar 2024 18:06:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 03DAE6B0135 for ; Mon, 11 Mar 2024 18:06:14 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 9725D140909 for ; Mon, 11 Mar 2024 22:06:13 +0000 (UTC) X-FDA: 81886142226.08.BC5BFD1 Received: from mail-pg1-f178.google.com (mail-pg1-f178.google.com [209.85.215.178]) by imf11.hostedemail.com (Postfix) with ESMTP id E911D40018 for ; Mon, 11 Mar 2024 22:06:11 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=jznlDYXM; spf=pass (imf11.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.215.178 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=1710194772; a=rsa-sha256; cv=none; b=XqrNPcdovhEdD09S1PYOCAMwsNH0K1/g1frWvXpwKjoxNhpO1jJXQbzRLWtjNlarBForra PQfe5aLKxAkUKmmiiObLbQsL2a3hgK2ftdj5emSHDC3JrsGP5IPjTjCR+Qf0Lf8v68dVXa +JlCtjka2EJSuOITKxP7UoWW0Hf3Yx0= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=jznlDYXM; spf=pass (imf11.hostedemail.com: domain of andrii.nakryiko@gmail.com designates 209.85.215.178 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=1710194772; 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=0Qcp5QyK9rbto/1BCfSkUkVWLd78NqgSgQTAk4vuvt8=; b=YVsveZYCvWaneHGQbtO2fb5daSB40bd5HJ8bgC6AlHdyXcLyZp4EYHT4/Y/e0qwAOGR++o gE1Om7NSohv2D/8Cjha++WUmz7KKha/Utg7UggNrNbJdr97J4JFhbdi4izbGTjSnwDtK4a bV7Lfv8cPfjZtYp5XvWdSWvlexrug4M= Received: by mail-pg1-f178.google.com with SMTP id 41be03b00d2f7-5cddc5455aeso2830074a12.1 for ; Mon, 11 Mar 2024 15:06:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710194771; x=1710799571; darn=kvack.org; 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=0Qcp5QyK9rbto/1BCfSkUkVWLd78NqgSgQTAk4vuvt8=; b=jznlDYXMAu3aQH5tk61PYB1g7q22ZRdYcjcJLAdcliaBgbFSTKdrJNa9s3TmmvjGef euaS97LlZfW1Pbn27lUT3r9zwXNcQuytmAUGqwGLQEFsauLvoXi3UxUJddD8hHbwfWyX MJuvXjsBiYIqu0Mrg6igm5iLekBwk71jSvjSXFH7vOh08sD3epsJ6HhXea7dHK96vFWM uc9+50fkd5D/ImAb5zEdNn5aQaodejjZqaDi5y4kDAkUcJhAkYsdHT45TakD/gyhQWkb UFsB5eBEVPMTJVrZQY+X92BavsJjcYd6q8U4UeeJxadw5QsBErUNTcWUr780Hzyl1V9Q FbIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710194771; x=1710799571; 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=0Qcp5QyK9rbto/1BCfSkUkVWLd78NqgSgQTAk4vuvt8=; b=XBg/uywPw6yUBKUu6xVjV7El7tI5YSRVTxhcYvU1MRQFjZqRTiWvaqiql1SVJB/gzr BIbX8DMqjQhaA5qU5X0ZGJ2AcTxtjg4JRW1B4ZsdcOmKGeaOCmu4qei2dIwCENwPBlu8 78sDqOYfpyDTiCveCWYku7o33DiiCbIiBGhZ6dBKGeA1Hxc0MM71N0eBNpNPgZB5C9A8 Vdpu5g9YN8AHQpv+CTLzR4TgEQKrDpRj+jowstotGRRjjmL0QUE2k52uq9QbGacIL+Ic LLHWxPsXCs/Rn9twZP4+3syjRyjufuVKx8NeiyMQM/T0U4vlOIqf7Pt0yP0EJOb89DCf HYlQ== X-Forwarded-Encrypted: i=1; AJvYcCUNAMzcf8hAd0EIJWvMDLpY5c+23ng4tc4oM0V6PXwYC7sPaDTEa3eVyXA9I+UbxfSkJlmfdoCGS5XlhK37pXpYkgQ= X-Gm-Message-State: AOJu0Ywj3zZ4/5HTzFqAcQIyZKtAf65O8RyXgFTr+E1b0D8D2ICby2s4 Dmd9x0kErdKbz5oQ1melxjD3TeU8RYBtUDIMD7SjmZFAI/kT8jl7NrYAMvrwcobeywAyXvcKK73 HFeXRoxkHdI4V+tL/pnPMZhZEyDo= X-Google-Smtp-Source: AGHT+IH+SHPX8ZZSQ4OueyyrIuxeMyckbMQMb/h2ENmEGjEmXftSlj3TXybp8Dez/vsZoDzP4UUPaAQD2mCz2lWRnWc= X-Received: by 2002:a17:90a:8b05:b0:29b:dc3c:a28e with SMTP id y5-20020a17090a8b0500b0029bdc3ca28emr4153148pjn.41.1710194770819; Mon, 11 Mar 2024 15:06:10 -0700 (PDT) MIME-Version: 1.0 References: <20240308010812.89848-1-alexei.starovoitov@gmail.com> <20240308010812.89848-4-alexei.starovoitov@gmail.com> In-Reply-To: <20240308010812.89848-4-alexei.starovoitov@gmail.com> From: Andrii Nakryiko Date: Mon, 11 Mar 2024 15:05:59 -0700 Message-ID: Subject: Re: [PATCH v3 bpf-next 03/14] bpf: Add x86-64 JIT support for PROBE_MEM32 pseudo instructions. To: Alexei Starovoitov Cc: bpf@vger.kernel.org, daniel@iogearbox.net, andrii@kernel.org, torvalds@linux-foundation.org, brho@google.com, hannes@cmpxchg.org, akpm@linux-foundation.org, urezki@gmail.com, hch@infradead.org, linux-mm@kvack.org, kernel-team@fb.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: E911D40018 X-Stat-Signature: 7epc19jzosat36rh6cayuqexju8hruwa X-Rspam-User: X-HE-Tag: 1710194771-686137 X-HE-Meta: U2FsdGVkX1+h2SfGiuirka9v1IwQ1xMOocDs435be890oZ4CBf0lhRW4vCwQrnE+b/VnoiGhBSvDqBZOYRKJr6xRUA7ClPA+lql9mInjCpMCk11j1dGrsT9S/xTnvQH7TOoF41Yn9Q8oQSYC5DB4WcNE7VGYR9+qP4wY/hpuv8chBXGfQkCR353PY+0yQkaoRUG+b+1eFYr5YOG/xQv3Z48wBO5DKAldwLSAqhtO+wv8MxtyUh7K7bakXL7mpry+sqdFSpQ7fYpgMtm8aOvrMXE9gRwRoJYbn/Y04h2PV8FT3oEbSS7S04rBgOykL+/BHsIZmSWSFnB3pKAlERxauE/Rs2C4s14MLVjOhbFO/K4ZT4d14+ehHOzTrZ3RHDlNkJ1Ng1jCLXuT8AjV6GFDa4k+nhoNyxxMi/ztp5IHW3MZNhguLFV96Oo4Pq3PSO0HvzsiUW/Xv4aIEzHyOIwzJKvww1R4lV/r5IBotsUS9UNmyj6i7r9qDwgFDRxJxfLSNKWxM3LwTU1hYU4pAcuyE61e/8dvtpLHuAGlTmAiirxkmH9HEDmi5MH5hlBGd4pc1oDrTNE6dO9M/AtRf+mWVffNLIC3TKPKTBJ/YlBLmHXfYNaHshaTpMQFwHtmNxKnRMTCE6lKroFmK//3UQizroFZdBf43s0m8P/QE7o6MCrjC4nf4wgN+OzaGBQngtAy72xL+7kKlULa2zWX6rNvkz50e3G29XcNMCmOHEBfbzTTKEHjleLdW1H2eFIwMK8exOlGqCmNA+t52eOxHFqahJLlaMLk7b0T52UH0HOOEaQGdj8FyrTVzoJx8fkFwCypoojiuEZZRLEJ0ey/iKIpG0tPums0ZCW9S1lomCzhyvks3VZYZP9MvddNVYZS/4hY2iPV3OZGCwYjDHTc7tE+yG349xnB+DwEMfyKIsuIu0cmJk6Zj2tbOtkxu33ri/sfuxqqgDENvZgVnr4uCaj sAWWidO6 1smRaQCDZQ9z8QdsJpDC++BkX2rrzsJ3i7GQ1qsN6GLxCN7gu/5RL2Ek8D1MOY/LlxK9npfDD284rMmxoPB6r0kkb65cjXU4+nLawfPbON8KdzojJf6TvAbGmwr3IFrJazgHG5Xa51tjzS5Jimim9Yrm4uCVHfs576Kh7mD2rQ5sZ2bcFbqwe1wiXRQ== 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: On Thu, Mar 7, 2024 at 5:08=E2=80=AFPM Alexei Starovoitov wrote: > > From: Alexei Starovoitov > > Add support for [LDX | STX | ST], PROBE_MEM32, [B | H | W | DW] instructi= ons. > They are similar to PROBE_MEM instructions with the following differences= : > - PROBE_MEM has to check that the address is in the kernel range with > src_reg + insn->off >=3D TASK_SIZE_MAX + PAGE_SIZE check > - PROBE_MEM doesn't support store > - PROBE_MEM32 relies on the verifier to clear upper 32-bit in the registe= r > - PROBE_MEM32 adds 64-bit kern_vm_start address (which is stored in %r12 = in the prologue) > Due to bpf_arena constructions such %r12 + %reg + off16 access is guara= nteed > to be within arena virtual range, so no address check at run-time. > - PROBE_MEM32 allows STX and ST. If they fault the store is a nop. > When LDX faults the destination register is zeroed. > > Acked-by: Kumar Kartikeya Dwivedi > Signed-off-by: Alexei Starovoitov > --- > arch/x86/net/bpf_jit_comp.c | 191 +++++++++++++++++++++++++++++++++++- > include/linux/bpf.h | 1 + > include/linux/filter.h | 3 + > 3 files changed, 194 insertions(+), 1 deletion(-) > [...] > +static u8 add_3mod(u8 byte, u32 r1, u32 r2, u32 index) > +{ > + if (is_ereg(r1)) > + byte |=3D 1; > + if (is_ereg(index)) > + byte |=3D 2; > + if (is_ereg(r2)) > + byte |=3D 4; > + return byte; > +} > + > /* Encode 'dst_reg' register into x86-64 opcode 'byte' */ > static u8 add_1reg(u8 byte, u32 dst_reg) > { > @@ -645,6 +659,8 @@ static void emit_bpf_tail_call_indirect(struct bpf_pr= og *bpf_prog, > pop_r12(&prog); > } else { > pop_callee_regs(&prog, callee_regs_used); > + if (bpf_arena_get_kern_vm_start(bpf_prog->aux->arena)) ah, I guess this is where NULL is expected?.. But isn't `if (bpf_prog->aux->arena)` equivalent and more straightforward check? > + pop_r12(&prog); > } > > EMIT1(0x58); /* pop rax */ > @@ -704,6 +720,8 @@ static void emit_bpf_tail_call_direct(struct bpf_prog= *bpf_prog, > pop_r12(&prog); > } else { > pop_callee_regs(&prog, callee_regs_used); > + if (bpf_arena_get_kern_vm_start(bpf_prog->aux->arena)) > + pop_r12(&prog); > } > > EMIT1(0x58); /* pop rax */ [...] > @@ -1147,11 +1276,14 @@ static int do_jit(struct bpf_prog *bpf_prog, int = *addrs, u8 *image, u8 *rw_image > bool tail_call_seen =3D false; > bool seen_exit =3D false; > u8 temp[BPF_MAX_INSN_SIZE + BPF_INSN_SAFETY]; > + u64 arena_vm_start; > int i, excnt =3D 0; > int ilen, proglen =3D 0; > u8 *prog =3D temp; > int err; > > + arena_vm_start =3D bpf_arena_get_kern_vm_start(bpf_prog->aux->are= na); and I'm guessing here you didn't want that check... I'd probably go with explicit pointer checks, but ok, it's fine > + > detect_reg_usage(insn, insn_cnt, callee_regs_used, > &tail_call_seen); > [...]