[PATCH] nvmem: layouts: onie-tlv: fix hang on unknown types

Andre Heider posted 1 patch 1 month ago
There is a newer version of this series
drivers/nvmem/layouts/onie-tlv.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
[PATCH] nvmem: layouts: onie-tlv: fix hang on unknown types
Posted by Andre Heider 1 month ago
The EEPROM on my board has a vendor specific entry of type 0x41. When
stumbling upon that, this driver hangs in an endless loop.

Fix it by keep inrementing the offset on unknown entries, so the loop
will eventually stop.

Signed-off-by: Andre Heider <a.heider@gmail.com>
---
 drivers/nvmem/layouts/onie-tlv.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/nvmem/layouts/onie-tlv.c b/drivers/nvmem/layouts/onie-tlv.c
index 0967a32319a28..8b0f3c1b8a0e9 100644
--- a/drivers/nvmem/layouts/onie-tlv.c
+++ b/drivers/nvmem/layouts/onie-tlv.c
@@ -119,7 +119,7 @@ static int onie_tlv_add_cells(struct device *dev, struct nvmem_device *nvmem,
 
 		cell.name = onie_tlv_cell_name(tlv.type);
 		if (!cell.name)
-			continue;
+			goto next;
 
 		cell.offset = hdr_len + offset + sizeof(tlv.type) + sizeof(tlv.len);
 		cell.bytes = tlv.len;
@@ -132,6 +132,7 @@ static int onie_tlv_add_cells(struct device *dev, struct nvmem_device *nvmem,
 			return ret;
 		}
 
+next:
 		offset += sizeof(tlv) + tlv.len;
 	}
 
-- 
2.53.0
Re: [PATCH] nvmem: layouts: onie-tlv: fix hang on unknown types
Posted by Miquel Raynal 1 month ago
Hi Andre,

On 07/05/2026 at 19:18:59 +02, Andre Heider <a.heider@gmail.com> wrote:

> The EEPROM on my board has a vendor specific entry of type 0x41. When
> stumbling upon that, this driver hangs in an endless loop.
>
> Fix it by keep inrementing the offset on unknown entries, so the loop
> will eventually stop.
>
> Signed-off-by: Andre Heider <a.heider@gmail.com>

Needs a fixes tag, otherwise:

Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>

Thanks,
Miquèl
[PATCH v2] nvmem: layouts: onie-tlv: fix hang on unknown types
Posted by Andre Heider 1 month ago
The EEPROM on my board has a vendor specific entry of type 0x41. When
stumbling upon that, this driver hangs in an endless loop.

Fix it by keep incrementing the offset on unknown entries, so the loop
will eventually stop.

Fixes: d3c0d12f6474 ("nvmem: layouts: onie-tlv: Add new layout driver")
Signed-off-by: Andre Heider <a.heider@gmail.com>
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
---

Thanks for the quick review, Miquel!

Added the Fixes: tag as requested, it dates back to the initial commit.

Regards,
Andre

 drivers/nvmem/layouts/onie-tlv.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/nvmem/layouts/onie-tlv.c b/drivers/nvmem/layouts/onie-tlv.c
index 0967a32319a28..8b0f3c1b8a0e9 100644
--- a/drivers/nvmem/layouts/onie-tlv.c
+++ b/drivers/nvmem/layouts/onie-tlv.c
@@ -119,7 +119,7 @@ static int onie_tlv_add_cells(struct device *dev, struct nvmem_device *nvmem,
 
 		cell.name = onie_tlv_cell_name(tlv.type);
 		if (!cell.name)
-			continue;
+			goto next;
 
 		cell.offset = hdr_len + offset + sizeof(tlv.type) + sizeof(tlv.len);
 		cell.bytes = tlv.len;
@@ -132,6 +132,7 @@ static int onie_tlv_add_cells(struct device *dev, struct nvmem_device *nvmem,
 			return ret;
 		}
 
+next:
 		offset += sizeof(tlv) + tlv.len;
 	}
 
-- 
2.53.0
Re: [PATCH v2] nvmem: layouts: onie-tlv: fix hang on unknown types
Posted by Srinivas Kandagatla 3 weeks, 3 days ago
On Fri, 08 May 2026 07:50:00 +0200, Andre Heider wrote:
> The EEPROM on my board has a vendor specific entry of type 0x41. When
> stumbling upon that, this driver hangs in an endless loop.
> 
> Fix it by keep incrementing the offset on unknown entries, so the loop
> will eventually stop.
> 
> 
> [...]

Applied, thanks!

[1/1] nvmem: layouts: onie-tlv: fix hang on unknown types
      commit: 7749044c03a3af8b0f777183710487deb426b651

Best regards,
-- 
Srinivas Kandagatla <srini@kernel.org>
Re: [PATCH v2] nvmem: layouts: onie-tlv: fix hang on unknown types
Posted by Srinivas Kandagatla 3 weeks, 3 days ago

On 5/8/26 6:50 AM, Andre Heider wrote:
> The EEPROM on my board has a vendor specific entry of type 0x41. When
> stumbling upon that, this driver hangs in an endless loop.
> 
> Fix it by keep incrementing the offset on unknown entries, so the loop
> will eventually stop.
> 
> Fixes: d3c0d12f6474 ("nvmem: layouts: onie-tlv: Add new layout driver")

This needs Stable tag as well, Am applying this for now but, pl make
sure that a Stable tag is added to fixes next time.

--srini

> Signed-off-by: Andre Heider <a.heider@gmail.com>
> Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
> ---
> 
> Thanks for the quick review, Miquel!
> 
> Added the Fixes: tag as requested, it dates back to the initial commit.
> 
> Regards,
> Andre
> 
>  drivers/nvmem/layouts/onie-tlv.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/nvmem/layouts/onie-tlv.c b/drivers/nvmem/layouts/onie-tlv.c
> index 0967a32319a28..8b0f3c1b8a0e9 100644
> --- a/drivers/nvmem/layouts/onie-tlv.c
> +++ b/drivers/nvmem/layouts/onie-tlv.c
> @@ -119,7 +119,7 @@ static int onie_tlv_add_cells(struct device *dev, struct nvmem_device *nvmem,
>  
>  		cell.name = onie_tlv_cell_name(tlv.type);
>  		if (!cell.name)
> -			continue;
> +			goto next;
>  
>  		cell.offset = hdr_len + offset + sizeof(tlv.type) + sizeof(tlv.len);
>  		cell.bytes = tlv.len;
> @@ -132,6 +132,7 @@ static int onie_tlv_add_cells(struct device *dev, struct nvmem_device *nvmem,
>  			return ret;
>  		}
>  
> +next:
>  		offset += sizeof(tlv) + tlv.len;
>  	}
>