diff options
author | Che-Liang Chiou <clchiou@chromium.org> | 2011-06-16 11:48:53 -0700 |
---|---|---|
committer | Simon Glass <sjg@chromium.org> | 2011-08-29 10:39:29 -0700 |
commit | fcb9de923b48decb424be5bf0d34a2542aa5f494 (patch) | |
tree | 38fa12a6826152d2fc8220f81fd17e995d4013f8 /lib/chromeos | |
parent | 9bb5586dad87d68082e703e767cca987afac78bd (diff) |
CHROMIUM: strictly check return value of block_{read,write}
The block device read/write functions return how many blocks are read or
written. Instead of checking whether the return value is negative, we
should check whether the requested number of blocks are actually read or
written.
BUG=chromium-os:16508
TEST=manual
make ARCH=arm \
CROSS_COMPILE=armv7a-cros-linux-gnueabi- \
USE_PRIVATE_LIBGCC=yes \
VBOOT=/build/tegra2_seaboard/usr \
chromeos_seaboard_onestop_config
make ARCH=arm \
CROSS_COMPILE=armv7a-cros-linux-gnueabi- \
USE_PRIVATE_LIBGCC=yes \
VBOOT=/build/tegra2_seaboard/usr \
all
Change-Id: Ie6faada844a7b92e8f2a477b5e64b99d5cbf40fa
Reviewed-on: http://gerrit.chromium.org/gerrit/2783
Tested-by: Che-Liang Chiou <clchiou@chromium.org>
Reviewed-by: Tom Wai-Hong Tam <waihong@chromium.org>
Diffstat (limited to 'lib/chromeos')
-rw-r--r-- | lib/chromeos/os_storage.c | 8 | ||||
-rw-r--r-- | lib/chromeos/vboot_nvstorage_helper.c | 13 |
2 files changed, 10 insertions, 11 deletions
diff --git a/lib/chromeos/os_storage.c b/lib/chromeos/os_storage.c index c06eb45e061..1bbd1cf8ac8 100644 --- a/lib/chromeos/os_storage.c +++ b/lib/chromeos/os_storage.c @@ -155,9 +155,9 @@ int BootDeviceReadLBA(uint64_t lba_start, uint64_t lba_count, void *buffer) if (lba_start + lba_count > bootdev_config.limit) return 1; /* read out of range */ - if (dev_desc->block_read(dev_desc->dev, + if (lba_count != dev_desc->block_read(dev_desc->dev, bootdev_config.offset + lba_start, lba_count, - buffer) < 0) + buffer)) return 1; /* error reading blocks */ return 0; @@ -174,9 +174,9 @@ int BootDeviceWriteLBA(uint64_t lba_start, uint64_t lba_count, if (lba_start + lba_count > bootdev_config.limit) return 1; /* read out of range */ - if (dev_desc->block_write(dev_desc->dev, + if (lba_count != dev_desc->block_write(dev_desc->dev, bootdev_config.offset + lba_start, lba_count, - buffer) < 0) + buffer)) return 1; /* error reading blocks */ return 0; diff --git a/lib/chromeos/vboot_nvstorage_helper.c b/lib/chromeos/vboot_nvstorage_helper.c index c18810eb5dc..4981221c954 100644 --- a/lib/chromeos/vboot_nvstorage_helper.c +++ b/lib/chromeos/vboot_nvstorage_helper.c @@ -46,7 +46,7 @@ static int load_nvcxt(block_dev_desc_t **dev_desc_ptr, uint8_t **buf_ptr) return -1; } - if (dev_desc->block_read(dev_desc->dev, NVCONTEXT_LBA, 1, buf) < 0) { + if (1 != dev_desc->block_read(dev_desc->dev, NVCONTEXT_LBA, 1, buf)) { VBDEBUG(PREFIX "block_read fail\n"); free(buf); return -1; @@ -75,18 +75,17 @@ int write_nvcontext(VbNvContext *nvcxt) { block_dev_desc_t *dev_desc; uint8_t *buf; - int ret = 0; + int nblk; if (load_nvcxt(&dev_desc, &buf)) return -1; memcpy(buf, nvcxt->raw, VBNV_BLOCK_SIZE); - ret = dev_desc->block_write(dev_desc->dev, NVCONTEXT_LBA, 1, buf); - free(buf); - - if (ret < 0) + nblk = dev_desc->block_write(dev_desc->dev, NVCONTEXT_LBA, 1, buf); + if (1 != nblk) VBDEBUG(PREFIX "block_write fail\n"); - return ret; + free(buf); + return 1 != nblk; } |