FAILED: patch "[PATCH] selinux: do not report error on connect(AF_UNSPEC)" failed to apply to 4.19-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 05174c95b83f8aca0c47b87115abb7a6387aafa5 Mon Sep 17 00:00:00 2001
From: Paolo Abeni <[email protected]>
Date: Fri, 10 May 2019 19:12:33 +0200
Subject: [PATCH] selinux: do not report error on connect(AF_UNSPEC)
calling connect(AF_UNSPEC) on an already connected TCP socket is an established way to disconnect() such socket. After commit 68741a8adab9 ("selinux: Fix ltp test connect-syscall failure") it no longer works and, in the above scenario connect() fails with EAFNOSUPPORT.
Fix the above explicitly early checking for AF_UNSPEC family, and returning success in that case.
security/selinux/hooks.c +8 -2
@@ -4637,6 +4637,14 @@ static int selinux_socket_connect_helper(struct socket *sock, err =sock_has_perm (sk,SOCKET__CONNECT );if (err)return err; + if (addrlen < offsetofend(struct sockaddr, sa_family)) +return -EINVAL ; + +/* connect(AF_UNSPEC) has special handling, as it is a documented +* way to disconnect the socket +*/ +if (address->sa_family ==AF_UNSPEC ) +return 0 ;/* * If a TCP, DCCP or SCTP socket, check name_connect permission
@@ -4657,8 +4665,6 @@ static int selinux_socket_connect_helper(struct socket *sock,* need to check address->sa_family as it is possible to have * sk->sk_family = PF_INET6 with addr->sa_family = AF_INET. */ - if (addrlen < offsetofend(struct sockaddr, sa_family)) -return -EINVAL ;switch (address->sa_family) {case AF_INET : addr4 = (struct sockaddr_in *)address;