Browse Source

TPROXY: fill struct flowi->flags in udp_sendmsg()

    udp_sendmsg() didn't fill struct flowi->flags, which means that
    the route lookup would fail for non-local IPs even if the
    IP_TRANSPARENT sockopt was set.

    This prevents sendto() to work properly for UDP sockets, whereas
    bind(foreign-ip) + connect() + send() worked fine.

Signed-off-by: Balazs Scheidler <bazsi@balabit.hu>
Signed-off-by: David S. Miller <davem@davemloft.net>
Balazs Scheidler 16 years ago
parent
commit
a134f85c13
1 changed files with 1 additions and 0 deletions
  1. 1 0
      net/ipv4/udp.c

+ 1 - 0
net/ipv4/udp.c

@@ -633,6 +633,7 @@ int udp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
 						.saddr = saddr,
 						.saddr = saddr,
 						.tos = tos } },
 						.tos = tos } },
 				    .proto = sk->sk_protocol,
 				    .proto = sk->sk_protocol,
+				    .flags = inet_sk_flowi_flags(sk),
 				    .uli_u = { .ports =
 				    .uli_u = { .ports =
 					       { .sport = inet->sport,
 					       { .sport = inet->sport,
 						 .dport = dport } } };
 						 .dport = dport } } };