Commit Graph

13 Commits

Author SHA1 Message Date
Hao Wu f90c4fff00 IntelFrameworkModulePkg/IdeBusDxe: Fix undefined behavior in signed left shift
In function AtapiReadCapacity(), the following expression:
IdeDev->BlkIo.Media->LastBlock = (Data.LastLba3 << 24) |
  (Data.LastLba2 << 16) |
  (Data.LastLba1 << 8) |
  Data.LastLba0;

(There is also a similar case in this function.)

will involve undefined behavior in signed left shift operations.

Since Data.LastLbaX is of type UINT8, and
IdeDev->BlkIo.Media->LastBlock is of type UINT64. Therefore,
Data.LastLbaX will be promoted to int (32 bits, signed) first,
and then perform the left shift operation.

According to the C11 spec, Section 6.5.7:
4 The result of E1 << E2 is E1 left-shifted E2 bit positions; vacated
  bits are filled with zeros. If E1 has an unsigned type, the value
  of the result is E1 * 2^E2 , reduced modulo one more than the
  maximum value representable in the result type. If E1 has a signed
  type and nonnegative value, and E1 * 2^E2 is representable in the
  result type, then that is the resulting value; otherwise, the
  behavior is undefined.

So if bit 7 of Data.LastLba3 is 1, (Data.LastLba3 << 24) will be out of
the range within int type. The undefined behavior of the signed left shift
will lead to a potential of setting the high 32 bits of
IdeDev->BlkIo.Media->LastBlock to 1 during the cast from type int to type
UINT64.

This commit will add an explicit UINT32 type cast for Data.LastLba3 to
resolve this issue.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <hao.a.wu@intel.com>
Reviewed-by: Feng Tian <feng.tian@intel.com>
2017-04-13 08:59:24 +08:00
xli24 13314ba32a Add explicit type cast to suppress possible warning of precession loss.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10786 6f19259b-4bc3-4df7-8a09-765794883524
2010-08-10 07:47:20 +00:00
hhtian 180a5a35cb Update the copyright notice format
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10414 6f19259b-4bc3-4df7-8a09-765794883524
2010-04-23 16:28:26 +00:00
jchen20 9b90631549 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8668 6f19259b-4bc3-4df7-8a09-765794883524 2009-06-26 07:14:08 +00:00
jchen20 cd57e8889c Code scrub for IdeBusDxe driver
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8663 6f19259b-4bc3-4df7-8a09-765794883524
2009-06-26 03:23:08 +00:00
jchen20 630d580d53 Code scrub for IdeBusDxe driver
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8636 6f19259b-4bc3-4df7-8a09-765794883524
2009-06-24 02:21:05 +00:00
jchen20 e72ca438d4 Code scrub for IdeBusDxe driver and PeiS3Lib.(undergoing)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8609 6f19259b-4bc3-4df7-8a09-765794883524
2009-06-19 08:40:58 +00:00
hfang 261136bc32 fix Klocwork issues
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7926 6f19259b-4bc3-4df7-8a09-765794883524
2009-03-23 09:12:51 +00:00
hfang 97404058f1 Fixup for review
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7120 6f19259b-4bc3-4df7-8a09-765794883524
2008-12-25 08:59:02 +00:00
jji4 819d148893 Patch to remove STATIC modifier. This is on longer recommended by EFI Framework coding style. All duplicated symbols has been renamed accordingly.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6298 6f19259b-4bc3-4df7-8a09-765794883524
2008-10-30 06:08:09 +00:00
eric_tian 9ebae8aefa Fix a issue "BlockIOProtocolTest failed on Several Platforms during EFI and UEFI SCT". EFI_BLOCK_IO_PROTOCOL.ReadBlocks may assert when Reading block without media present in the device
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5763 6f19259b-4bc3-4df7-8a09-765794883524
2008-09-01 09:46:38 +00:00
vanjeff 03417d8d31 sync filename exactly.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5482 6f19259b-4bc3-4df7-8a09-765794883524
2008-07-16 02:54:54 +00:00
vanjeff 10fbfd85b9 rename to meet naming rules
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5397 6f19259b-4bc3-4df7-8a09-765794883524
2008-07-02 03:19:13 +00:00