TESTS: Add a test that a target handles an unsolicited DATA-OUT correctly.
Send a large number of DATA-OUT PDUs that do not have a matching SCSI-COMMAND PDU and verify that the target responds correctly. Either by terminating the session or by just ignoring the data. Verify also that the target is not "surprised" and crashes. Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com>
This commit is contained in:
29
lib/socket.c
29
lib/socket.c
@@ -473,15 +473,21 @@ iscsi_service(struct iscsi_context *iscsi, int revents)
|
||||
iscsi_set_error(iscsi, "iscsi_service: POLLERR, "
|
||||
"Unknown socket error.");
|
||||
}
|
||||
iscsi->socket_status_cb(iscsi, SCSI_STATUS_ERROR, NULL,
|
||||
iscsi->connect_data);
|
||||
if (iscsi->socket_status_cb) {
|
||||
iscsi->socket_status_cb(iscsi, SCSI_STATUS_ERROR, NULL,
|
||||
iscsi->connect_data);
|
||||
iscsi->socket_status_cb = NULL;
|
||||
}
|
||||
return iscsi_service_reconnect_if_loggedin(iscsi);
|
||||
}
|
||||
if (revents & POLLHUP) {
|
||||
iscsi_set_error(iscsi, "iscsi_service: POLLHUP, "
|
||||
"socket error.");
|
||||
iscsi->socket_status_cb(iscsi, SCSI_STATUS_ERROR, NULL,
|
||||
iscsi->connect_data);
|
||||
if (iscsi->socket_status_cb) {
|
||||
iscsi->socket_status_cb(iscsi, SCSI_STATUS_ERROR, NULL,
|
||||
iscsi->connect_data);
|
||||
iscsi->socket_status_cb = NULL;
|
||||
}
|
||||
return iscsi_service_reconnect_if_loggedin(iscsi);
|
||||
}
|
||||
|
||||
@@ -496,16 +502,23 @@ iscsi_service(struct iscsi_context *iscsi, int revents)
|
||||
iscsi_set_error(iscsi, "iscsi_service: socket error "
|
||||
"%s(%d) while connecting.",
|
||||
strerror(err), err);
|
||||
iscsi->socket_status_cb(iscsi, SCSI_STATUS_ERROR,
|
||||
NULL, iscsi->connect_data);
|
||||
if (iscsi->socket_status_cb) {
|
||||
iscsi->socket_status_cb(iscsi, SCSI_STATUS_ERROR,
|
||||
NULL, iscsi->connect_data);
|
||||
iscsi->socket_status_cb = NULL;
|
||||
}
|
||||
|
||||
return iscsi_service_reconnect_if_loggedin(iscsi);
|
||||
}
|
||||
|
||||
DPRINTF(iscsi,2,"connection to %s established",iscsi->connected_portal);
|
||||
|
||||
iscsi->is_connected = 1;
|
||||
iscsi->socket_status_cb(iscsi, SCSI_STATUS_GOOD, NULL,
|
||||
iscsi->connect_data);
|
||||
if (iscsi->socket_status_cb) {
|
||||
iscsi->socket_status_cb(iscsi, SCSI_STATUS_GOOD, NULL,
|
||||
iscsi->connect_data);
|
||||
iscsi->socket_status_cb = NULL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user