From patchwork Wed Jan 16 22:03:15 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Fomichev X-Patchwork-Id: 1026240 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="f0NdzDxC"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g1Rv3JGYz9sD4 for ; Thu, 17 Jan 2019 09:03:23 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732333AbfAPWDW (ORCPT ); Wed, 16 Jan 2019 17:03:22 -0500 Received: from mail-qk1-f202.google.com ([209.85.222.202]:47308 "EHLO mail-qk1-f202.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731870AbfAPWDV (ORCPT ); Wed, 16 Jan 2019 17:03:21 -0500 Received: by mail-qk1-f202.google.com with SMTP id z68so6656220qkb.14 for ; Wed, 16 Jan 2019 14:03:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=LvGAyvZnZdfA3v10QbKfWeyoQh1QFMhz1fTA1G+4yFw=; b=f0NdzDxCLO+GQjsXHnw5qHqOudi3obEfsh2gbwfUmH1goTkIk5B8XcU3q0rb65lwWg NIOdadAyyWR0xMOp6ZQLbhRpE1u1yzQ3OPw+UfO8UVYnlByMuosjI6VbShp1K/B0S3xi hOAK3WMwOhjJQ+PT9roP9JF1ikiLLHBBGA1GmqEazsoE6e3Vo/Ik0TBE9mXTGjiuJu5E mtouhaptr9XIy+BhY/WtAruDxbcoQl7KNACiRvxEBE2/vNJNSbFWQXpim5ZaQG+n4xQY kKyJNb6DFnGL6Jsjlg/N10Os+kaXDPd6XbMcwkiI8EEyGDAjfkUZ6e1wW7x1ZLbNuMYh PO/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=LvGAyvZnZdfA3v10QbKfWeyoQh1QFMhz1fTA1G+4yFw=; b=TTMcbqTWiL+OX4XfaQAH3/EYpZ8tNJfajoVppLwXhAsz6dmqrpi5vNgkIAT/KifEvk 533ikQpvL6dsSL0Ci4+9eQzPxwZrd1u5dUM4cjwkvbpJMJ8mT0U8qzAnFSMyhUlFg27I R0d1eZL18eff3LhS8bVWw0F5W9cPdXBBpNpYLjocTRSl2wQTrUiTf8opcSngAVbt9oRF FtmqzEnZeQ3Y/AY3VyopU+XFGigJXQLL4wq4TjTYq95E67B4vHVtl+jVYT6PWh6ayhbX nN1vPFfjZ8fQA/477lh81jV1KLTBZ++DyhTfHNC/DsFhDGfcaj+0VqEfpzffmiKgqKfq NRuA== X-Gm-Message-State: AJcUukcWcSc9ygm600cB25xjQ01wHebZ/UV6SBUEQEA6jzhnNjbazU6M IB61X27fEizHpzgOEJayBttIYg30iO2Dlg533nqjvmxcNrQM2I7MLcLIGT1zi3czFJu5ZjZsTDa Cr6C1ohaUZqLFD4/7p3dAdt6vRTBxO0Cbu+3LKRm4VdkjUi+nhNHhig== X-Google-Smtp-Source: ALg8bN6pcCaFxYNW0bvKH/fJVJh2useCyWU7I5zE84yXIawCgL6RCgtvAAA9c8IF8swvHnjeOaKgtp4= X-Received: by 2002:a0c:9e60:: with SMTP id z32mr6413945qve.0.1547676200714; Wed, 16 Jan 2019 14:03:20 -0800 (PST) Date: Wed, 16 Jan 2019 14:03:15 -0800 Message-Id: <20190116220317.30907-1-sdf@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.20.1.97.g81188d93c3-goog Subject: [PATCH bpf v2 1/3] bpf: don't assume build-id length is always 20 bytes From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, ast@kernel.org, daniel@iogearbox.net, songliubraving@fb.com, Stanislav Fomichev Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Build-id length is not fixed to 20, it can be (`man ld` /--build-id): * 128-bit (uuid) * 160-bit (sha1) * any length specified in ld --build-id=0xhexstring To fix the issue of missing BPF_STACK_BUILD_ID_VALID for shorter build-ids, assume that build-id is somewhere in the range of 1 .. 20. Set the remaining bytes to zero. v2: * don't introduce new "len = min(BPF_BUILD_ID_SIZE, nhdr->n_descsz)", we already know that nhdr->n_descsz <= BPF_BUILD_ID_SIZE if we enter this 'if' condition Fixes: 615755a77b24 ("bpf: extend stackmap to save binary_build_id+offset instead of address") Acked-by: Song Liu Signed-off-by: Stanislav Fomichev --- kernel/bpf/stackmap.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c index d9e2483669d0..f9df545e92f6 100644 --- a/kernel/bpf/stackmap.c +++ b/kernel/bpf/stackmap.c @@ -180,11 +180,14 @@ static inline int stack_map_parse_build_id(void *page_addr, if (nhdr->n_type == BPF_BUILD_ID && nhdr->n_namesz == sizeof("GNU") && - nhdr->n_descsz == BPF_BUILD_ID_SIZE) { + nhdr->n_descsz > 0 && + nhdr->n_descsz <= BPF_BUILD_ID_SIZE) { memcpy(build_id, note_start + note_offs + ALIGN(sizeof("GNU"), 4) + sizeof(Elf32_Nhdr), - BPF_BUILD_ID_SIZE); + nhdr->n_descsz); + memset(build_id + nhdr->n_descsz, 0, + BPF_BUILD_ID_SIZE - nhdr->n_descsz); return 0; } new_offs = note_offs + sizeof(Elf32_Nhdr) + From patchwork Wed Jan 16 22:03:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Fomichev X-Patchwork-Id: 1026241 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="IXhGN+71"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g1Ry153kz9sD4 for ; Thu, 17 Jan 2019 09:03:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732344AbfAPWDY (ORCPT ); Wed, 16 Jan 2019 17:03:24 -0500 Received: from mail-qt1-f201.google.com ([209.85.160.201]:46611 "EHLO mail-qt1-f201.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731870AbfAPWDY (ORCPT ); Wed, 16 Jan 2019 17:03:24 -0500 Received: by mail-qt1-f201.google.com with SMTP id w19so7142226qto.13 for ; Wed, 16 Jan 2019 14:03:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=CiI0H6GGu9ZZYNDI4Vuo9O1Dk40PGKSmJmouWQEzEyk=; b=IXhGN+71gpGcGlAKzA/8KRd9++ks2I15N6smFq8Iw1wu8EmmZ/2bmitEc2cm9G8pr4 lxbcRdo9aLbiXOCvW5IYqQdASTfP124mHM0WM49VZ4/A6+iNWaq5OuhTDsJsUw+CRUen Gyazm3SJvmlfy+ICFAkBbTCo0YCrK2mMjnZ/k6ZrRLYZ9Ns+7bZ+kpFuvh2R1ov76UxS qj5KDdi+7Jm8f0DBuMqCwJzA2LW1p6NeX0tiHXHayFrQxmJ+T6Q3XixyhkjsjtwxmdrD 2M9p9mfqD/nd56hGbTIIIkWRRT7nN6J3ydNa+qW1XUHbBP68PKonJAtt2XBIpKBSb9Q4 WyEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=CiI0H6GGu9ZZYNDI4Vuo9O1Dk40PGKSmJmouWQEzEyk=; b=Pg1Ck09WxvE0uFDjJHKQ56b+URTTmVM33GQSyrwhR94MT9N9gIBa9k8fzfhR+eA1Ur eJ/hfIhLrclR4jcn+XC9XXME/zxbl5p7mN7CD3Brv7f9YS0n0s/u/1apKL7FI7aJ2Bm3 ng5nv1z/bgk/FZhacprZf8aYhJoYC+lEd1UIP2Ln0H5hr8z+cSSiaCHzHF3r692SH92Q AgEYIv5n4c1AtjyudUK1ptVEumcXquHfwRbVNiVc5lyg+Sz/EuodNAbxdZSpBaRT4orI FU661KwhEpuyE09MP09Y5LNPeJggZozYL6KFbNKDpR1kZzXdJqFB3XVx5Ho2fJw7xFjb gYZw== X-Gm-Message-State: AJcUukdguK2eqRjsmF5ViIoX0tdm7C/ja5AHt1Qai00NfDPVUi4j8+w5 41ApZ4O5Rc4Mwpgdp667QygAnh9gCO3Dq4p5w/lvIuGcIE1O7sWPIsiSaTZmdk6IxOL+1sOyE23 xpo/H/E7hkUzWSkS/gUrdm0b46g6TK9/Ui62qko3CBtVfRv4E3SpTKA== X-Google-Smtp-Source: ALg8bN4BHD2bzZ+0eQMWj2kLitIhZOXp41xsEabSgoV88QQ3H/1jCqLfrCy9K6UxQhkbr5QQqSbY1PY= X-Received: by 2002:a37:4916:: with SMTP id w22mr5932081qka.6.1547676203442; Wed, 16 Jan 2019 14:03:23 -0800 (PST) Date: Wed, 16 Jan 2019 14:03:16 -0800 In-Reply-To: <20190116220317.30907-1-sdf@google.com> Message-Id: <20190116220317.30907-2-sdf@google.com> Mime-Version: 1.0 References: <20190116220317.30907-1-sdf@google.com> X-Mailer: git-send-email 2.20.1.97.g81188d93c3-goog Subject: [PATCH bpf v2 2/3] bpf: zero out build_id for BPF_STACK_BUILD_ID_IP From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, ast@kernel.org, daniel@iogearbox.net, songliubraving@fb.com, Stanislav Fomichev Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When returning BPF_STACK_BUILD_ID_IP from stack_map_get_build_id_offset, make sure that build_id field is empty. Since we are using percpu free list, there is a possibility that we might reuse some previous bpf_stack_build_id with non-zero build_id. Fixes: 615755a77b24 ("bpf: extend stackmap to save binary_build_id+offset instead of address") Acked-by: Song Liu Signed-off-by: Stanislav Fomichev --- kernel/bpf/stackmap.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/bpf/stackmap.c b/kernel/bpf/stackmap.c index f9df545e92f6..d43b14535827 100644 --- a/kernel/bpf/stackmap.c +++ b/kernel/bpf/stackmap.c @@ -314,6 +314,7 @@ static void stack_map_get_build_id_offset(struct bpf_stack_build_id *id_offs, for (i = 0; i < trace_nr; i++) { id_offs[i].status = BPF_STACK_BUILD_ID_IP; id_offs[i].ip = ips[i]; + memset(id_offs[i].build_id, 0, BPF_BUILD_ID_SIZE); } return; } @@ -324,6 +325,7 @@ static void stack_map_get_build_id_offset(struct bpf_stack_build_id *id_offs, /* per entry fall back to ips */ id_offs[i].status = BPF_STACK_BUILD_ID_IP; id_offs[i].ip = ips[i]; + memset(id_offs[i].build_id, 0, BPF_BUILD_ID_SIZE); continue; } id_offs[i].offset = (vma->vm_pgoff << PAGE_SHIFT) + ips[i] From patchwork Wed Jan 16 22:03:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stanislav Fomichev X-Patchwork-Id: 1026242 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=google.com header.i=@google.com header.b="c3z1m49R"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43g1S12N4Mz9sD4 for ; Thu, 17 Jan 2019 09:03:29 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732370AbfAPWD2 (ORCPT ); Wed, 16 Jan 2019 17:03:28 -0500 Received: from mail-ot1-f74.google.com ([209.85.210.74]:53341 "EHLO mail-ot1-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731870AbfAPWD1 (ORCPT ); Wed, 16 Jan 2019 17:03:27 -0500 Received: by mail-ot1-f74.google.com with SMTP id o13so4161212otl.20 for ; Wed, 16 Jan 2019 14:03:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=7sLD5IUJWFHstVNzxcjhu83Ky/ZUexGIo+WV+/zouck=; b=c3z1m49RWwF+00C0dZOJp6fD1POQhZkTXQD6csmrifQV39BTxA30BZaivm1rn1VpzX uYL1qnb3Yne53XHrTNxGjQd387RNw00JzzIPBhJR0ZwpZ6lHzcKmMttRhYM/QX0YmqvY 21BEO1ED+AYTH5x3Ukgg6juJVStmDEostEYX7D1ZpCHtiNi61gdAprrNC+v4rJZs89nS 8+YedpUDlvHIfqUEDzqftOVqs5ZTcCnZBHrY1P8hiMLPgi9SjeJ8caZOhGWmvLD+L7+o A/+JbshiFYcP4dE62lRn5Eg+kw0LDpmH4xJbPblcQyDus5cVIq9BGzkGEuVEceW1I80E DGlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=7sLD5IUJWFHstVNzxcjhu83Ky/ZUexGIo+WV+/zouck=; b=q8gSqO6xexHNoYXBmhO+Lxx08vlCjmMW76RaB3aF9WjDfmlszORAV0agLwjfsmvYNq 0wmWt2Kel0tzvnn0AOn3A9J5ie/6EYe0wsNdlwwZLcft3pzoc8YeO+4GSghrj/Rz40IE 8ShisKWOLhIS0naFgFpwn5juaJvjEn4wUOZ7+yr0e/giaVoaYlErEDfdb2GqQuv+eKnT UpPQO5+62P70X4bK1LyUYhKPNbS5z8tE1e4ox1EPxlfbtkdgudkdGw4tZpfvQzWiAlNT v1OtJS8nEfDZGbTE8gNC88a6ZlUWbzy0TKVjh1zxwfWxknKsKtTZuy+Hv2JRDnTEz2Ep w9JA== X-Gm-Message-State: AJcUukfW8ttNvfY42DV5biwmmFX4pPFeG+UKJw8p3A4juHr+kFjkVcZm Aq4hgLElorn9JS9ZH3i7GsStye3uUVBVgqeKiS5VgBs3Kn1y9TlW6g5Ldmj6dnSE4S2DWOiEWAv z23ibbNIUB6GIKoX15UOtWTfp0AS/tE7Zfm38rb0myt213Pd7FUE6mg== X-Google-Smtp-Source: ALg8bN6nZQqXJknmV4Bpg5vBxsSaiwJ555jBrQHZ+9FGZxZJQQ0CffbZyZZJ1DPvYXUhz7yQHaAh5Y0= X-Received: by 2002:a9d:5d5:: with SMTP id 79mr6287375otd.4.1547676206371; Wed, 16 Jan 2019 14:03:26 -0800 (PST) Date: Wed, 16 Jan 2019 14:03:17 -0800 In-Reply-To: <20190116220317.30907-1-sdf@google.com> Message-Id: <20190116220317.30907-3-sdf@google.com> Mime-Version: 1.0 References: <20190116220317.30907-1-sdf@google.com> X-Mailer: git-send-email 2.20.1.97.g81188d93c3-goog Subject: [PATCH bpf v2 3/3] selftests/bpf: retry tests that expect build-id From: Stanislav Fomichev To: netdev@vger.kernel.org Cc: davem@davemloft.net, ast@kernel.org, daniel@iogearbox.net, songliubraving@fb.com, Stanislav Fomichev Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org While running test_progs in a loop I found out that I'm sometimes hitting "Didn't find expected build ID from the map" error. Looking at stack_map_get_build_id_offset() it seems that it is racy (by design) and can sometimes return BPF_STACK_BUILD_ID_IP (i.e. can't trylock current->mm->mmap_sem). Let's retry this test a single time. Fixes: 13790d1cc72c ("bpf: add selftest for stackmap with build_id in NMI context") Acked-by: Song Liu Signed-off-by: Stanislav Fomichev --- tools/testing/selftests/bpf/test_progs.c | 30 ++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/tools/testing/selftests/bpf/test_progs.c b/tools/testing/selftests/bpf/test_progs.c index 126fc624290d..25f0083a9b2e 100644 --- a/tools/testing/selftests/bpf/test_progs.c +++ b/tools/testing/selftests/bpf/test_progs.c @@ -1188,7 +1188,9 @@ static void test_stacktrace_build_id(void) int i, j; struct bpf_stack_build_id id_offs[PERF_MAX_STACK_DEPTH]; int build_id_matches = 0; + int retry = 1; +retry: err = bpf_prog_load(file, BPF_PROG_TYPE_TRACEPOINT, &obj, &prog_fd); if (CHECK(err, "prog_load", "err %d errno %d\n", err, errno)) goto out; @@ -1301,6 +1303,19 @@ static void test_stacktrace_build_id(void) previous_key = key; } while (bpf_map_get_next_key(stackmap_fd, &previous_key, &key) == 0); + /* stack_map_get_build_id_offset() is racy and sometimes can return + * BPF_STACK_BUILD_ID_IP instead of BPF_STACK_BUILD_ID_VALID; + * try it one more time. + */ + if (build_id_matches < 1 && retry--) { + ioctl(pmu_fd, PERF_EVENT_IOC_DISABLE); + close(pmu_fd); + bpf_object__close(obj); + printf("%s:WARN:Didn't find expected build ID from the map, retrying\n", + __func__); + goto retry; + } + if (CHECK(build_id_matches < 1, "build id match", "Didn't find expected build ID from the map\n")) goto disable_pmu; @@ -1341,7 +1356,9 @@ static void test_stacktrace_build_id_nmi(void) int i, j; struct bpf_stack_build_id id_offs[PERF_MAX_STACK_DEPTH]; int build_id_matches = 0; + int retry = 1; +retry: err = bpf_prog_load(file, BPF_PROG_TYPE_PERF_EVENT, &obj, &prog_fd); if (CHECK(err, "prog_load", "err %d errno %d\n", err, errno)) return; @@ -1436,6 +1453,19 @@ static void test_stacktrace_build_id_nmi(void) previous_key = key; } while (bpf_map_get_next_key(stackmap_fd, &previous_key, &key) == 0); + /* stack_map_get_build_id_offset() is racy and sometimes can return + * BPF_STACK_BUILD_ID_IP instead of BPF_STACK_BUILD_ID_VALID; + * try it one more time. + */ + if (build_id_matches < 1 && retry--) { + ioctl(pmu_fd, PERF_EVENT_IOC_DISABLE); + close(pmu_fd); + bpf_object__close(obj); + printf("%s:WARN:Didn't find expected build ID from the map, retrying\n", + __func__); + goto retry; + } + if (CHECK(build_id_matches < 1, "build id match", "Didn't find expected build ID from the map\n")) goto disable_pmu;