Fix possible socket leak

This affects clients that connect but do not send a full CONNECT packet.
pull/2438/head
Roger A. Light 4 years ago
parent 5b2e181c9f
commit 9578a38f79

@ -282,7 +282,9 @@ int connect__on_authorised(struct mosquitto *context, void *auth_data_out, uint1
if(db.config->max_keepalive &&
(context->keepalive > db.config->max_keepalive || context->keepalive == 0)){
keepalive__remove(context);
context->keepalive = db.config->max_keepalive;
keepalive__add(context);
if(context->protocol == mosq_p_mqtt5){
if(mosquitto_property_add_int16(&connack_props, MQTT_PROP_SERVER_KEEP_ALIVE, context->keepalive)){
rc = MOSQ_ERR_NOMEM;
@ -295,6 +297,7 @@ int connect__on_authorised(struct mosquitto *context, void *auth_data_out, uint1
}
}
if(context->protocol == mosq_p_mqtt5){
if(context->listener->max_topic_alias > 0){
if(mosquitto_property_add_int16(&connack_props, MQTT_PROP_TOPIC_ALIAS_MAXIMUM, context->listener->max_topic_alias)){
@ -325,8 +328,6 @@ int connect__on_authorised(struct mosquitto *context, void *auth_data_out, uint1
free(auth_data_out);
auth_data_out = NULL;
keepalive__add(context);
mosquitto__set_state(context, mosq_cs_active);
rc = send__connack(context, connect_ack, CONNACK_ACCEPTED, connack_props);
mosquitto_property_free_all(&connack_props);
@ -621,10 +622,15 @@ int handle__connect(struct mosquitto *context)
goto handle_connect_error;
}
/* _remove here because net__socket_accept() uses _add and we must have the
* correct keepalive value */
keepalive__remove(context);
if(packet__read_uint16(&context->in_packet, &(context->keepalive))){
rc = MOSQ_ERR_PROTOCOL;
goto handle_connect_error;
}
keepalive__add(context);
if(protocol_version == PROTOCOL_VERSION_v5){
rc = property__read_all(CMD_CONNECT, &context->in_packet, &properties);

@ -248,6 +248,7 @@ struct mosquitto *net__socket_accept(struct mosquitto__listener_sock *listensock
}
mux__new(new_context);
keepalive__add(new_context);
return new_context;
}

Loading…
Cancel
Save