From ea6f9346e602cbf83dfbdda5e2db3c725a5dcd94 Mon Sep 17 00:00:00 2001 From: Hugo Villeneuve Date: Wed, 5 Nov 2025 11:50:16 -0500 Subject: [PATCH] tlv_eeprom: make sure key exist when deleting it Signed-off-by: Hugo Villeneuve --- src/tlv_eeprom.c | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/tlv_eeprom.c b/src/tlv_eeprom.c index 7ceae37..a1a5d96 100644 --- a/src/tlv_eeprom.c +++ b/src/tlv_eeprom.c @@ -438,20 +438,23 @@ bool tlvinfo_delete_tlv(u8 *eeprom, u8 code) struct tlvinfo_tlv *eeprom_tlv; // Find the TLV and then move all following TLVs "forward" - if (tlvinfo_find_tlv(eeprom, code, &eeprom_index)) { - eeprom_tlv = to_entry(&eeprom[eeprom_index]); - tlength = ENT_SIZE + eeprom_tlv->length; - memcpy(&eeprom[eeprom_index], &eeprom[eeprom_index + tlength], - HDR_SIZE + - be16_to_cpu(eeprom_hdr->totallen) - eeprom_index - - tlength); - eeprom_hdr->totallen = - cpu_to_be16(be16_to_cpu(eeprom_hdr->totallen) - - tlength); - update_crc(eeprom); - return true; + if (!tlvinfo_find_tlv(eeprom, code, &eeprom_index)) { + printf("ERROR: missing TLV key: $%02X\n", code); + return false; } - return false; + + eeprom_tlv = to_entry(&eeprom[eeprom_index]); + tlength = ENT_SIZE + eeprom_tlv->length; + memcpy(&eeprom[eeprom_index], &eeprom[eeprom_index + tlength], + HDR_SIZE + + be16_to_cpu(eeprom_hdr->totallen) - eeprom_index - + tlength); + eeprom_hdr->totallen = + cpu_to_be16(be16_to_cpu(eeprom_hdr->totallen) - + tlength); + update_crc(eeprom); + + return true; } /** -- 2.20.1