diff options
Diffstat (limited to 'net/packet/af_packet.c')
| -rw-r--r-- | net/packet/af_packet.c | 10 | 
1 files changed, 4 insertions, 6 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index 9f0983fa4d52..b43c4015b2f7 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -1927,13 +1927,11 @@ retry:  		goto out_unlock;  	} -	sockc.tsflags = 0; +	sockc.tsflags = sk->sk_tsflags;  	if (msg->msg_controllen) {  		err = sock_cmsg_send(sk, msg, &sockc); -		if (unlikely(err)) { -			err = -EINVAL; +		if (unlikely(err))  			goto out_unlock; -		}  	}  	skb->protocol = proto; @@ -2678,7 +2676,7 @@ static int tpacket_snd(struct packet_sock *po, struct msghdr *msg)  		dev = dev_get_by_index(sock_net(&po->sk), saddr->sll_ifindex);  	} -	sockc.tsflags = 0; +	sockc.tsflags = po->sk.sk_tsflags;  	if (msg->msg_controllen) {  		err = sock_cmsg_send(&po->sk, msg, &sockc);  		if (unlikely(err)) @@ -2881,7 +2879,7 @@ static int packet_snd(struct socket *sock, struct msghdr *msg, size_t len)  	if (unlikely(!(dev->flags & IFF_UP)))  		goto out_unlock; -	sockc.tsflags = 0; +	sockc.tsflags = sk->sk_tsflags;  	sockc.mark = sk->sk_mark;  	if (msg->msg_controllen) {  		err = sock_cmsg_send(sk, msg, &sockc);  | 
