ipv4: Allow binding to non-local addresses if IP_TRANSPARENT is set
authorTóth László Attila <panther@balabit.hu>
Wed, 1 Oct 2008 14:31:24 +0000 (07:31 -0700)
committerDavid S. Miller <davem@davemloft.net>
Wed, 1 Oct 2008 14:31:24 +0000 (07:31 -0700)
Setting IP_TRANSPARENT is not really useful without allowing non-local
binds for the socket. To make user-space code simpler we allow these
binds even if IP_TRANSPARENT is set but IP_FREEBIND is not.

Signed-off-by: Tóth László Attila <panther@balabit.hu>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/af_inet.c

index 8a3ac1fa71a976e8c8f4c4f2dfd9fa87af2f9a99..1fbff5fa424101fb463905be71d1cc06299fa74c 100644 (file)
@@ -469,7 +469,7 @@ int inet_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len)
         */
        err = -EADDRNOTAVAIL;
        if (!sysctl_ip_nonlocal_bind &&
-           !inet->freebind &&
+           !(inet->freebind || inet->transparent) &&
            addr->sin_addr.s_addr != htonl(INADDR_ANY) &&
            chk_addr_ret != RTN_LOCAL &&
            chk_addr_ret != RTN_MULTICAST &&