mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-27 09:02:06 +00:00
tproxy: fix hash locking issue when using port redirection in __inet_inherit_port()
When __inet_inherit_port() is called on a tproxy connection the wrong locks are held for the inet_bind_bucket it is added to. __inet_inherit_port() made an implicit assumption that the listener's port number (and thus its bind bucket). Unfortunately, if you're using the TPROXY target to redirect skbs to a transparent proxy that assumption is not true anymore and things break. This patch adds code to __inet_inherit_port() so that it can handle this case by looking up or creating a new bind bucket for the child socket and updates callers of __inet_inherit_port() to gracefully handle __inet_inherit_port() failing. Reported by and original patch from Stephen Buck <stephen.buck@exinda.com>. See http://marc.info/?t=128169268200001&r=1&w=2 for the original discussion. Signed-off-by: KOVACS Krisztian <hidden@balabit.hu> Signed-off-by: Patrick McHardy <kaber@trash.net>
This commit is contained in:
parent
6006db84a9
commit
093d282321
6 changed files with 56 additions and 16 deletions
|
@ -245,7 +245,7 @@ static inline int inet_sk_listen_hashfn(const struct sock *sk)
|
|||
}
|
||||
|
||||
/* Caller must disable local BH processing. */
|
||||
extern void __inet_inherit_port(struct sock *sk, struct sock *child);
|
||||
extern int __inet_inherit_port(struct sock *sk, struct sock *child);
|
||||
|
||||
extern void inet_put_port(struct sock *sk);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue