Re: [PATCH i2c-tools] decode-dimms: correctly check for out-of-bounds vendor id

2015-06-01 Thread Jean Delvare
Hi Lubomir,

On Sat, 30 May 2015 13:03:32 +0200, Lubomir Rintel wrote:
 ---
  eeprom/decode-dimms | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
 
 diff --git a/eeprom/decode-dimms b/eeprom/decode-dimms
 index 3a50c07..4a861bd 100755
 --- a/eeprom/decode-dimms
 +++ b/eeprom/decode-dimms
 @@ -345,7 +345,7 @@ sub manufacturer_ddr3($$)
   my $manufacturer;
  
   return Invalid if parity($code) != 1;
 - return Unknown if ($code  0x7F) - 1  $vendors[$count  0x7F];
 + return Unknown if ($code  0x7F)  @{$vendors[$count  0x7F]};
   $manufacturer = $vendors[$count  0x7F][($code  0x7F) - 1];
   $manufacturer =~ s/ \(former .*\)$// if $opt_side_by_side;
   $manufacturer .= ? (Invalid parity) if parity($count) != 1;

Good catch, not sure how we managed to not notice this bug for years
despite the surrounding code being modified several times. Did you find
it by code inspection or did you actually hit the bug on one of your
memory modules?

Note that I would prefer
... if ($code  0x7F) - 1 = @{$vendors[$count  0x7F]};
It is equivalent but more obviously correct as it matches the array
access on the following line.

Also, even after your fix, I think the code is not completely safe, as
we still don't check for ($code  0x7F) being 0, nor do we verify that
$count  0x7F does not exceed the number of elements in @vendors. I'll
fix that.

Thanks,
-- 
Jean Delvare
SUSE L3 Support
--
To unsubscribe from this list: send the line unsubscribe linux-i2c in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH i2c-tools] decode-dimms: correctly check for out-of-bounds vendor id

2015-05-30 Thread Lubomir Rintel
---
 eeprom/decode-dimms | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/eeprom/decode-dimms b/eeprom/decode-dimms
index 3a50c07..4a861bd 100755
--- a/eeprom/decode-dimms
+++ b/eeprom/decode-dimms
@@ -345,7 +345,7 @@ sub manufacturer_ddr3($$)
my $manufacturer;
 
return Invalid if parity($code) != 1;
-   return Unknown if ($code  0x7F) - 1  $vendors[$count  0x7F];
+   return Unknown if ($code  0x7F)  @{$vendors[$count  0x7F]};
$manufacturer = $vendors[$count  0x7F][($code  0x7F) - 1];
$manufacturer =~ s/ \(former .*\)$// if $opt_side_by_side;
$manufacturer .= ? (Invalid parity) if parity($count) != 1;
-- 
2.4.0

--
To unsubscribe from this list: send the line unsubscribe linux-i2c in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html