diff options
Diffstat (limited to 'net/ipv4/ip_sockglue.c')
| -rw-r--r-- | net/ipv4/ip_sockglue.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index 84f43a3c909..2d05c4133d3 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c @@ -112,14 +112,19 @@ static void ip_cmsg_recv_retopts(struct msghdr *msg, struct sk_buff *skb)  static void ip_cmsg_recv_security(struct msghdr *msg, struct sk_buff *skb)  {  	char *secdata; -	u32 seclen; +	u32 seclen, secid;  	int err; -	err = security_socket_getpeersec_dgram(skb, &secdata, &seclen); +	err = security_socket_getpeersec_dgram(NULL, skb, &secid); +	if (err) +		return; + +	err = security_secid_to_secctx(secid, &secdata, &seclen);  	if (err)  		return;  	put_cmsg(msg, SOL_IP, SCM_SECURITY, seclen, secdata); +	security_release_secctx(secdata, seclen);  }  |