From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Borkmann Subject: Re: [PATCH bpf v3] tools/bpftool: fix a percpu_array map dump problem Date: Tue, 31 Jul 2018 02:02:40 +0200 Message-ID: <20066d17-1ea4-d90d-eeae-e9782748d571@iogearbox.net> References: <20180730154903.931000-1-yhs@fb.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Cc: kernel-team@fb.com To: Yonghong Song , ast@fb.com, netdev@vger.kernel.org Return-path: Received: from www62.your-server.de ([213.133.104.62]:49430 "EHLO www62.your-server.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729477AbeGaBkJ (ORCPT ); Mon, 30 Jul 2018 21:40:09 -0400 In-Reply-To: <20180730154903.931000-1-yhs@fb.com> Content-Language: en-US Sender: netdev-owner@vger.kernel.org List-ID: On 07/30/2018 05:49 PM, Yonghong Song wrote: > I hit the following problem when I tried to use bpftool > to dump a percpu array. > > $ sudo ./bpftool map show > 61: percpu_array name stub flags 0x0 > key 4B value 4B max_entries 1 memlock 4096B > ... > $ sudo ./bpftool map dump id 61 > bpftool: malloc.c:2406: sysmalloc: Assertion > `(old_top == initial_top (av) && old_size == 0) || \ > ((unsigned long) (old_size) >= MINSIZE && \ > prev_inuse (old_top) && \ > ((unsigned long) old_end & (pagesize - 1)) == 0)' > failed. > Aborted > > Further debugging revealed that this is due to > miscommunication between bpftool and kernel. > For example, for the above percpu_array with value size of 4B. > The map info returned to user space has value size of 4B. > > In bpftool, the values array for lookup is allocated like: > info->value_size * get_possible_cpus() = 4 * get_possible_cpus() > In kernel (kernel/bpf/syscall.c), the values array size is > rounded up to multiple of 8. > round_up(map->value_size, 8) * num_possible_cpus() > = 8 * num_possible_cpus() > So when kernel copies the values to user buffer, the kernel will > overwrite beyond user buffer boundary. > > This patch fixed the issue by allocating and stepping through > percpu map value array properly in bpftool. > > Fixes: 71bb428fe2c19 ("tools: bpf: add bpftool") > Signed-off-by: Yonghong Song Applied to bpf, thanks Yonghong!