From 3754eedc9b1c22de6904bb665c42d043c33e485c Mon Sep 17 00:00:00 2001 From: Daniel Verkamp Date: Fri, 4 Aug 2017 14:18:13 -0700 Subject: [PATCH] bdev: validate I/O offset block alignment Change-Id: I33506d6b9ff09c45c057326f7339d742eebc45b4 Signed-off-by: Daniel Verkamp Reviewed-on: https://review.gerrithub.io/372861 Tested-by: SPDK Automated Test System Reviewed-by: Ben Walker Reviewed-by: Jim Harris --- lib/bdev/bdev.c | 5 +++++ test/unit/lib/bdev/bdev.c/bdev_ut.c | 3 +-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/bdev/bdev.c b/lib/bdev/bdev.c index 153f24018..d106fa0c2 100644 --- a/lib/bdev/bdev.c +++ b/lib/bdev/bdev.c @@ -742,6 +742,11 @@ spdk_bdev_has_write_cache(const struct spdk_bdev *bdev) static bool spdk_bdev_io_valid(struct spdk_bdev *bdev, uint64_t offset, uint64_t nbytes) { + /* Return failure if offset is not a multiple of bdev->blocklen */ + if (offset % bdev->blocklen) { + return false; + } + /* Return failure if nbytes is not a multiple of bdev->blocklen */ if (nbytes % bdev->blocklen) { return false; diff --git a/test/unit/lib/bdev/bdev.c/bdev_ut.c b/test/unit/lib/bdev/bdev.c/bdev_ut.c index 9a83d5b31..c1f82de20 100644 --- a/test/unit/lib/bdev/bdev.c/bdev_ut.c +++ b/test/unit/lib/bdev/bdev.c/bdev_ut.c @@ -316,8 +316,7 @@ io_valid_test(void) CU_ASSERT(spdk_bdev_io_valid(&bdev, 512, 1024) == true); /* Offset not a block multiple */ - /* TODO: add a check for this in spdk_bdev_io_valid() */ - /* CU_ASSERT(spdk_bdev_io_valid(&bdev, 3, 512) == false); */ + CU_ASSERT(spdk_bdev_io_valid(&bdev, 3, 512) == false); /* Length not a block multiple */ CU_ASSERT(spdk_bdev_io_valid(&bdev, 512, 3) == false);