From patchwork Wed Apr 10 19:50:17 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiong Wang X-Patchwork-Id: 1083563 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=none (p=none dis=none) header.from=netronome.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=netronome-com.20150623.gappssmtp.com header.i=@netronome-com.20150623.gappssmtp.com header.b="eQt0WsT7"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 44fZX66kJmz9s5c for ; Thu, 11 Apr 2019 05:50:46 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726694AbfDJTup (ORCPT ); Wed, 10 Apr 2019 15:50:45 -0400 Received: from mail-wm1-f66.google.com ([209.85.128.66]:35686 "EHLO mail-wm1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726676AbfDJTun (ORCPT ); Wed, 10 Apr 2019 15:50:43 -0400 Received: by mail-wm1-f66.google.com with SMTP id y197so3912659wmd.0 for ; Wed, 10 Apr 2019 12:50:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=netronome-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=przrOLCJP/2yXV45rk8KRThSpUEF8IQ+x2IHuQUdOZM=; b=eQt0WsT716NYlw+LCPgntW/NYu6FMWKZ0hsSNqfUL/b6FOMFvYf1NH+tJsyn44UsP3 FYfF6FlQNs2QE4pWh+egQV0q1A2KdXZI/oYlb37e7MD2+d5yCd7TJkfnfrh1FFkpVCtk vohlQKpIZNRB9EZqKaMTX0aW6AFVRscHso4wIbrgOlPUCVHjPzGS9AZO5TYCkIVs04Ws D45I5wy8S1Ay9gKWk526PrVVH/Zz55DE02cqriVstBu5vnaQTEhn/qHJsGXf/+f1oSNh wiW9umuGK0tsqX2U4JB/ANIL/x17HILgpoO9gHo4ObyapU0bXCTSJzlY7vavWeIP6itV 67vQ== 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; bh=przrOLCJP/2yXV45rk8KRThSpUEF8IQ+x2IHuQUdOZM=; b=grhNp8nkHi0IDdfpI/FB1h++ZoBC4Dfxzm8KWJiO7iGbNHPWXcWR21WOrNPS/Uo7Q1 M+O/KM58xw1ucIRmmxaxm/f/8Dm+LQn47MU9bUJqqkEtP05os/9roLP/FGFjktqK5FSr xxlP7vEeqNKSBzxlcLp8SiHHnhjBEWBU4KjJHK+U9nJ7CDNLcPtEgA/egg8yuYJfDe+v fiAFjGJsZfXJmKeMJh8O7NQHdBAiYfn5b8/ZggzbzinhGl6G/r5LyPtQmLMvik76Vngx veIkM8jp8RfjEqrKd/U+mSh9q6bRJCYV2JeIALIwg5jB0TjBhkUjXnNKDbaAZTds/8e/ 3t3A== X-Gm-Message-State: APjAAAVqr9TgpQ0xiHU3z89gXgsCIlbRs8467CwQPKztlEAmagGi1HjK kEQ2GIpqKhrnbeXDTKsw/lOcnw== X-Google-Smtp-Source: APXvYqzGkEflsgCvQxNKiYOINcjHWO0llCWJDmqpVOKKQsgFM+X42Pb0yJl2WA5RufJyDZN1H8XA4g== X-Received: by 2002:a1c:7918:: with SMTP id l24mr4140616wme.29.1554925842355; Wed, 10 Apr 2019 12:50:42 -0700 (PDT) Received: from cbtest28.netronome.com ([217.38.71.146]) by smtp.gmail.com with ESMTPSA id 4sm2288540wmg.12.2019.04.10.12.50.41 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 10 Apr 2019 12:50:41 -0700 (PDT) From: Jiong Wang To: alexei.starovoitov@gmail.com, daniel@iogearbox.net Cc: bpf@vger.kernel.org, netdev@vger.kernel.org, oss-drivers@netronome.com, Jiong Wang Subject: [PATCH/RFC v2 bpf-next 03/19] bpf: factor out reg and stack slot propagation into "propagate_liveness_reg" Date: Wed, 10 Apr 2019 20:50:17 +0100 Message-Id: <1554925833-7333-4-git-send-email-jiong.wang@netronome.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1554925833-7333-1-git-send-email-jiong.wang@netronome.com> References: <1554925833-7333-1-git-send-email-jiong.wang@netronome.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org After code refactor in previous patches, the propagation logic inside the for loop in "propagate_liveness" becomes clear that they are good enough to be factored out into a common function "propagate_liveness_reg". Signed-off-by: Jiong Wang Reviewed-by: Jakub Kicinski --- kernel/bpf/verifier.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index d57082a..8d60dc7 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -6190,6 +6190,22 @@ static bool states_equal(struct bpf_verifier_env *env, return true; } +static int propagate_liveness_reg(struct bpf_verifier_env *env, + struct bpf_reg_state *reg, + struct bpf_reg_state *parent_reg) +{ + int err; + + if (parent_reg->live & REG_LIVE_READ || !(reg->live & REG_LIVE_READ)) + return 0; + + err = mark_reg_read(env, reg, parent_reg); + if (err) + return err; + + return 0; +} + /* A write screens off any subsequent reads; but write marks come from the * straight-line code between a state and its parent. When we arrive at an * equivalent state (jump target or such) we didn't arrive by the straight-line @@ -6219,11 +6235,8 @@ static int propagate_liveness(struct bpf_verifier_env *env, state_reg = state->regs; /* We don't need to worry about FP liveness, it's read-only */ for (i = frame < vstate->curframe ? BPF_REG_6 : 0; i < BPF_REG_FP; i++) { - if (parent_reg[i].live & REG_LIVE_READ) - continue; - if (!(state_reg[i].live & REG_LIVE_READ)) - continue; - err = mark_reg_read(env, &state_reg[i], &parent_reg[i]); + err = propagate_liveness_reg(env, &state_reg[i], + &parent_reg[i]); if (err) return err; } @@ -6233,11 +6246,8 @@ static int propagate_liveness(struct bpf_verifier_env *env, i < parent->allocated_stack / BPF_REG_SIZE; i++) { parent_reg = &parent->stack[i].spilled_ptr; state_reg = &state->stack[i].spilled_ptr; - if (parent_reg->live & REG_LIVE_READ) - continue; - if (!(state_reg->live & REG_LIVE_READ)) - continue; - err = mark_reg_read(env, state_reg, parent_reg); + err = propagate_liveness_reg(env, state_reg, + parent_reg); if (err) return err; }