|
@@ -2127,6 +2127,15 @@ static int spi_nor_parse_bfpt(struct spi_nor *nor,
|
|
params->size = bfpt.dwords[BFPT_DWORD(2)];
|
|
params->size = bfpt.dwords[BFPT_DWORD(2)];
|
|
if (params->size & BIT(31)) {
|
|
if (params->size & BIT(31)) {
|
|
params->size &= ~BIT(31);
|
|
params->size &= ~BIT(31);
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Prevent overflows on params->size. Anyway, a NOR of 2^64
|
|
|
|
+ * bits is unlikely to exist so this error probably means
|
|
|
|
+ * the BFPT we are reading is corrupted/wrong.
|
|
|
|
+ */
|
|
|
|
+ if (params->size > 63)
|
|
|
|
+ return -EINVAL;
|
|
|
|
+
|
|
params->size = 1ULL << params->size;
|
|
params->size = 1ULL << params->size;
|
|
} else {
|
|
} else {
|
|
params->size++;
|
|
params->size++;
|