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.
Unified · Split
| @@ -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; |