|
@@ -1380,10 +1380,8 @@ int iscsi_decode_text_input(
|
|
|
char *key, *value;
|
|
|
struct iscsi_param *param;
|
|
|
|
|
|
- if (iscsi_extract_key_value(start, &key, &value) < 0) {
|
|
|
- kfree(tmpbuf);
|
|
|
- return -1;
|
|
|
- }
|
|
|
+ if (iscsi_extract_key_value(start, &key, &value) < 0)
|
|
|
+ goto free_buffer;
|
|
|
|
|
|
pr_debug("Got key: %s=%s\n", key, value);
|
|
|
|
|
@@ -1396,38 +1394,37 @@ int iscsi_decode_text_input(
|
|
|
|
|
|
param = iscsi_check_key(key, phase, sender, param_list);
|
|
|
if (!param) {
|
|
|
- if (iscsi_add_notunderstood_response(key,
|
|
|
- value, param_list) < 0) {
|
|
|
- kfree(tmpbuf);
|
|
|
- return -1;
|
|
|
- }
|
|
|
+ if (iscsi_add_notunderstood_response(key, value,
|
|
|
+ param_list) < 0)
|
|
|
+ goto free_buffer;
|
|
|
+
|
|
|
start += strlen(key) + strlen(value) + 2;
|
|
|
continue;
|
|
|
}
|
|
|
- if (iscsi_check_value(param, value) < 0) {
|
|
|
- kfree(tmpbuf);
|
|
|
- return -1;
|
|
|
- }
|
|
|
+ if (iscsi_check_value(param, value) < 0)
|
|
|
+ goto free_buffer;
|
|
|
|
|
|
start += strlen(key) + strlen(value) + 2;
|
|
|
|
|
|
if (IS_PSTATE_PROPOSER(param)) {
|
|
|
- if (iscsi_check_proposer_state(param, value) < 0) {
|
|
|
- kfree(tmpbuf);
|
|
|
- return -1;
|
|
|
- }
|
|
|
+ if (iscsi_check_proposer_state(param, value) < 0)
|
|
|
+ goto free_buffer;
|
|
|
+
|
|
|
SET_PSTATE_RESPONSE_GOT(param);
|
|
|
} else {
|
|
|
- if (iscsi_check_acceptor_state(param, value, conn) < 0) {
|
|
|
- kfree(tmpbuf);
|
|
|
- return -1;
|
|
|
- }
|
|
|
+ if (iscsi_check_acceptor_state(param, value, conn) < 0)
|
|
|
+ goto free_buffer;
|
|
|
+
|
|
|
SET_PSTATE_ACCEPTOR(param);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
kfree(tmpbuf);
|
|
|
return 0;
|
|
|
+
|
|
|
+free_buffer:
|
|
|
+ kfree(tmpbuf);
|
|
|
+ return -1;
|
|
|
}
|
|
|
|
|
|
int iscsi_encode_text_output(
|