struct lib_inst_data *li;
struct func_inst_data *fi;
char *path;
- u32 cnt, i = 0;
+ u32 cnt, j, i = 0;
if (get_string(mb, &path))
return NULL;
if (get_u32(mb, &cnt))
return NULL;
+ if (remained_mb(mb) / MIN_SIZE_FUNC_INST < cnt)
+ return NULL;
+
li = kmalloc(sizeof(*li), GFP_KERNEL);
if (li)
goto free_path;
return li;
free_func:
- for (i -= 1; i >= 0; --i)
- destroy_func_inst_data(li->func[i]);
+ for (j = 0; j < i; ++j)
+ destroy_func_inst_data(li->func[j]);
kfree(li->func);
free_li:
struct app_info_data *app_info;
struct func_inst_data *func;
struct lib_inst_data *lib;
- u32 cnt_func, i_func = 0;
- u32 cnt_lib, i_lib = 0;
+ u32 cnt_func, i_func = 0, cnt_lib, i_lib = 0, i;
app_info = create_app_info(mb);
if (app_info == NULL)
if (get_u32(mb, &cnt_func))
goto free_app_info;
+ if (remained_mb(mb) / MIN_SIZE_FUNC_INST < cnt_func)
+ goto free_app_info;
+
app_inst = kmalloc(sizeof(*app_inst), GFP_KERNEL);
if (app_inst == NULL)
goto free_app_info;
if (get_u32(mb, &cnt_lib))
goto free_func;
+ if (remained_mb(mb) / MIN_SIZE_LIB_INST < cnt_lib)
+ goto free_func;
+
app_inst->lib = kmalloc(sizeof(struct lib_inst_data *) * cnt_lib,
GFP_KERNEL);
if (app_inst->lib == NULL)
return app_inst;
free_lib:
- for (i_lib -= 1; i_lib >= 0; --i_lib)
- destroy_lib_inst_data(app_inst->lib[i_lib]);
+ for (i = 0; i < i_lib; ++i)
+ destroy_lib_inst_data(app_inst->lib[i]);
kfree(app_inst->lib);
free_func:
- for (i_func -= 1; i_func >= 0; --i_func)
- destroy_func_inst_data(app_inst->func[i_func]);
+ for (i = 0; i < i_func; ++i)
+ destroy_func_inst_data(app_inst->func[i]);
kfree(app_inst->func);
free_app_inst:
{
struct us_inst_data *ui;
struct app_inst_data *ai;
- u32 cnt, i = 0;
+ u32 cnt, j, i = 0;
if (get_u32(mb, &cnt))
return NULL;
- ui = kmalloc(sizeof(struct us_inst_data) * cnt, GFP_KERNEL);
+ if (remained_mb(mb) / MIN_SIZE_APP_INST < cnt)
+ return NULL;
+
+ ui = kmalloc(sizeof(struct us_inst_data), GFP_KERNEL);
if (ui == NULL)
return NULL;
return ui;
free_app_inst:
- for (i -= 1; i >= 0; --i)
- destroy_app_inst_data(ui->app_inst[i]);
+ for (j = 0; j < i; ++j)
+ destroy_app_inst_data(ui->app_inst[j]);
kfree(ui->app_inst);
free_ui: