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 05E84EDE99D for ; Tue, 10 Sep 2024 15:40:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 5794D8D0085; Tue, 10 Sep 2024 11:40:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 527DC8D0002; Tue, 10 Sep 2024 11:40:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3F0348D0085; Tue, 10 Sep 2024 11:40:01 -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 21C298D0002 for ; Tue, 10 Sep 2024 11:40:01 -0400 (EDT) Received: from smtpin25.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id C6E21A05B1 for ; Tue, 10 Sep 2024 15:40:00 +0000 (UTC) X-FDA: 82549239360.25.445EA4E Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) by imf20.hostedemail.com (Postfix) with ESMTP id EB9691C0008 for ; Tue, 10 Sep 2024 15:39:57 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=b8NizPNa; spf=pass (imf20.hostedemail.com: domain of jannh@google.com designates 209.85.208.42 as permitted sender) smtp.mailfrom=jannh@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725982695; 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=9XmuAJaJABZEw22g1YelxW3d7dMoKbStEXHVKcdE10Q=; b=Ak3MNY+e69O+J/bvgPgMZ0dSmasXipb1qeW8FC0qv8+BJLwIiettBo0AsYiMXDRSuXtLEO dP9xx3n1TTIQ8BK54kJviAePUeviU1/gljT6+yZxtRSDW4XBjPlRSZT3YT6sVVkN/J+OQg oRkK1s+n+Tmaf+pqNgNstncn0qH6epg= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725982695; a=rsa-sha256; cv=none; b=xeCwjd2ET0Ygr7wxR4+XzhF9gMDG7prob4yiZo96gaZy4lNsF/54WlUpYYt15cWi3AXESp WtLKnQtRjeE9TNtKKlSe8NMrchGWGy9OCxGouH1jkQs1ziSGnlk9kVmEOYHVQyvdsbvvFy EBodcQQORZx1rJs5IVv7duLBAdOTOiU= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=google.com header.s=20230601 header.b=b8NizPNa; spf=pass (imf20.hostedemail.com: domain of jannh@google.com designates 209.85.208.42 as permitted sender) smtp.mailfrom=jannh@google.com; dmarc=pass (policy=reject) header.from=google.com Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-5c2460e885dso22190a12.0 for ; Tue, 10 Sep 2024 08:39:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1725982796; x=1726587596; 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=9XmuAJaJABZEw22g1YelxW3d7dMoKbStEXHVKcdE10Q=; b=b8NizPNaqWxWbyTOxq4h2+Er1Sc0xIpdBjhb4+0kxY6zL++mRuwDaBYmqKhmz042IM TDtiXSmEtcKUOX8/34MY/qt2NjgHUiu+uJXoON6Na2BL3FqSAi9Quq0JAC8tWtLT1X5m D+H40nw8SHVUT6HmjGc41xCF5viswSE2uCtj00MxVXdNclPGjEyHXLXS6E5qHumMFiLw tbvndE0Z4rLTOihR2I124VoPeJQ2KfEjxj5jPov/YQJoe5/n5ZDL7EsHSNnOwl5hckhr hoZkAoc8u3NtwadH8reZA+VubiUaABw+MBhiifdRFE1dpGs2UiolbMRpjDkzbI6fkj5g PcGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725982796; x=1726587596; 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=9XmuAJaJABZEw22g1YelxW3d7dMoKbStEXHVKcdE10Q=; b=Wp4RosvYCvYjLfsk/YJV6+AmE1TV47uwUYonxgQQ/wPOvYw8w2R4F2QMGCiYzeRhCt 3HQufMocnoEKP0BOqw96V3tk+etFk98Pny+1HcGxoUMVPUPXmu1HTydCpxhIZODVgSay vUJHX5KqfLHV9M6QrW4eUo7TuK6DWt3KhaaANO3BqPedJjL67ehupoqinyFwGCnQi++P 9yR29x56OlG5htk+X6tFq7tKoyE6dul5B8RJnt1xA2dpnGTZa4o3wT3GiHSHC4+az/E7 5vXnfI58D6p9E3v033BxPzjVtluCh7fschQ6ma/f6XjNXv7DmJRvXokJPRJMVGc5nfQI bhHg== X-Forwarded-Encrypted: i=1; AJvYcCVrRF80GJKPoQmoGMsWYGgLdIP8ItNlu6RGbOSgb5rbWJRnZ4dJtQzPLAzjcBiJbx8vUufRCucLFA==@kvack.org X-Gm-Message-State: AOJu0YwdEPSurbVFbD819s5+V/k3jAbFBqM9C+HVKv7491kyzoBExZRW lCVBIUUFvv4Go05MPGR1mtCPIYouWC9kZ9QxUiiyG6JN8R1thwUbNGjTUyRdUdfj0GWL+AZkV6y plN22qZf++kDlk/YWfCkJc3NIT5VocMB02DNM X-Google-Smtp-Source: AGHT+IHa5P3FNcyxK3dfRD8l0hNbFtul+gz/5r6bBqUtFkIT1a2ttnvtee4Q932fZkZ5xf7hLJPLJm4n3vKcBRhcD4g= X-Received: by 2002:a05:6402:35d4:b0:5c3:c2fc:8de6 with SMTP id 4fb4d7f45d1cf-5c4040d4f38mr311527a12.3.1725982795248; Tue, 10 Sep 2024 08:39:55 -0700 (PDT) MIME-Version: 1.0 References: <20240906051205.530219-1-andrii@kernel.org> <20240906051205.530219-3-andrii@kernel.org> In-Reply-To: From: Jann Horn Date: Tue, 10 Sep 2024 17:39:19 +0200 Message-ID: Subject: Re: [PATCH 2/2] uprobes: add speculative lockless VMA-to-inode-to-uprobe resolution To: Andrii Nakryiko Cc: surenb@google.com, Liam Howlett , Andrii Nakryiko , brauner@kernel.org, linux-trace-kernel@vger.kernel.org, peterz@infradead.org, oleg@redhat.com, rostedt@goodmis.org, mhiramat@kernel.org, bpf@vger.kernel.org, linux-kernel@vger.kernel.org, jolsa@kernel.org, paulmck@kernel.org, willy@infradead.org, akpm@linux-foundation.org, linux-mm@kvack.org, mjguzik@gmail.com, Miklos Szeredi , Amir Goldstein , linux-fsdevel Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Stat-Signature: ekzr7a7iskhb8rhwyi7oht8f8w3htn35 X-Rspamd-Queue-Id: EB9691C0008 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1725982797-129870 X-HE-Meta: U2FsdGVkX1+Sx7sSSDe7nezK8Mu5awZUZh6bjAW5/Cbw5c/xS9OyiDsi18xbf3DEEvBsHDURQXyPXHSXNP2zT2zVBx0I9rVTqCcbV6GyuZykFiiTA9Jkym6zppcq/TcV8ouDyVt+ThgGQMhOR6myo9h8N1i6ccR9/tnMipb3pJEOAkcK/4sOK5Ke/3qszbFbomLMpT9UktZDij37GpVfLt9k/3kyQvVbUes6MmeqBr/dGhsTNc92/fNmz6k8jB6XLtZc4LoosZ5kQl1SlyOoqCtykeEYoynAjRBldkI4APci4pt3Wst1iz6hKOOdmqqv6piX8vH6uAX1aCMoh/Xm9QfQC8jf7vEPzGd8819I/qW1sowVf7jHE9so0bWXnPh4qlRMvM6oHBYWf004vcDQcG/dDvBra8RuRfdqkvLfQY9H92LBfhH50cY2/BqthVY00P7J+mqttv+EdoaH/GX9bpUdxpOIv6dH+9Jg4I6gH6Gk3+K6wprO+jCzdlcA63xTRWOpjZz4EJS6du6Xf9X8TBL4rCbtWEG6qIdQxpXlpb9grtiYdy8gWyKZ4xxGJ5w6v52ZqQjK1Ll67AqF6DXDjUTITNpGG7Y7tvM6FI+nsNWzICeg+qbwbmV5dMZkv0JXp/ujIbsoLB/JPHB0Ny5Uuot+fun7nCYN3rECdvRw3n0iIXKoUWkVN6xfS9E+/FPoI8dOiWhHNGVyOF4aIgvcxwNkShfAftNmDgoWH0b75if+I9cyXcaUqoA51zyNVd01V6TraA5/yJIJC/Zt+1VyvMC1/Ed9HqTpBwIF9/9Hl5EdGNBm6YOm4K0rvCDqg1p7QLgRY5LWAtBStydbAEpqrAWxHgQdFdDaBCHRPPLP8REvY0Qopr8tWH9C5PqoRS8tF45Ia3PqnGgMlzjp0HJSx5B0MkeRKNJRjKswdQbwnGhtamfIxnQoj1nhUeclrDmQRLwb/YACMSssVVeUQAv 7uUlH2bQ axZeaczji1JrzVy79aE1yQGRZxZL81sTZkPbVxTQecsYhzm5yYyv40iHMNtzL/3q6k0WiJrW3vRYDIWI0OEDvkKKtwx0Uleg7hsq8jdJbU5iPhb6je6hzP0etPAepx2rtsYbs6rZmR8z0C2XI7WJAaPX8HPuEEw0Vs66ZDWxX5bZAr1gnO7ym6gYBSyKjiJqAj37WFSjkYvsXuVeyvjCtxFafQ9ppTZbToUt1TbXSDCFbjiFmN3+ap+uO0BIZVIvRjd5zpSyUFk3O5IyJ+9jCQn0gLsDP9iHodSXNkiIklzMVxu3MP3gy5zGODyGjp1vdV2+7GuFAuxTMoOBpRFeUHqRIfA== 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 Mon, Sep 9, 2024 at 11:29=E2=80=AFPM Andrii Nakryiko wrote: > On Mon, Sep 9, 2024 at 6:13=E2=80=AFAM Jann Horn wrote= : > > On Fri, Sep 6, 2024 at 7:12=E2=80=AFAM Andrii Nakryiko wrote: > > > +static struct uprobe *find_active_uprobe_speculative(unsigned long b= p_vaddr) > > > +{ > > > + const vm_flags_t flags =3D VM_HUGETLB | VM_MAYEXEC | VM_MAYSH= ARE; > > > + struct mm_struct *mm =3D current->mm; > > > + struct uprobe *uprobe; > > > + struct vm_area_struct *vma; > > > + struct file *vm_file; > > > + struct inode *vm_inode; > > > + unsigned long vm_pgoff, vm_start; > > > + int seq; > > > + loff_t offset; > > > + > > > + if (!mmap_lock_speculation_start(mm, &seq)) > > > + return NULL; > > > + > > > + rcu_read_lock(); > > > + > > > + vma =3D vma_lookup(mm, bp_vaddr); > > > + if (!vma) > > > + goto bail; > > > + > > > + vm_file =3D data_race(vma->vm_file); > > > > A plain "data_race()" says "I'm fine with this load tearing", but > > you're relying on this load not tearing (since you access the vm_file > > pointer below). > > You're also relying on the "struct file" that vma->vm_file points to > > being populated at this point, which means you need CONSUME semantics > > here, which READ_ONCE() will give you, and something like RELEASE > > semantics on any pairing store that populates vma->vm_file, which > > means they'd all have to become something like smp_store_release()). > > vma->vm_file should be set in VMA before it is installed and is never > modified afterwards, isn't that the case? So maybe no extra barrier > are needed and READ_ONCE() would be enough. Ah, right, I'm not sure what I was thinking there. I... guess you only _really_ need the READ_ONCE() if something can actually ever change the ->vm_file pointer, otherwise just a plain load with no annotation whatsoever would be good enough? I'm fairly sure nothing can ever change the ->vm_file pointer of a live VMA, and I think _currently_ it looks like nothing will NULL out the ->vm_file pointer on free either... though that last part is probably not something you should rely on...