Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp12393imm; Tue, 10 Jul 2018 19:47:39 -0700 (PDT) X-Google-Smtp-Source: AAOMgpfyU0mP1ZzAQLLDMr20Cx0CMxfTWB6W6lKLvzQXHlP3Lhxp7C3IFaHs62rIE8/al3/nqK7C X-Received: by 2002:a17:902:5a4f:: with SMTP id f15-v6mr27042923plm.253.1531277259857; Tue, 10 Jul 2018 19:47:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1531277259; cv=none; d=google.com; s=arc-20160816; b=dPAH020z2cInV2E/sf0qX2vPncEC0Jpjdaec8gJeirw6cyiZVRhPZR1VPYuwq+dESz I/b8X3H/vCTcxU04Nck0ktg78Fdn089dBP0fsGFYFyHMeF/hzq4JcpBX9zhKyou3c9cr NwiiC9uXw2rZXXK7SuleylcDEg8DO/4CbaBxU73mY1xj2B3fU9sOaCVKa65PJ1/XToMZ x2MF6HHXTnkrpho+/+1hiQddQZa4R47jddj5pRgC2GNyiHLP5wFtdN9P6zlqN3hIo/In GcCNgHHNerspylTNFemy5vcdONMdie11TP6IheklwcRzaPFNRG5cC8bgcg7F1gqgeMLn 5rnQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature :arc-authentication-results; bh=x9zUd0heuvaub7AywUX1CUNG3utrAq2Q+71j4G0/TT0=; b=lAw3YmnmjNpsFU8BDYvkgzlb0bIrQ1eyXMd7UCrk+jV0AczZsT//6LexS48csoH3eV 0jPaDkUrsMDdowJ7ECVE+WvjL9fUAalWmFawhQHzBzl64vcvhQBLuXMUsBL5vwytux/w QBEYd+tfsZSN/gSCRYvXmPc/SkTvPe7hqd/Rnh8gcuEv1mKQBHtHkXJ6bsH1G77yzu4q w6Pjf5mrHTGkjfasq6dnQOTSljtRCX39qsx1FK253cRV5c3igm2igY0EANaNRyKPsk8+ kQpD6mbM6SdC8cSc4y6BGI23MM/TCmYupyUAF5Pt5I+VcUFcNv7ieuaHCFv0SnzA9wrV MtGA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="FJMe1/Pc"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id n21-v6si17546942plp.31.2018.07.10.19.47.24; Tue, 10 Jul 2018 19:47:39 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="FJMe1/Pc"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732587AbeGKCsf (ORCPT + 99 others); Tue, 10 Jul 2018 22:48:35 -0400 Received: from mail-wm0-f68.google.com ([74.125.82.68]:35525 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732393AbeGKCsf (ORCPT ); Tue, 10 Jul 2018 22:48:35 -0400 Received: by mail-wm0-f68.google.com with SMTP id v3-v6so902179wmh.0 for ; Tue, 10 Jul 2018 19:46:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=x9zUd0heuvaub7AywUX1CUNG3utrAq2Q+71j4G0/TT0=; b=FJMe1/PcdwM3CHCFAR1Bl/xMmWiXeG3pBeqoiCJ4ENWfLgyyfZR0H++K5RoiWnirog amoTblszRaZ5RzCiyuXvfbjkqDdGomWrKtm9B6CPYhZigzKeaX0vX7LxQ2Mn/w5OwJQv Ji4UTIgf+anDTf1pPYq8twewNX14KtzeQigSiAgcHafvfoJ1e7cTRojfyYaijyKA8vP8 ljI4IgxB9N6jEjc8I4XlbdlGDA9RlPSmq0scFycCeXoNDyMflRMzVeJ46UBcmVQdKhuY VskppXpn3HS2syjNG7ulsjjHhmMUidAhk9OEN3Y+102mctci0e82Pi3LohCrdQ0ROOPP g7rQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=x9zUd0heuvaub7AywUX1CUNG3utrAq2Q+71j4G0/TT0=; b=fKKae2jICDmMqhZj5fHQR3YY/ML2xWsq3xxp6Do5JVSnARNFcCHWahmQ58yfoTDlT9 DV9T3dxFThMqZXTyvAhSckM7Z2YI84Fn+ENoZ0QsrxOCiDWuW9IUN0rv4C8TeRsgPHB1 f4CIXVV8pLYUk99jp8oKJ3AySsqULGdSAGRde5UWmb4aq3Pn/eTcXKfjsd3GiRbvsZ45 t0mh8RWhVWkXoYsA886CNrInThd6dy/Ql8ypC/yFh3sZYMc3WTirNjtUoBv9vmqaikzd ky0kf7sD/1NLv2FQ+8oseFURiqfk69xUetWWKYsF1wj50eX1BnP3km0bIaFl8SANuBet 7vMw== X-Gm-Message-State: APt69E1ssb1jJAh07VWR4N+OIsVfZb7Tc3drt0i8VzNDkG2U9+JhF7mp xWlNid/UfJq5/gsulsi91ctP8h9wtub37vmM33O8gQ== X-Received: by 2002:a1c:1c92:: with SMTP id c140-v6mr14226170wmc.155.1531277191221; Tue, 10 Jul 2018 19:46:31 -0700 (PDT) MIME-Version: 1.0 References: <20180707015616.25988-1-dancol@google.com> <20180707025426.ssxipi7hsehoiuyo@ast-mbp.dhcp.thefacebook.com> <20180707203340.GA74719@joelaf.mtv.corp.google.com> <951478560.1636.1531083278064.JavaMail.zimbra@efficios.com> <20180709210944.quulirpmv3ydytk7@ast-mbp.dhcp.thefacebook.com> <20180709221005.sintsjkle4xpkcyk@ast-mbp.dhcp.thefacebook.com> <20180709223439.uc2a6hyic35inwye@ast-mbp.dhcp.thefacebook.com> <20180710235252.mioihpgtu4n3syaq@ast-mbp.dhcp.thefacebook.com> In-Reply-To: <20180710235252.mioihpgtu4n3syaq@ast-mbp.dhcp.thefacebook.com> From: Lorenzo Colitti Date: Wed, 11 Jul 2018 11:46:19 +0900 Message-ID: Subject: Re: [RFC] Add BPF_SYNCHRONIZE bpf(2) command To: Alexei Starovoitov Cc: Chenbo Feng , dancol@google.com, mathieu.desnoyers@efficios.com, Joel Fernandes , Alexei Starovoitov , lkml , Tim Murray , Daniel Borkmann , netdev@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Jul 11, 2018 at 8:52 AM Alexei Starovoitov wrote: > > we need to make sure we have detailed description of BPF_SYNC_MAP_ACCESS > in uapi/bpf.h, since I feel the confusion regarding its usage is starting already. > This new cmd will only make sense for map-in-map type of maps. > Expecting that BPF_SYNC_MAP_ACCESS is somehow implies the end of > the program or doing some other map synchronization is not correct. > Commit log of this patch got it right: > """ > For example, userspace can update a map->map entry to point to a new map, > use BPF_SYNCHRONIZE to wait for any BPF programs using the old map to > complete, and then drain the old map without fear that BPF programs > may still be updating it. > """ +1 for detailed documentation. For example, consider what happens if we have two map fds, one active and one standby, and a map-in-map with one element that contains a pointer to the currently-active map fd. The kernel program might do: ===== const int current_map_key = 1; void *current_map = bpf_map_lookup_elem(outer_map, ¤t_map_key); int stats_key = 42; uint64_t *stats_value = bpf_map_lookup_elem(current_map, &stats_key); __sync_fetch_and_add(&stats_value, 1); ===== If a userspace does: 1. Write new fd to outer_map[1]. 2. Call BPF_SYNC_MAP_ACCESS. 3. Start deleting everything in the old map. How can we guarantee that the __sync_fetch_and_add will not add to the old map? If it does, we'll lose data. Will the verifier automatically hold the RCU lock for as long as a pointer to an inner map is valid?