[rds-devel] [bug report] RDS/IB: Disallow connections less than RDS 3.1
Dan Carpenter
dan.carpenter at oracle.com
Mon Aug 6 01:05:21 PDT 2018
Hi RDMA devs, I get the following ancient static checker warning:
net/rds/rdma_transport.c:145 rds_rdma_cm_event_handler_cmn()
warn: 'conn' was already freed.
net/rds/rdma_transport.c
104 case RDMA_CM_EVENT_ESTABLISHED:
105 trans->cm_connect_complete(conn, event);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
rds_ib_cm_connect_complete() frees "conn" if the protocol version is too
old. Smatch says that this is the only caller so no good can come from
freeing it. Hopefully, it's checked somewhere else and we can just
delete the check in rds_ib_cm_connect_complete().
106 break;
107
108 case RDMA_CM_EVENT_REJECTED:
109 rdsdebug("Connection rejected: %s\n",
110 rdma_reject_msg(cm_id, event->status));
111 /* FALLTHROUGH */
112 case RDMA_CM_EVENT_ADDR_ERROR:
113 case RDMA_CM_EVENT_ROUTE_ERROR:
114 case RDMA_CM_EVENT_CONNECT_ERROR:
115 case RDMA_CM_EVENT_UNREACHABLE:
116 case RDMA_CM_EVENT_DEVICE_REMOVAL:
117 case RDMA_CM_EVENT_ADDR_CHANGE:
118 if (conn)
119 rds_conn_drop(conn);
120 break;
121
122 case RDMA_CM_EVENT_DISCONNECTED:
123 rdsdebug("DISCONNECT event - dropping connection "
124 "%pI6c->%pI6c\n", &conn->c_laddr,
125 &conn->c_faddr);
126 rds_conn_drop(conn);
127 break;
128
129 case RDMA_CM_EVENT_TIMEWAIT_EXIT:
130 if (conn) {
131 pr_info("RDS: RDMA_CM_EVENT_TIMEWAIT_EXIT event: dropping connection %pI6c->%pI6c\n",
132 &conn->c_laddr, &conn->c_faddr);
133 rds_conn_drop(conn);
134 }
135 break;
136
137 default:
138 /* things like device disconnect? */
139 printk(KERN_ERR "RDS: unknown event %u (%s)!\n",
140 event->event, rdma_event_msg(event->event));
141 break;
142 }
143
144 out:
145 if (conn)
146 mutex_unlock(&conn->c_cm_lock);
^^^^^^^^^^^^^^^
Use after free.
regards,
dan carpenter
More information about the rds-devel
mailing list