diff options
Diffstat (limited to 'net/ipv4/raw.c')
| -rw-r--r-- | net/ipv4/raw.c | 5 | 
1 files changed, 4 insertions, 1 deletions
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c index ff712bf2a98d..eadf1c9ef7e4 100644 --- a/net/ipv4/raw.c +++ b/net/ipv4/raw.c @@ -532,6 +532,9 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)  	}  	ipcm_init_sk(&ipc, inet); +	/* Keep backward compat */ +	if (hdrincl) +		ipc.protocol = IPPROTO_RAW;  	if (msg->msg_controllen) {  		err = ip_cmsg_send(sk, msg, &ipc, false); @@ -599,7 +602,7 @@ static int raw_sendmsg(struct sock *sk, struct msghdr *msg, size_t len)  	flowi4_init_output(&fl4, ipc.oif, ipc.sockc.mark, tos,  			   RT_SCOPE_UNIVERSE, -			   hdrincl ? IPPROTO_RAW : sk->sk_protocol, +			   hdrincl ? ipc.protocol : sk->sk_protocol,  			   inet_sk_flowi_flags(sk) |  			    (hdrincl ? FLOWI_FLAG_KNOWN_NH : 0),  			   daddr, saddr, 0, 0, sk->sk_uid);  |