[media] pvrusb2: check kmalloc return value
authorXiaochen Wang <wangxiaochen0@gmail.com>
Mon, 14 Mar 2011 01:32:53 +0000 (22:32 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 22 Mar 2011 07:54:37 +0000 (04:54 -0300)
 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>
drivers/media/video/pvrusb2/pvrusb2-hdw.c

index d33dd61..9d0dd08 100644 (file)
@@ -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;