mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	nl80211: link recursive netlink nested policy
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 <johannes.berg@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
		
							parent
							
								
									7690aa1cdf
								
							
						
					
					
						commit
						d15da2a2e8
					
				
					 3 changed files with 5 additions and 10 deletions
				
			
		|  | @ -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, | ||||
|  |  | |||
|  | @ -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, | ||||
|  |  | |||
|  | @ -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; | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Johannes Berg
						Johannes Berg