Skip to content

Commit

Permalink
tipc: ignore requests when the connection state is not CONNECTED
Browse files Browse the repository at this point in the history
In tipc_conn_sendmsg(), we first queue the request to the outqueue
followed by the connection state check. If the connection is not
connected, we should not queue this message.

In this commit, we reject the messages if the connection state is
not CF_CONNECTED.

Acked-by: Ying Xue <ying.xue@windriver.com>
Acked-by: Jon Maloy <jon.maloy@ericsson.com>
Tested-by: John Thompson <thompa.atl@gmail.com>
Signed-off-by: Parthasarathy Bhuvaragan <parthasarathy.bhuvaragan@ericsson.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Parthasarathy Bhuvaragan authored and davem330 committed Jan 24, 2017
1 parent 9dc3abd commit 4c887aa
Showing 1 changed file with 7 additions and 6 deletions.
13 changes: 7 additions & 6 deletions net/tipc/server.c
Original file line number Diff line number Diff line change
Expand Up @@ -453,6 +453,11 @@ int tipc_conn_sendmsg(struct tipc_server *s, int conid,
if (!con)
return -EINVAL;

if (!test_bit(CF_CONNECTED, &con->flags)) {
conn_put(con);
return 0;
}

e = tipc_alloc_entry(data, len);
if (!e) {
conn_put(con);
Expand All @@ -466,12 +471,8 @@ int tipc_conn_sendmsg(struct tipc_server *s, int conid,
list_add_tail(&e->list, &con->outqueue);
spin_unlock_bh(&con->outqueue_lock);

if (test_bit(CF_CONNECTED, &con->flags)) {
if (!queue_work(s->send_wq, &con->swork))
conn_put(con);
} else {
if (!queue_work(s->send_wq, &con->swork))
conn_put(con);
}
return 0;
}

Expand All @@ -495,7 +496,7 @@ static void tipc_send_to_sock(struct tipc_conn *con)
int ret;

spin_lock_bh(&con->outqueue_lock);
while (1) {
while (test_bit(CF_CONNECTED, &con->flags)) {
e = list_entry(con->outqueue.next, struct outqueue_entry,
list);
if ((struct list_head *) e == &con->outqueue)
Expand Down

0 comments on commit 4c887aa

Please sign in to comment.