History

mtd: sa1100: avoid VLA in sa1100_setup_mtd

Enabling -Wvla found another variable-length array with randconfig testing: drivers/mtd/maps/sa1100-flash.c: In function 'sa1100_setup_mtd': drivers/mtd/maps/sa1100-flash.c:224:10: error: ISO C90 forbids variable length array 'cdev' [-Werror=vla] Dynamically allocate the cdev array passed to mtd_concat_create() instead of using a VLA.

Boris Brezillon committed 8 years ago

Commit ba26cd71 parent 90c31cb1 file · +9 −1Browse files

Unified · Split

drivers/mtd/maps/sa1100-flash.c+9−1
@@ -221,7 +221,14 @@ static struct sa_info *sa1100_setup_mtd(struct platform_device *pdev, · 220 unmodified lines
221 info->mtd = info->subdev[0].mtd;221 info->mtd = info->subdev[0].mtd;
222 ret = 0;222 ret = 0;
223 } else if (info->num_subdev > 1) {223 } else if (info->num_subdev > 1) {
224 struct mtd_info *cdev[nr];224 struct mtd_info **cdev;
225
226 cdev = kmalloc_array(nr, sizeof(*cdev), GFP_KERNEL);
227 if (!cdev) {
228 ret = -ENOMEM;
229 goto err;
230 }
231
225 /*232 /*
226 * We detected multiple devices. Concatenate them together.233 * We detected multiple devices. Concatenate them together.
227 */234 */
@@ -230,6 +237,7 @@ static struct sa_info *sa1100_setup_mtd(struct platform_device *pdev, · 2 unmodified lines
230 237
231 info->mtd = mtd_concat_create(cdev, info->num_subdev,238 info->mtd = mtd_concat_create(cdev, info->num_subdev,
232 plat->name);239 plat->name);
240 kfree(cdev);
233 if (info->mtd == NULL) {241 if (info->mtd == NULL) {
234 ret = -ENXIO;242 ret = -ENXIO;
235 goto err;243 goto err;