@@ -1937,12 +1937,16 @@ static int cmp_dpa(const void *a, const void *b)
19371937static struct device * * scan_labels (struct nd_region * nd_region )
19381938{
19391939 int i , count = 0 ;
1940- struct device * dev , * * devs = NULL ;
1940+ struct device * dev , * * devs ;
19411941 struct nd_label_ent * label_ent , * e ;
19421942 struct nd_mapping * nd_mapping = & nd_region -> mapping [0 ];
19431943 struct nvdimm_drvdata * ndd = to_ndd (nd_mapping );
19441944 resource_size_t map_end = nd_mapping -> start + nd_mapping -> size - 1 ;
19451945
1946+ devs = kcalloc (2 , sizeof (dev ), GFP_KERNEL );
1947+ if (!devs )
1948+ return NULL ;
1949+
19461950 /* "safe" because create_namespace_pmem() might list_move() label_ent */
19471951 list_for_each_entry_safe (label_ent , e , & nd_mapping -> labels , list ) {
19481952 struct nd_namespace_label * nd_label = label_ent -> label ;
@@ -1961,12 +1965,14 @@ static struct device **scan_labels(struct nd_region *nd_region)
19611965 goto err ;
19621966 if (i < count )
19631967 continue ;
1964- __devs = kcalloc (count + 2 , sizeof (dev ), GFP_KERNEL );
1965- if (!__devs )
1966- goto err ;
1967- memcpy (__devs , devs , sizeof (dev ) * count );
1968- kfree (devs );
1969- devs = __devs ;
1968+ if (count ) {
1969+ __devs = kcalloc (count + 2 , sizeof (dev ), GFP_KERNEL );
1970+ if (!__devs )
1971+ goto err ;
1972+ memcpy (__devs , devs , sizeof (dev ) * count );
1973+ kfree (devs );
1974+ devs = __devs ;
1975+ }
19701976
19711977 dev = create_namespace_pmem (nd_region , nd_mapping , nd_label );
19721978 if (IS_ERR (dev )) {
@@ -1993,11 +1999,6 @@ static struct device **scan_labels(struct nd_region *nd_region)
19931999
19942000 /* Publish a zero-sized namespace for userspace to configure. */
19952001 nd_mapping_free_labels (nd_mapping );
1996-
1997- devs = kcalloc (2 , sizeof (dev ), GFP_KERNEL );
1998- if (!devs )
1999- goto err ;
2000-
20012002 nspm = kzalloc (sizeof (* nspm ), GFP_KERNEL );
20022003 if (!nspm )
20032004 goto err ;
@@ -2036,11 +2037,10 @@ static struct device **scan_labels(struct nd_region *nd_region)
20362037 return devs ;
20372038
20382039 err :
2039- if (devs ) {
2040- for (i = 0 ; devs [i ]; i ++ )
2041- namespace_pmem_release (devs [i ]);
2042- kfree (devs );
2043- }
2040+ for (i = 0 ; devs [i ]; i ++ )
2041+ namespace_pmem_release (devs [i ]);
2042+ kfree (devs );
2043+
20442044 return NULL ;
20452045}
20462046
0 commit comments