mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
RDS: rds_conn_lookup() should factor in the struct net for a match
Only return a conn if the rds_conn_net(conn) matches the struct
net passed to rds_conn_lookup().
Fixes: 467fa15356 ("RDS-TCP: Support multiple RDS-TCP listen endpoints,
one per netns.")
Signed-off-by: Sowmini Varadhan <[email protected]>
Acked-by: Santosh Shilimkar <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
This commit is contained in:
parent
42ea4457ae
commit
8f384c0177
1 changed files with 5 additions and 4 deletions
|
|
@ -70,7 +70,8 @@ static struct hlist_head *rds_conn_bucket(__be32 laddr, __be32 faddr)
|
|||
} while (0)
|
||||
|
||||
/* rcu read lock must be held or the connection spinlock */
|
||||
static struct rds_connection *rds_conn_lookup(struct hlist_head *head,
|
||||
static struct rds_connection *rds_conn_lookup(struct net *net,
|
||||
struct hlist_head *head,
|
||||
__be32 laddr, __be32 faddr,
|
||||
struct rds_transport *trans)
|
||||
{
|
||||
|
|
@ -78,7 +79,7 @@ static struct rds_connection *rds_conn_lookup(struct hlist_head *head,
|
|||
|
||||
hlist_for_each_entry_rcu(conn, head, c_hash_node) {
|
||||
if (conn->c_faddr == faddr && conn->c_laddr == laddr &&
|
||||
conn->c_trans == trans) {
|
||||
conn->c_trans == trans && net == rds_conn_net(conn)) {
|
||||
ret = conn;
|
||||
break;
|
||||
}
|
||||
|
|
@ -132,7 +133,7 @@ static struct rds_connection *__rds_conn_create(struct net *net,
|
|||
if (!is_outgoing && otrans->t_type == RDS_TRANS_TCP)
|
||||
goto new_conn;
|
||||
rcu_read_lock();
|
||||
conn = rds_conn_lookup(head, laddr, faddr, trans);
|
||||
conn = rds_conn_lookup(net, head, laddr, faddr, trans);
|
||||
if (conn && conn->c_loopback && conn->c_trans != &rds_loop_transport &&
|
||||
laddr == faddr && !is_outgoing) {
|
||||
/* This is a looped back IB connection, and we're
|
||||
|
|
@ -239,7 +240,7 @@ new_conn:
|
|||
if (!is_outgoing && otrans->t_type == RDS_TRANS_TCP)
|
||||
found = NULL;
|
||||
else
|
||||
found = rds_conn_lookup(head, laddr, faddr, trans);
|
||||
found = rds_conn_lookup(net, head, laddr, faddr, trans);
|
||||
if (found) {
|
||||
trans->conn_free(conn->c_transport_data);
|
||||
kmem_cache_free(rds_conn_slab, conn);
|
||||
|
|
|
|||
Loading…
Reference in a new issue