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 35DDDC48260 for ; Tue, 13 Feb 2024 22:21:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id BC6208D0011; Tue, 13 Feb 2024 17:21:09 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id B760B8D0001; Tue, 13 Feb 2024 17:21:09 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A177A8D0011; Tue, 13 Feb 2024 17:21:09 -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 8ECFC8D0001 for ; Tue, 13 Feb 2024 17:21:09 -0500 (EST) Received: from smtpin28.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 63B7E1A0D36 for ; Tue, 13 Feb 2024 22:21:09 +0000 (UTC) X-FDA: 81788202258.28.B830030 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) by imf12.hostedemail.com (Postfix) with ESMTP id 53EB540011 for ; Tue, 13 Feb 2024 22:21:07 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=C6X7zXRJ; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf12.hostedemail.com: domain of alexei.starovoitov@gmail.com designates 209.85.128.47 as permitted sender) smtp.mailfrom=alexei.starovoitov@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1707862867; 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=CyEiM7uR4OLHXno74RQU8w/bYjz4MAG5Dd8MilyY158=; b=QzTukRfQap8iK21I/mZ7EsW28tubX4xM+DjK2DbiWWRfXjdH7S7nN4tGKrtjxFIwIcqMa5 UwR1by7r1GrpHHyt2HDoAo24KoGCrzil7QI88B7Kt1DmpKD33QYo3mgnWb8iMV2Gmc2+87 VA/7kN+tw3Q8j4nALsToS2xZWUNIobo= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=C6X7zXRJ; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf12.hostedemail.com: domain of alexei.starovoitov@gmail.com designates 209.85.128.47 as permitted sender) smtp.mailfrom=alexei.starovoitov@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1707862867; a=rsa-sha256; cv=none; b=P49ygTwV14mv9tMEuoTRwqcS5q5Z8HQKicsXV0oHe85CyU+hz4rPns2xw5mbTVLv6yUa/Q d4zQTJorJ7qqoiafl/MVzQSOLt1TZ5T3asjKriHr2A3n3F1Yl00h0VMbtAt8c0FGCNCK/T pL45lea7h9FiWaM8Ylmg3vvb+X/UB4s= Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-411c93e1cd8so1150275e9.0 for ; Tue, 13 Feb 2024 14:21:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1707862866; x=1708467666; 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=CyEiM7uR4OLHXno74RQU8w/bYjz4MAG5Dd8MilyY158=; b=C6X7zXRJoHzZEfqfKrDY8MQuGvEtEhC0KhrCnEuHX2bQoK/LP25W0qvOColhVtyDUT qTxXmOPT0L5zmsgPAfmlJayFp1Cd3sL83O7+8qnhFNl8apcLFRM0k27mv1zYm7KMLQC9 LgDgm4+FwQ+IYJQ6XW9o8qo488BZZlEeg3ToxtQb12wPgFM8WcdaAfXzs6w3jA7FQLvB 9PsYObfSlzuDV1Ut5tx45ck3PW8o6EVAD/Yb/hUtCFWMrOACwhzPZ0TEdii1RUAzeqJS FiHhQ27XW4A0ZDAxpWRo0P/75kDrTKJrFgUBSdkbiqbtUx23hdpurT0e7sVq+OG6+L4t Bgww== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707862866; x=1708467666; 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=CyEiM7uR4OLHXno74RQU8w/bYjz4MAG5Dd8MilyY158=; b=rj6eVbKI1f5j9yPNZf73/HFuyUeExz0QGCPNo0MX7q3UI550ADSp+1Zzp1B3hBCmtr Z2xBp04mciA4BdL0H3LqFTwu6twdWSw9XWB836LjAwOc5LPPFbjMFG2bg5hEZw/IYzYd P3lrWAyVW1OyIUPtjJG9qWtV55UHzmYV2mC4Itvg5U7SaPuLCZvXQUAk3EkBX6bj5CQs GTm6LpD5g0CUQXx0BwzktEoykrvAroXLB7jiZu8Qnz2y23kL6foyq/a2xu1HRFicS6GJ Q4jxqRiysJLxFeDOfPDAM28kvvEcVEryZBJjiIk3+FoYckb64kizpG+1MBNzUmQTHkJE t5Vg== X-Forwarded-Encrypted: i=1; AJvYcCWSKrhhMh0Ws0Yi0DMxmDRzHvbY8zVH3fByuefKWfvGwYKRaJwZUxRRp3Z//vunhUFKD6SZJRjs4bQmrL3fvBj0OFM= X-Gm-Message-State: AOJu0YwT2gbPedFTMNb6JR+mSSqr6Nzn7mxaC2J4KsrQr5hdAI4V4u+Q qqde8En5OQ7W7a+NhkEEDUa7KwkYyyNHA/lVfgiHg3xNzjkcChjpRSwBFxGMu0CGTWPdeUaQYyH hPtTSnRnkGH9GwGP1MMLzTwRIVn8= X-Google-Smtp-Source: AGHT+IGOKfdd+q+Y9Wac9kMWkeEwI/U40khcn1iHzpEWA3/HDYRmvAl6LtdDs5WYsFFxiFCIceEtCT5OQY8CjwZLc5U= X-Received: by 2002:a05:600c:3590:b0:411:c45a:3914 with SMTP id p16-20020a05600c359000b00411c45a3914mr127994wmq.3.1707862865716; Tue, 13 Feb 2024 14:21:05 -0800 (PST) MIME-Version: 1.0 References: <20240209040608.98927-1-alexei.starovoitov@gmail.com> <20240209040608.98927-8-alexei.starovoitov@gmail.com> In-Reply-To: From: Alexei Starovoitov Date: Tue, 13 Feb 2024 14:20:54 -0800 Message-ID: Subject: Re: [PATCH v2 bpf-next 07/20] bpf: Add x86-64 JIT support for PROBE_MEM32 pseudo instructions. To: Eduard Zingerman Cc: bpf , Daniel Borkmann , Andrii Nakryiko , Kumar Kartikeya Dwivedi , Tejun Heo , Barret Rhoden , Johannes Weiner , Lorenzo Stoakes , Andrew Morton , Uladzislau Rezki , Christoph Hellwig , linux-mm , Kernel Team Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: 53EB540011 X-Stat-Signature: 39r3jfd63xdc3fsbahsawo8qg9omwmqa X-Rspam-User: X-HE-Tag: 1707862867-511010 X-HE-Meta: U2FsdGVkX1+R0iab9Tq4B3unj1v0FDvNxoMwj1Sd54ctrCfaQ2r3EUAgwWAr8bXZcQaq+4uVENDUstVygnDtk3n7PmxNt9zNjsElzz7MNMqLzAm7RrOp2m3wvmaNbBMRVScv4pXJai6y8wEWYOewzy6hNs3pQ+GvnVIAf12bZELC1pRi1vjSHR3e2I7poZ68qAJjQ0r3MlVsDR/5VFCuXr+Njisdy2oW4VylkXBvAqtqRdJZOAH6GO4Jou7qWjpD9AGHGhT4Vb29/RvqG4RS5Wm7VNUYapsx82boFqxYmljddmvajIifPslTymhlSRV+Fu8D75P7y5t2qn6NE4hiOPrpeD6brFy5+zNKDCeltMYuw2nOOf04XHsfasLNsafkPtNmZsedbWHRwuVQwwtubBIqS03Vtr7AkEAR6SiMBuA/QOov2NLqz0MrWVF73BvIPQhtJZeAhUtXmR3DIbkhlJgwNSLmH2opys9DUOu1CpIWiX9WChn16Zr5Fk/dqHgP2FZP7C/aVtW2YF6Wc5gJATlG5wZbj/dFqgHezor2S5o5g1kZwUnUY1eVlHEGYKnWu+Fgf+B53ohNMQ2bsU+vX62FQGKIoYZZMbdJBEZhuHiPdVk2tL8GoGezIAxTXF/vB85vQw7toFl/gG6stPsoqzZKlEPthDOi5Dzi922Z9AcIoTi8Q+jpb4hrHoxZbQlbiUlBauznwVnn8RAzIgEBqQ0Y5IvtEkuzEA7EKVq95On4i0yEWGC4eCYfPtPdnH3WT08Ccsftl37BoSpqGmNN20gzhI05zU4oRI4nJg5615OoD7JsQS+d8+QuT+WALhsGZG+XiNg13UQv5zmdg/R5jeBMUmDKef7Q+47cLkoj9r1rCc10Lb93k0di6Q+V+FksPMJhImc0CcC4kaPZbYjbkyNfFQ2IAH0/biXZbIAkRWlADW2k3IATv5pZGVpIL9vldiyKA+5A+njiezu7Xdc uGWMknX4 ss5KAooFQWet6g6THOyHQCPvuy6Mp4YSxN87vE1Ljb2zBhZwzrG8KTTnOfrZIiAz/1yt+izfS8P5aH18wmOS8ayQXWjDqA0+9atOE8iPlK4FqVKx2cZjEx1Vqzb4HjXJbu5A8Pk1EjTbdtNV9NQxoHMszr/ok+gQDKHnxgLwfyt8b/XqBDLZfoF2pNKfqXCnGtREHmAVC4Ahrcfw7e7HwJbi35Bq2WfoCtodS0U1syzwozkXKK5MJSZr54F1CcO0dZhWcIAevqrXqrzuSM1fZXBqqjwePrLVj1BtiJ7Ul38+FZVUQNIOoMJ/7orMUM45w9xXiXZ/Y7k87EvWOg3r+oUP/KY5OSuHte1NEl3sTlFJvffzY6EinjECzgxx5EkNcerK5Gn3W3uT3GB5YUxcptc24anzs36Yg1hUvzuxHMEsOd84V7GDGt84S/L4rFdKUEWG7PESXdiyX5do17bdALaeZFDQZ5yu2yTa8WBtS+cbp5N797+fXsSFBgHMoNJOA5KDX X-Bogosity: Ham, tests=bogofilter, spamicity=0.002926, 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 Fri, Feb 9, 2024 at 9:20=E2=80=AFAM Eduard Zingerman = wrote: > > On Thu, 2024-02-08 at 20:05 -0800, Alexei Starovoitov wrote: > > From: Alexei Starovoitov > > > > Add support for [LDX | STX | ST], PROBE_MEM32, [B | H | W | DW] instruc= tions. > > They are similar to PROBE_MEM instructions with the following differenc= es: > > - 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 regis= ter > > - PROBE_MEM32 adds 64-bit kern_vm_start address (which is stored in %r1= 2 in the prologue) > > Due to bpf_arena constructions such %r12 + %reg + off16 access is gua= ranteed > > 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. > > > > Signed-off-by: Alexei Starovoitov > > --- > > It would be great to add support for these new probe instructions in disa= sm, > otherwise commands like "bpftool prog dump xlated" can't print them. > > I sort-of brute-force verified jit code generated for new instructions > and disassembly seem to be as expected. yeah. added a fix to the verifier patch. > [...] > > > @@ -1564,6 +1697,52 @@ st: if (is_imm8(insn->off)) > > emit_stx(&prog, BPF_SIZE(insn->code), dst_reg, sr= c_reg, insn->off); > > break; > > > > + case BPF_ST | BPF_PROBE_MEM32 | BPF_B: > > + case BPF_ST | BPF_PROBE_MEM32 | BPF_H: > > + case BPF_ST | BPF_PROBE_MEM32 | BPF_W: > > + case BPF_ST | BPF_PROBE_MEM32 | BPF_DW: > > + start_of_ldx =3D prog; > > + emit_st_r12(&prog, BPF_SIZE(insn->code), dst_reg,= insn->off, insn->imm); > > + goto populate_extable; > > + > > + /* LDX: dst_reg =3D *(u8*)(src_reg + r12 + off) *= / > > + case BPF_LDX | BPF_PROBE_MEM32 | BPF_B: > > + case BPF_LDX | BPF_PROBE_MEM32 | BPF_H: > > + case BPF_LDX | BPF_PROBE_MEM32 | BPF_W: > > + case BPF_LDX | BPF_PROBE_MEM32 | BPF_DW: > > + case BPF_STX | BPF_PROBE_MEM32 | BPF_B: > > + case BPF_STX | BPF_PROBE_MEM32 | BPF_H: > > + case BPF_STX | BPF_PROBE_MEM32 | BPF_W: > > + case BPF_STX | BPF_PROBE_MEM32 | BPF_DW: > > + start_of_ldx =3D prog; > > + if (BPF_CLASS(insn->code) =3D=3D BPF_LDX) > > + emit_ldx_r12(&prog, BPF_SIZE(insn->code),= dst_reg, src_reg, insn->off); > > + else > > + emit_stx_r12(&prog, BPF_SIZE(insn->code),= dst_reg, src_reg, insn->off); > > +populate_extable: > > + { > > + struct exception_table_entry *ex; > > + u8 *_insn =3D image + proglen + (start_of= _ldx - temp); > > + s64 delta; > > + > > + if (!bpf_prog->aux->extable) > > + break; > > + > > + ex =3D &bpf_prog->aux->extable[excnt++]; > > Nit: this seem to mostly repeat exception logic for > "BPF_LDX | BPF_MEM | BPF_B" & co, > is there a way to abstract it a bit? I don't see a good way. A macro is meh. A helper with 5+ args is also meh. > Also note that there excnt is checked for overflow. indeed. added overflow check.