diff options
Diffstat (limited to 'drivers/target/iscsi/iscsi_target_parameters.c')
| -rw-r--r-- | drivers/target/iscsi/iscsi_target_parameters.c | 43 | 
1 files changed, 16 insertions, 27 deletions
diff --git a/drivers/target/iscsi/iscsi_target_parameters.c b/drivers/target/iscsi/iscsi_target_parameters.c index 252e246cf51..497b2e718a7 100644 --- a/drivers/target/iscsi/iscsi_target_parameters.c +++ b/drivers/target/iscsi/iscsi_target_parameters.c @@ -545,13 +545,13 @@ int iscsi_copy_param_list(  	struct iscsi_param_list *src_param_list,  	int leading)  { -	struct iscsi_param *new_param = NULL, *param = NULL; +	struct iscsi_param *param = NULL; +	struct iscsi_param *new_param = NULL;  	struct iscsi_param_list *param_list = NULL;  	param_list = kzalloc(sizeof(struct iscsi_param_list), GFP_KERNEL);  	if (!param_list) { -		pr_err("Unable to allocate memory for" -				" struct iscsi_param_list.\n"); +		pr_err("Unable to allocate memory for struct iscsi_param_list.\n");  		goto err_out;  	}  	INIT_LIST_HEAD(¶m_list->param_list); @@ -567,8 +567,17 @@ int iscsi_copy_param_list(  		new_param = kzalloc(sizeof(struct iscsi_param), GFP_KERNEL);  		if (!new_param) { -			pr_err("Unable to allocate memory for" -				" struct iscsi_param.\n"); +			pr_err("Unable to allocate memory for struct iscsi_param.\n"); +			goto err_out; +		} + +		new_param->name = kstrdup(param->name, GFP_KERNEL); +		new_param->value = kstrdup(param->value, GFP_KERNEL); +		if (!new_param->value || !new_param->name) { +			kfree(new_param->value); +			kfree(new_param->name); +			kfree(new_param); +			pr_err("Unable to allocate memory for parameter name/value.\n");  			goto err_out;  		} @@ -580,32 +589,12 @@ int iscsi_copy_param_list(  		new_param->use = param->use;  		new_param->type_range = param->type_range; -		new_param->name = kzalloc(strlen(param->name) + 1, GFP_KERNEL); -		if (!new_param->name) { -			pr_err("Unable to allocate memory for" -				" parameter name.\n"); -			goto err_out; -		} - -		new_param->value = kzalloc(strlen(param->value) + 1, -				GFP_KERNEL); -		if (!new_param->value) { -			pr_err("Unable to allocate memory for" -				" parameter value.\n"); -			goto err_out; -		} - -		memcpy(new_param->name, param->name, strlen(param->name)); -		new_param->name[strlen(param->name)] = '\0'; -		memcpy(new_param->value, param->value, strlen(param->value)); -		new_param->value[strlen(param->value)] = '\0'; -  		list_add_tail(&new_param->p_list, ¶m_list->param_list);  	} -	if (!list_empty(¶m_list->param_list)) +	if (!list_empty(¶m_list->param_list)) {  		*dst_param_list = param_list; -	else { +	} else {  		pr_err("No parameters allocated.\n");  		goto err_out;  	}  |