DLM: fix NULL pointer dereference in send_to_sock()
authortsutomu.owa@toshiba.co.jp <tsutomu.owa@toshiba.co.jp>
Tue, 12 Sep 2017 09:02:10 +0000 (09:02 +0000)
committerDavid Teigland <teigland@redhat.com>
Mon, 25 Sep 2017 17:45:21 +0000 (12:45 -0500)
The writequeue and writequeue_lock member of othercon was not initialized.
If lowcomms_state_change() is called from network layer, othercon->swork
may be scheduled. In this case, send_to_sock() will generate a NULL pointer
reference. We avoid this problem by correctly initializing writequeue and
writequeue_lock member of othercon.

Signed-off-by: Tadashi Miyauchi <miyauchi@toshiba-tops.co.jp>
Signed-off-by: Tsutomu Owa <tsutomu.owa@toshiba.co.jp>
Signed-off-by: David Teigland <teigland@redhat.com>
fs/dlm/lowcomms.c

index c64e39f..0570785 100644 (file)
@@ -802,6 +802,8 @@ static int tcp_accept_from_sock(struct connection *con)
                        othercon->nodeid = nodeid;
                        othercon->rx_action = receive_from_sock;
                        mutex_init(&othercon->sock_mutex);
+                       INIT_LIST_HEAD(&othercon->writequeue);
+                       spin_lock_init(&othercon->writequeue_lock);
                        INIT_WORK(&othercon->swork, process_send_sockets);
                        INIT_WORK(&othercon->rwork, process_recv_sockets);
                        set_bit(CF_IS_OTHERCON, &othercon->flags);
@@ -920,6 +922,8 @@ static int sctp_accept_from_sock(struct connection *con)
                        othercon->nodeid = nodeid;
                        othercon->rx_action = receive_from_sock;
                        mutex_init(&othercon->sock_mutex);
+                       INIT_LIST_HEAD(&othercon->writequeue);
+                       spin_lock_init(&othercon->writequeue_lock);
                        INIT_WORK(&othercon->swork, process_send_sockets);
                        INIT_WORK(&othercon->rwork, process_recv_sockets);
                        set_bit(CF_IS_OTHERCON, &othercon->flags);