From 649b1d4253a1753c3f4d783a8e2d7b48f861db08 Mon Sep 17 00:00:00 2001 From: Gaurav Kumar Garg Date: Tue, 10 Jan 2017 15:25:13 +0100 Subject: [PATCH] rbd: bench-write should return error if io-size >= 4G Currently if user perform bench-write with io-size > 4G then its crashing because currently during memory allocation bufferptr taking size of buffer as a unsigned and io-size > 4G will overflow with unsigned. so during memset operation it will try to set io_size size of memory area pointed by bufferptr, (bufferptr area is: (4G - io_size)), so it will cause segmentation fault. Fix is to return error if io-size >= 4G Fixes: http://tracker.ceph.com/issues/18422 Reported-by: Jason Dillaman Signed-off-by: Gaurav Kumar Garg (cherry picked from commit 6ab73e5f420e89e19b52e39dab28fa4c94e00197) Conflicts: src/tools/rbd/action/BenchWrite.cc - jewel has rbd_bencher b(&image) while in master this has become rbd_bencher b(&image, io_type, io_size) --- src/tools/rbd/action/BenchWrite.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/tools/rbd/action/BenchWrite.cc b/src/tools/rbd/action/BenchWrite.cc index c012708896b8..47077c20fd86 100644 --- a/src/tools/rbd/action/BenchWrite.cc +++ b/src/tools/rbd/action/BenchWrite.cc @@ -126,6 +126,11 @@ int do_bench_write(librbd::Image& image, uint64_t io_size, return -EINVAL; } + if (io_size > std::numeric_limits::max()) { + std::cerr << "rbd: io-size should be less than 4G" << std::endl; + return -EINVAL; + } + rbd_bencher b(&image); std::cout << "bench-write " -- 2.47.3