@@ -2105,7 +2105,8 @@ static int unix_dgram_sendmsg(struct socket *sock, struct msghdr *msg,
21052105#define UNIX_SKB_FRAGS_SZ (PAGE_SIZE << get_order(32768))
21062106
21072107#if IS_ENABLED (CONFIG_AF_UNIX_OOB )
2108- static int queue_oob (struct socket * sock , struct msghdr * msg , struct sock * other )
2108+ static int queue_oob (struct socket * sock , struct msghdr * msg , struct sock * other ,
2109+ struct scm_cookie * scm , bool fds_sent )
21092110{
21102111 struct unix_sock * ousk = unix_sk (other );
21112112 struct sk_buff * skb ;
@@ -2116,6 +2117,11 @@ static int queue_oob(struct socket *sock, struct msghdr *msg, struct sock *other
21162117 if (!skb )
21172118 return err ;
21182119
2120+ err = unix_scm_to_skb (scm , skb , !fds_sent );
2121+ if (err < 0 ) {
2122+ kfree_skb (skb );
2123+ return err ;
2124+ }
21192125 skb_put (skb , 1 );
21202126 err = skb_copy_datagram_from_iter (skb , 0 , & msg -> msg_iter , 1 );
21212127
@@ -2243,7 +2249,7 @@ static int unix_stream_sendmsg(struct socket *sock, struct msghdr *msg,
22432249
22442250#if IS_ENABLED (CONFIG_AF_UNIX_OOB )
22452251 if (msg -> msg_flags & MSG_OOB ) {
2246- err = queue_oob (sock , msg , other );
2252+ err = queue_oob (sock , msg , other , & scm , fds_sent );
22472253 if (err )
22482254 goto out_err ;
22492255 sent ++ ;
0 commit comments