coverity i2c Issue
Gedare Bloom
gedare at rtems.org
Tue Nov 25 19:28:18 UTC 2014
On Tue, Nov 25, 2014 at 2:03 PM, Joel Sherrill
<joel.sherrill at oarcorp.com> wrote:
> Hi
>
> These appear to be easy to address. I would appreciate someone
> addressing these:
>
> i2c/eeprom.c:
>
> 221
>
> 1. Condition address_bytes > 4, taking false branch
>
> 2. cond_at_most: Checking address_bytes > 4 implies that address_bytes has
> the value which may be up to 4 on the false branch.
> 222 if (address_bytes > EEPROM_MAX_ADDRESS_BYTES) {
> 223 rtems_set_errno_and_return_minus_one(ERANGE);
> 224 }
> 225
>
> 3. Condition page_size_in_bytes > 128, taking true branch
> 226 if (page_size_in_bytes > EEPROM_MAX_PAGE_SIZE) {
> 227 page_size_in_bytes = EEPROM_MAX_PAGE_SIZE;
> 228 }
> 229
>
> CID 1255517 (#1 of 1): Bad bit shift operation (BAD_SHIFT)4. large_shift: In
> expression size_in_bytes >> 8 * address_bytes, right shifting by more than
> 31 bits has undefined behavior. The shift amount, 8 * address_bytes, is as
> much as 32.
> 230 extra_address = size_in_bytes >> (8 * address_bytes);
>
> I think line 230 should be something like:
>
> if ( address_bytes == EEPROM_MAX_ADDRESS_BYTES )
> extra_address = 0;
> else
> extra_address = size_in_bytes >> (8 * address_bytes);
>
> That avoids the undefined behavior.
>
Yeah, but let Sebastian verify
> Comments
>
> --
> Joel Sherrill, Ph.D. Director of Research & Development
> joel.sherrill at OARcorp.com On-Line Applications Research
> Ask me about RTEMS: a free RTOS Huntsville AL 35805
> Support Available (256) 722-9985
>
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
More information about the devel
mailing list