Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp638204ybz; Wed, 29 Apr 2020 06:49:56 -0700 (PDT) X-Google-Smtp-Source: APiQypIPYAXrN4hoovN3tcjJQKfbZO025H89sgH2LJ2kR48+fg97U/tQ4PZ0wZjIkU+IbLrFnMAb X-Received: by 2002:a17:907:2101:: with SMTP id qn1mr2763940ejb.207.1588168196177; Wed, 29 Apr 2020 06:49:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588168196; cv=none; d=google.com; s=arc-20160816; b=hf8AqEc1Ref2qu798eoCxwSSTM14uwzFl45PJ6qG1iX/TxxElt+qWt0q3ybsLaS1dJ CRziJFkcvUtWwsL/y6BGcEIVfUjH0TBfLTjY+sPuZv4oo6uZzNWtBS/U2GjULujvYXVi 4r/kaB2MGOImYAxnNc/bGO54TVYvlT9us5YOtHM4ijxDJga+o0kqEx2Z6gceEoo51b9V HEcwJgVyndbyH13OlDzP5edKK0mCwPvCZ/2ZoTjfWF5oJs5bHfDWG2LptUXqnoIPCcLz o7MCSHb1h9MNnbRVXqAJUVRDjgRzC4Dv68J87y7dB7zXp+tOzaF+9vpqu6lrHWbWf3Ny GEZA== 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:date:subject:cc:to:from; bh=QznDUcawwRvmcTfefthVcPA6astysKC0Qf8FKTw0Sfw=; b=X92bvmwOufQBZEGd9TlKzeHpfDDSpG4+3s0UGa0GmzzObWn0qqHyC+ZiVaScjRfPik RZE0oUFeoqA1uhUE7jyMjFefJQVl0F0np/bmK8trDmlOt/HCzHcdY1l/8dXRQcaVMzga YKHZaT9pC86nS71kXp9zlv7rxtVr6+/M60Hpa/hsTFYV5s4XerzaJOZUsLOyrbFyaDpF eZOMMLMxvFA+1Jqle/AkSdoqPTfrJWge3ueIABJ8hpUa9Sr7Dyqh02bk/saR8vQ72oFl svHvxaTwsyxRPd3uUU//GttRCOXR4cvaZZsEGyUfXA31QC/5LztMOWbMdf0HI+SMrXNw KR7g== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id x6si3479535edj.56.2020.04.29.06.49.14; Wed, 29 Apr 2020 06:49:56 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-wireless-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-wireless-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727901AbgD2Ns7 (ORCPT + 99 others); Wed, 29 Apr 2020 09:48:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54918 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726948AbgD2Ns6 (ORCPT ); Wed, 29 Apr 2020 09:48:58 -0400 Received: from sipsolutions.net (s3.sipsolutions.net [IPv6:2a01:4f8:191:4433::2]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DFD4BC035493; Wed, 29 Apr 2020 06:48:57 -0700 (PDT) Received: by sipsolutions.net with esmtpsa (TLS1.3:ECDHE_X25519__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim 4.93) (envelope-from ) id 1jTn56-001vkM-4d; Wed, 29 Apr 2020 15:48:56 +0200 From: Johannes Berg To: netdev@vger.kernel.org Cc: Antonio Quartulli , linux-wireless@vger.kernel.org, Johannes Berg Subject: [PATCH 3/7] nl80211: link recursive netlink nested policy Date: Wed, 29 Apr 2020 15:48:39 +0200 Message-Id: <20200429154836.b2e6bb0b4731.I697e382aa8ac181afe32ffac50b330c558bc34b1@changeid> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200429134843.42224-1-johannes@sipsolutions.net> References: <20200429134843.42224-1-johannes@sipsolutions.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org From: Johannes Berg Now that we have limited recursive policy validation to avoid stack overflows, change nl80211 to actually link the nested policy (linking back to itself eventually), which allows some code cleanups. Signed-off-by: Johannes Berg --- net/wireless/nl80211.c | 10 ++++------ net/wireless/nl80211.h | 2 -- net/wireless/pmsr.c | 3 +-- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 692bcd35f809..57c618b6cb0e 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -253,6 +253,8 @@ static int validate_ie_attr(const struct nlattr *attr, } /* policy for the attributes */ +static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR]; + static const struct nla_policy nl80211_ftm_responder_policy[NL80211_FTM_RESP_ATTR_MAX + 1] = { [NL80211_FTM_RESP_ATTR_ENABLED] = { .type = NLA_FLAG, }, @@ -296,11 +298,7 @@ nl80211_pmsr_req_attr_policy[NL80211_PMSR_REQ_ATTR_MAX + 1] = { static const struct nla_policy nl80211_psmr_peer_attr_policy[NL80211_PMSR_PEER_ATTR_MAX + 1] = { [NL80211_PMSR_PEER_ATTR_ADDR] = NLA_POLICY_ETH_ADDR, - /* - * we could specify this again to be the top-level policy, - * but that would open us up to recursion problems ... - */ - [NL80211_PMSR_PEER_ATTR_CHAN] = { .type = NLA_NESTED }, + [NL80211_PMSR_PEER_ATTR_CHAN] = NLA_POLICY_NESTED(nl80211_policy), [NL80211_PMSR_PEER_ATTR_REQ] = NLA_POLICY_NESTED(nl80211_pmsr_req_attr_policy), [NL80211_PMSR_PEER_ATTR_RESP] = { .type = NLA_REJECT }, @@ -347,7 +345,7 @@ nl80211_tid_config_attr_policy[NL80211_TID_CONFIG_ATTR_MAX + 1] = { NLA_POLICY_MAX(NLA_U8, NL80211_TID_CONFIG_DISABLE), }; -const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = { +static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = { [0] = { .strict_start_type = NL80211_ATTR_HE_OBSS_PD }, [NL80211_ATTR_WIPHY] = { .type = NLA_U32 }, [NL80211_ATTR_WIPHY_NAME] = { .type = NLA_NUL_STRING, diff --git a/net/wireless/nl80211.h b/net/wireless/nl80211.h index a41e94a49a89..d3e8e426c486 100644 --- a/net/wireless/nl80211.h +++ b/net/wireless/nl80211.h @@ -11,8 +11,6 @@ int nl80211_init(void); void nl80211_exit(void); -extern const struct nla_policy nl80211_policy[NUM_NL80211_ATTR]; - void *nl80211hdr_put(struct sk_buff *skb, u32 portid, u32 seq, int flags, u8 cmd); bool nl80211_put_sta_rate(struct sk_buff *msg, struct rate_info *info, diff --git a/net/wireless/pmsr.c b/net/wireless/pmsr.c index 63dc8023447f..a95c79d18349 100644 --- a/net/wireless/pmsr.c +++ b/net/wireless/pmsr.c @@ -187,10 +187,9 @@ static int pmsr_parse_peer(struct cfg80211_registered_device *rdev, /* reuse info->attrs */ memset(info->attrs, 0, sizeof(*info->attrs) * (NL80211_ATTR_MAX + 1)); - /* need to validate here, we don't want to have validation recursion */ err = nla_parse_nested_deprecated(info->attrs, NL80211_ATTR_MAX, tb[NL80211_PMSR_PEER_ATTR_CHAN], - nl80211_policy, info->extack); + NULL, info->extack); if (err) return err; -- 2.25.1