Skip to content

Commit

Permalink
[media] pvrusb2: check kmalloc return value
Browse files Browse the repository at this point in the history
 allows the driver to proceed and initialize the below two values
 even if the kmalloc() fails.
        hdw->std_info_enum.def.type_enum.value_names
        hdw->std_info_enum.def.type_enum.count

Signed-off-by: Xiaochen Wang <wangxiaochen0@gmail.com>
Signed-off-by: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Xiaochen Wang authored and Mauro Carvalho Chehab committed Mar 22, 2011
1 parent 228ee59 commit c05df8b
Showing 1 changed file with 16 additions and 8 deletions.
24 changes: 16 additions & 8 deletions drivers/media/video/pvrusb2/pvrusb2-hdw.c
Original file line number Diff line number Diff line change
Expand Up @@ -2850,15 +2850,23 @@ static void pvr2_hdw_internal_set_std_avail(struct pvr2_hdw *hdw)
PVR2_TRACE_ERROR_LEGS,
"WARNING: Failed to identify any viable standards");
}

/* Set up the dynamic control for this standard */
hdw->std_enum_names = kmalloc(sizeof(char *)*(std_cnt+1),GFP_KERNEL);
hdw->std_enum_names[0] = "none";
for (idx = 0; idx < std_cnt; idx++) {
hdw->std_enum_names[idx+1] =
newstd[idx].name;
}
// Set up the dynamic control for this standard
hdw->std_info_enum.def.type_enum.value_names = hdw->std_enum_names;
hdw->std_info_enum.def.type_enum.count = std_cnt+1;
if (hdw->std_enum_names) {
hdw->std_enum_names[0] = "none";
for (idx = 0; idx < std_cnt; idx++)
hdw->std_enum_names[idx+1] = newstd[idx].name;
hdw->std_info_enum.def.type_enum.value_names =
hdw->std_enum_names;
hdw->std_info_enum.def.type_enum.count = std_cnt+1;
} else {
pvr2_trace(
PVR2_TRACE_ERROR_LEGS,
"WARNING: Failed to alloc memory for names");
hdw->std_info_enum.def.type_enum.value_names = NULL;
hdw->std_info_enum.def.type_enum.count = 0;
}
hdw->std_defs = newstd;
hdw->std_enum_cnt = std_cnt+1;
hdw->std_enum_cur = 0;
Expand Down

0 comments on commit c05df8b

Please sign in to comment.