Received: by 10.223.185.116 with SMTP id b49csp972187wrg; Wed, 14 Feb 2018 09:37:19 -0800 (PST) X-Google-Smtp-Source: AH8x227dJK/s1goaoJ9MVux/r05ejAk0LiBG2YHGfDNo48QDE3CMlxDpcQOObxNHD93b8nROZITD X-Received: by 10.98.99.5 with SMTP id x5mr5515984pfb.106.1518629839439; Wed, 14 Feb 2018 09:37:19 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518629839; cv=none; d=google.com; s=arc-20160816; b=tHuMiRVUXx5UxtmfCOAfi/jmGcaTG9deQadv6JGwjqNWa+90OMye9RS5ezS4LsWeLJ 6fORdenzYuYedAD3TtIO0OPiMHjG0ZPLgrKp9pGEOH1k8OL+nNnRbBMBSkNQKUUmQ7V1 1VSapVkhXm2v1xXaMTlLW1KISTzsAqw70ZsUKOAwOIw/psG3xFlWEEYSj9Jmah2duXOz +mY+BjpBAi95/L1rLVX7t5HI13Lz4GIoe8L5ilM/nOBBkIkRGdyMcQXRV4HtyFep4Ndv X75lKWmtbQtTbOOOavxnHORWHqqR+fwp1sNMmktR94DedgMjE+XMjI8fxh82GS81JrkX wmbA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:subject:cc:to:from:date :arc-authentication-results; bh=ld+BzVNwt9r3sc9gsSAfNFnztHlXT8DdsbgCZqmAGDA=; b=i4bv9+q4Z2+ynivSynFxQ4wa7mF4bSm+COsIYbU84uZa5TEpGWq829N+dkkKki4alz IjdXTNSFIL+Dq3Oxzmf8hSoz4emJV/LGjsWA2/s4LGoHZt86jWIeW8BXTJUHt6eUxSax uqhNb6SdploI9Ih8BRQPtv3Wgfp4GCrEwGK/2CA1M6fa4IbbLfSx0FBOWLGHzADPt3le CVPvfGU+C9Oblx2LAq0VFeAcxNw01I4ocVSsyMkY6h8DNzaZF3uk9w/yRxMj21A6FXrK XzqMit8xyfUi4AYT/S2ew0yQomARt66XKbhCBMwjdilanw4BaXA6AuV7Vry8nW8jZxGy 3sLw== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f3-v6si1571703plf.289.2018.02.14.09.37.04; Wed, 14 Feb 2018 09:37:19 -0800 (PST) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1161285AbeBNRfB (ORCPT + 99 others); Wed, 14 Feb 2018 12:35:01 -0500 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:36882 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1161214AbeBNRe6 (ORCPT ); Wed, 14 Feb 2018 12:34:58 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A12AF8163C52; Wed, 14 Feb 2018 17:34:56 +0000 (UTC) Received: from localhost (ovpn-200-34.brq.redhat.com [10.40.200.34]) by smtp.corp.redhat.com (Postfix) with ESMTP id 03E7B213AEE1; Wed, 14 Feb 2018 17:34:52 +0000 (UTC) Date: Wed, 14 Feb 2018 18:34:51 +0100 From: Jesper Dangaard Brouer To: Michal Hocko Cc: Jason Wang , ast@kernel.org, daniel@iogearbox.net, netdev@vger.kernel.org, linux-kernel@vger.kernel.org, mst@redhat.com, Matthew Wilcox , akpm@linux-foundation.org, dhowells@redhat.com, hannes@cmpxchg.org, brouer@redhat.com Subject: Re: [PATCH net] bpf: cpumap: use GFP_KERNEL instead of GFP_ATOMIC in __cpu_map_entry_alloc() Message-ID: <20180214183451.25252d72@redhat.com> In-Reply-To: <20180214150640.GC3443@dhcp22.suse.cz> References: <1518617854-4486-1-git-send-email-jasowang@redhat.com> <20180214150640.GC3443@dhcp22.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Wed, 14 Feb 2018 17:34:56 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.8]); Wed, 14 Feb 2018 17:34:56 +0000 (UTC) for IP:'10.11.54.6' DOMAIN:'int-mx06.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'brouer@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 14 Feb 2018 16:06:40 +0100 Michal Hocko wrote: > On Wed 14-02-18 22:17:34, Jason Wang wrote: > > There're several implications after commit 0bf7800f1799 ("ptr_ring: > > try vmalloc() when kmalloc() fails") with the using of vmalloc() since > > can't allow GFP_ATOMIC but mandate GFP_KERNEL. This will lead a WARN > > since cpumap try to call with GFP_ATOMIC. Fortunately, entry > > allocation of cpumap can only be done through syscall path which means > > GFP_ATOMIC is not necessary, so fixing this by replacing GFP_ATOMIC > > with GFP_KERNEL. > > map_update_elem does the following. Unless I am missing something and > the callback doesn't call cpu_map_update_elem there then we are in a > non-preemptible context there and GFP_WAIT would blow up. > rcu_read_lock(); > err = map->ops->map_update_elem(map, key, value, attr->flags); > rcu_read_unlock(); Nope - you did miss something ;-) You are looking at the wrong place. Look at /kernel/bpf/syscall.c line 697. vim +697 kernel/bpf/syscall.c [...] } else if (map->map_type == BPF_MAP_TYPE_CPUMAP) { err = map->ops->map_update_elem(map, key, value, attr->flags); goto out; } You missed that map type BPF_MAP_TYPE_CPUMAP is special cased, and is moved outside rcu_read_{lock,unlock} (because it need to create some kthreads). Further more the BPF-verifier disallow BPF programs runtime changing the BPF_MAP_TYPE_CPUMAP. Right now, we disallow almost everything from the bpf-side (even reading the value): vim +2057 kernel/bpf/verifier.c > > Reported-by: syzbot+1a240cdb1f4cc88819df@syzkaller.appspotmail.com > > Fixes: 0bf7800f1799 ("ptr_ring: try vmalloc() when kmalloc() fails") > > Cc: Michal Hocko > > Cc: Daniel Borkmann > > Cc: Matthew Wilcox > > Cc: Jesper Dangaard Brouer > > Cc: akpm@linux-foundation.org > > Cc: dhowells@redhat.com > > Cc: hannes@cmpxchg.org > > Signed-off-by: Jason Wang > > --- > > kernel/bpf/cpumap.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/kernel/bpf/cpumap.c b/kernel/bpf/cpumap.c > > index fbfdada6..a4bb0b3 100644 > > --- a/kernel/bpf/cpumap.c > > +++ b/kernel/bpf/cpumap.c > > @@ -334,7 +334,7 @@ static int cpu_map_kthread_run(void *data) > > static struct bpf_cpu_map_entry *__cpu_map_entry_alloc(u32 qsize, u32 cpu, > > int map_id) > > { > > - gfp_t gfp = GFP_ATOMIC|__GFP_NOWARN; > > + gfp_t gfp = GFP_KERNEL | __GFP_NOWARN; > > struct bpf_cpu_map_entry *rcpu; > > int numa, err; > > > > -- > > 2.7.4 > -- Best regards, Jesper Dangaard Brouer MSc.CS, Principal Kernel Engineer at Red Hat LinkedIn: http://www.linkedin.com/in/brouer