mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 08:44:41 +00:00 
			
		
		
		
	bpf: tcp: Do not limit cb_flags when creating child sk from listen sk
The commit0813a84156("bpf: tcp: Allow bpf prog to write and parse TCP header option") unnecessarily introduced bpf_skops_init_child() which limited the child sk from inheriting all bpf_sock_ops_cb_flags of the listen sk. That breaks existing user expectation. This patch removes the bpf_skops_init_child() and just allows sock_copy() to do its job to copy everything from listen sk to the child sk. Fixes:0813a84156("bpf: tcp: Allow bpf prog to write and parse TCP header option") Reported-by: Stanislav Fomichev <sdf@google.com> Signed-off-by: Martin KaFai Lau <kafai@fb.com> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20201002013448.2542025-1-kafai@fb.com
This commit is contained in:
		
							parent
							
								
									48ca6243c6
								
							
						
					
					
						commit
						82f45c6c4a
					
				
					 2 changed files with 0 additions and 34 deletions
				
			
		|  | @ -2228,34 +2228,6 @@ int __tcp_bpf_recvmsg(struct sock *sk, struct sk_psock *psock, | |||
| #endif /* CONFIG_NET_SOCK_MSG */ | ||||
| 
 | ||||
| #ifdef CONFIG_CGROUP_BPF | ||||
| /* Copy the listen sk's HDR_OPT_CB flags to its child.
 | ||||
|  * | ||||
|  * During 3-Way-HandShake, the synack is usually sent from | ||||
|  * the listen sk with the HDR_OPT_CB flags set so that | ||||
|  * bpf-prog will be called to write the BPF hdr option. | ||||
|  * | ||||
|  * In fastopen, the child sk is used to send synack instead | ||||
|  * of the listen sk.  Thus, inheriting the HDR_OPT_CB flags | ||||
|  * from the listen sk gives the bpf-prog a chance to write | ||||
|  * BPF hdr option in the synack pkt during fastopen. | ||||
|  * | ||||
|  * Both fastopen and non-fastopen child will inherit the | ||||
|  * HDR_OPT_CB flags to keep the bpf-prog having a consistent | ||||
|  * behavior when deciding to clear this cb flags (or not) | ||||
|  * during the PASSIVE_ESTABLISHED_CB. | ||||
|  * | ||||
|  * In the future, other cb flags could be inherited here also. | ||||
|  */ | ||||
| static inline void bpf_skops_init_child(const struct sock *sk, | ||||
| 					struct sock *child) | ||||
| { | ||||
| 	tcp_sk(child)->bpf_sock_ops_cb_flags = | ||||
| 		tcp_sk(sk)->bpf_sock_ops_cb_flags & | ||||
| 		(BPF_SOCK_OPS_PARSE_ALL_HDR_OPT_CB_FLAG | | ||||
| 		 BPF_SOCK_OPS_PARSE_UNKNOWN_HDR_OPT_CB_FLAG | | ||||
| 		 BPF_SOCK_OPS_WRITE_HDR_OPT_CB_FLAG); | ||||
| } | ||||
| 
 | ||||
| static inline void bpf_skops_init_skb(struct bpf_sock_ops_kern *skops, | ||||
| 				      struct sk_buff *skb, | ||||
| 				      unsigned int end_offset) | ||||
|  | @ -2264,11 +2236,6 @@ static inline void bpf_skops_init_skb(struct bpf_sock_ops_kern *skops, | |||
| 	skops->skb_data_end = skb->data + end_offset; | ||||
| } | ||||
| #else | ||||
| static inline void bpf_skops_init_child(const struct sock *sk, | ||||
| 					struct sock *child) | ||||
| { | ||||
| } | ||||
| 
 | ||||
| static inline void bpf_skops_init_skb(struct bpf_sock_ops_kern *skops, | ||||
| 				      struct sk_buff *skb, | ||||
| 				      unsigned int end_offset) | ||||
|  |  | |||
|  | @ -548,7 +548,6 @@ struct sock *tcp_create_openreq_child(const struct sock *sk, | |||
| 	newtp->fastopen_req = NULL; | ||||
| 	RCU_INIT_POINTER(newtp->fastopen_rsk, NULL); | ||||
| 
 | ||||
| 	bpf_skops_init_child(sk, newsk); | ||||
| 	tcp_bpf_clone(sk, newsk); | ||||
| 
 | ||||
| 	__TCP_INC_STATS(sock_net(sk), TCP_MIB_PASSIVEOPENS); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Martin KaFai Lau
						Martin KaFai Lau