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 | 221 | info->mtd = info->subdev[0].mtd; |
| 222 | 222 | ret = 0; |
| 223 | 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 | 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 | 238 | info->mtd = mtd_concat_create(cdev, info->num_subdev, |
| 232 | 239 | plat->name); |
| 240 | + kfree(cdev); | |
| 233 | 241 | if (info->mtd == NULL) { |
| 234 | 242 | ret = -ENXIO; |
| 235 | 243 | goto err; |