OSDN Git Service

partitions/aix: fix usage of uninitialized lv_info and lvname structures
[sagit-ice-cold/kernel_xiaomi_msm8998.git] / block / partitions / aix.c
index f3ed7b2..8e7d358 100644 (file)
@@ -177,7 +177,7 @@ int aix_partition(struct parsed_partitions *state)
        u32 vgda_sector = 0;
        u32 vgda_len = 0;
        int numlvs = 0;
-       struct pvd *pvd;
+       struct pvd *pvd = NULL;
        struct lv_info {
                unsigned short pps_per_lv;
                unsigned short pps_found;
@@ -231,10 +231,11 @@ int aix_partition(struct parsed_partitions *state)
                                if (lvip[i].pps_per_lv)
                                        foundlvs += 1;
                        }
+                       /* pvd loops depend on n[].name and lvip[].pps_per_lv */
+                       pvd = alloc_pvd(state, vgda_sector + 17);
                }
                put_dev_sector(sect);
        }
-       pvd = alloc_pvd(state, vgda_sector + 17);
        if (pvd) {
                int numpps = be16_to_cpu(pvd->pp_count);
                int psn_part1 = be32_to_cpu(pvd->psn_part1);
@@ -281,10 +282,14 @@ int aix_partition(struct parsed_partitions *state)
                                next_lp_ix += 1;
                }
                for (i = 0; i < state->limit; i += 1)
-                       if (lvip[i].pps_found && !lvip[i].lv_is_contiguous)
+                       if (lvip[i].pps_found && !lvip[i].lv_is_contiguous) {
+                               char tmp[sizeof(n[i].name) + 1]; // null char
+
+                               snprintf(tmp, sizeof(tmp), "%s", n[i].name);
                                pr_warn("partition %s (%u pp's found) is "
                                        "not contiguous\n",
-                                       n[i].name, lvip[i].pps_found);
+                                       tmp, lvip[i].pps_found);
+                       }
                kfree(pvd);
        }
        kfree(n);