selinux: handle TCP SYN-ACK packets correctly in selinux_ip_postroute()
authorPaul Moore <[email protected]>
Wed, 4 Dec 2013 21:10:51 +0000 (16:10 -0500)
committerPaul Moore <[email protected]>
Thu, 12 Dec 2013 22:21:31 +0000 (17:21 -0500)
commit446b802437f285de68ffb8d6fac3c44c3cab5b04
tree2123c25875f8ad75114592e4755d21429765a6c0
parent47180068276a04ed31d24fe04c673138208b07a9
selinux: handle TCP SYN-ACK packets correctly in selinux_ip_postroute()

In selinux_ip_postroute() we perform access checks based on the
packet's security label.  For locally generated traffic we get the
packet's security label from the associated socket; this works in all
cases except for TCP SYN-ACK packets.  In the case of SYN-ACK packet's
the correct security label is stored in the connection's request_sock,
not the server's socket.  Unfortunately, at the point in time when
selinux_ip_postroute() is called we can't query the request_sock
directly, we need to recreate the label using the same logic that
originally labeled the associated request_sock.

See the inline comments for more explanation.

Reported-by: Janak Desai <[email protected]>
Tested-by: Janak Desai <[email protected]>
Cc: [email protected]
Signed-off-by: Paul Moore <[email protected]>
security/selinux/hooks.c