mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	netfilter: nft_meta: place prandom handling in a helper
Move this out of the main eval loop, the numgen expression provides a better alternative to meta random. Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
This commit is contained in:
		
							parent
							
								
									8724e819cc
								
							
						
					
					
						commit
						6b2faee0ca
					
				
					 1 changed files with 9 additions and 4 deletions
				
			
		| 
						 | 
					@ -266,6 +266,13 @@ static bool nft_meta_get_eval_ifname(enum nft_meta_keys key, u32 *dest,
 | 
				
			||||||
	return true;
 | 
						return true;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static noinline u32 nft_prandom_u32(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct rnd_state *state = this_cpu_ptr(&nft_prandom_state);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return prandom_u32_state(state);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void nft_meta_get_eval(const struct nft_expr *expr,
 | 
					void nft_meta_get_eval(const struct nft_expr *expr,
 | 
				
			||||||
		       struct nft_regs *regs,
 | 
							       struct nft_regs *regs,
 | 
				
			||||||
		       const struct nft_pktinfo *pkt)
 | 
							       const struct nft_pktinfo *pkt)
 | 
				
			||||||
| 
						 | 
					@ -344,11 +351,9 @@ void nft_meta_get_eval(const struct nft_expr *expr,
 | 
				
			||||||
			goto err;
 | 
								goto err;
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
	case NFT_META_PRANDOM: {
 | 
						case NFT_META_PRANDOM:
 | 
				
			||||||
		struct rnd_state *state = this_cpu_ptr(&nft_prandom_state);
 | 
							*dest = nft_prandom_u32();
 | 
				
			||||||
		*dest = prandom_u32_state(state);
 | 
					 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
#ifdef CONFIG_XFRM
 | 
					#ifdef CONFIG_XFRM
 | 
				
			||||||
	case NFT_META_SECPATH:
 | 
						case NFT_META_SECPATH:
 | 
				
			||||||
		nft_reg_store8(dest, secpath_exists(skb));
 | 
							nft_reg_store8(dest, secpath_exists(skb));
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue