From patchwork Tue Jan 8 13:58:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lorenz Bauer X-Patchwork-Id: 1021922 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=quarantine dis=none) header.from=cloudflare.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; secure) header.d=cloudflare.com header.i=@cloudflare.com header.b="AuGmsJF7"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43Yv465SGXz9sMp for ; Wed, 9 Jan 2019 00:58:30 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728398AbfAHN63 (ORCPT ); Tue, 8 Jan 2019 08:58:29 -0500 Received: from mail-wr1-f67.google.com ([209.85.221.67]:35979 "EHLO mail-wr1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727857AbfAHN62 (ORCPT ); Tue, 8 Jan 2019 08:58:28 -0500 Received: by mail-wr1-f67.google.com with SMTP id u4so4161275wrp.3 for ; Tue, 08 Jan 2019 05:58:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cloudflare.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=dkgRZL3AihZz1U0iCye7nk3WwNXfggazA3T+J5O2PKA=; b=AuGmsJF7RwnuyYbJs/Ok4ISV8xfPVLPVvN7g2vOyuq0IIiFi7Awy69CGYj85XQPtaq qYB58AxQOASQN805A3wV1SYg6a1MUPILDsFVvpouWZTPlRPvUDSBWv1c2O0SCP/Cse6s 3HSv/nQ8CsZtBpu0cGyOEXXK4UJB9INmZcF4k= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=dkgRZL3AihZz1U0iCye7nk3WwNXfggazA3T+J5O2PKA=; b=q6xUaK3gO+1E//Uk/wzNOl/yDa0C7eGvXAzaIZ5YwPiqwG9vo8xHKRJNx/kkiseGDG mFZZGon6HG+YiTcoUmHAwJzIK0ie0SbdfdQBUqIr3FpDYage6PA1RrDE/kmnkpvdXD/o 4olZ4QghaVc0gHZTcWm/I3nYcPxEVYYuxAYENP0m3JmjKfdSWoGpVKNzfHnzrwxWe5rs mwHPDTfpJNyC6ac6IPgWYDaonBC4HgfMFZRcMM8IrgSvpQT5Y9zvSIr+7lT0NFOR2z/r Gc5bPQDS8caUeWqXSsAujzWuXcG9VLlt9gi6g0p+NcIvIspzsbrWreros5TAJhhLwyHh Yh2A== X-Gm-Message-State: AJcUukeGCawn6NhBorAmz9tsyOoVQPao92R+RPnPcDODAfxWxLgw2FnX rsKrXq15j2rvujHtyMH+pxYYwDImC+w= X-Google-Smtp-Source: ALg8bN5P4OnA6mhJrIZQz9/4/DP9zVBw3fvfzcrJ6Caqqw+f0uSep8+/OWz9mWto44Z2DoRd6j3GjQ== X-Received: by 2002:adf:fc89:: with SMTP id g9mr1523859wrr.96.1546955906883; Tue, 08 Jan 2019 05:58:26 -0800 (PST) Received: from antares.lan (1.1.8.b.2.2.3.b.f.4.c.f.7.2.5.e.f.f.6.2.a.5.a.7.0.b.8.0.1.0.0.2.ip6.arpa. [2001:8b0:7a5a:26ff:e527:fc4f:b322:b811]) by smtp.gmail.com with ESMTPSA id f18sm45255999wrs.92.2019.01.08.05.58.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 08 Jan 2019 05:58:25 -0800 (PST) From: Lorenz Bauer To: ast@kernel.org, daniel@iogearbox.net, netdev@vger.kernel.org Cc: Lorenz Bauer Subject: [PATCH 1/1] bpf: libbpf: retry loading program on EAGAIN Date: Tue, 8 Jan 2019 13:58:00 +0000 Message-Id: <20190108135800.31429-2-lmb@cloudflare.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190108135800.31429-1-lmb@cloudflare.com> References: <20190108135800.31429-1-lmb@cloudflare.com> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Commit c3494801cd1785e2 ("bpf: check pending signals while verifying programs") makes it possible for the BPF_PROG_LOAD to fail with EAGAIN. Retry unconditionally in this case. Signed-off-by: Lorenz Bauer --- tools/lib/bpf/bpf.c | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c index 3caaa3428774..88cbd110ae58 100644 --- a/tools/lib/bpf/bpf.c +++ b/tools/lib/bpf/bpf.c @@ -65,6 +65,17 @@ static inline int sys_bpf(enum bpf_cmd cmd, union bpf_attr *attr, return syscall(__NR_bpf, cmd, attr, size); } +static inline int sys_bpf_prog_load(union bpf_attr *attr, unsigned int size) +{ + int fd; + + do { + fd = sys_bpf(BPF_PROG_LOAD, attr, size); + } while (fd < 0 && errno == EAGAIN); + + return fd; +} + int bpf_create_map_xattr(const struct bpf_create_map_attr *create_attr) { __u32 name_len = create_attr->name ? strlen(create_attr->name) : 0; @@ -232,7 +243,7 @@ int bpf_load_program_xattr(const struct bpf_load_program_attr *load_attr, memcpy(attr.prog_name, load_attr->name, min(name_len, BPF_OBJ_NAME_LEN - 1)); - fd = sys_bpf(BPF_PROG_LOAD, &attr, sizeof(attr)); + fd = sys_bpf_prog_load(&attr, sizeof(attr)); if (fd >= 0) return fd; @@ -269,7 +280,7 @@ int bpf_load_program_xattr(const struct bpf_load_program_attr *load_attr, break; } - fd = sys_bpf(BPF_PROG_LOAD, &attr, sizeof(attr)); + fd = sys_bpf_prog_load(&attr, sizeof(attr)); if (fd >= 0) goto done; @@ -283,7 +294,7 @@ int bpf_load_program_xattr(const struct bpf_load_program_attr *load_attr, attr.log_size = log_buf_sz; attr.log_level = 1; log_buf[0] = 0; - fd = sys_bpf(BPF_PROG_LOAD, &attr, sizeof(attr)); + fd = sys_bpf_prog_load(&attr, sizeof(attr)); done: free(finfo); free(linfo); @@ -328,7 +339,7 @@ int bpf_verify_program(enum bpf_prog_type type, const struct bpf_insn *insns, attr.kern_version = kern_version; attr.prog_flags = prog_flags; - return sys_bpf(BPF_PROG_LOAD, &attr, sizeof(attr)); + return sys_bpf_prog_load(&attr, sizeof(attr)); } int bpf_map_update_elem(int fd, const void *key, const void *value,