summaryrefslogtreecommitdiff
path: root/src/librados
diff options
context:
space:
mode:
authorJosh Durgin <josh.durgin@inktank.com>2012-05-16 13:40:51 -0700
committerJosh Durgin <josh.durgin@inktank.com>2012-05-16 13:40:51 -0700
commit1109c132385657eb79d68180950805b5b6d1db7a (patch)
tree1cb3e4108a1356e69a7812908935c09f75c7701e /src/librados
parent2f1f808811bd55b299b3477fc580eed62d3c1c25 (diff)
downloadceph-1109c132385657eb79d68180950805b5b6d1db7a.tar.gz
librados: avoid overflow in the return value of reads
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
Diffstat (limited to 'src/librados')
-rw-r--r--src/librados/IoCtxImpl.cc14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/librados/IoCtxImpl.cc b/src/librados/IoCtxImpl.cc
index 1455ccc7230..34c8d13a42b 100644
--- a/src/librados/IoCtxImpl.cc
+++ b/src/librados/IoCtxImpl.cc
@@ -680,6 +680,8 @@ int librados::IoCtxImpl::aio_operate(const object_t& oid,
int librados::IoCtxImpl::aio_read(const object_t oid, AioCompletionImpl *c,
bufferlist *pbl, size_t len, uint64_t off)
{
+ if (len > (size_t) INT_MAX)
+ return -EDOM;
Context *onack = new C_aio_Ack(c);
eversion_t ver;
@@ -698,6 +700,9 @@ int librados::IoCtxImpl::aio_read(const object_t oid, AioCompletionImpl *c,
int librados::IoCtxImpl::aio_read(const object_t oid, AioCompletionImpl *c,
char *buf, size_t len, uint64_t off)
{
+ if (len > (size_t) INT_MAX)
+ return -EDOM;
+
Context *onack = new C_aio_Ack(c);
c->is_read = true;
@@ -719,6 +724,8 @@ int librados::IoCtxImpl::aio_sparse_read(const object_t oid,
bufferlist *data_bl, size_t len,
uint64_t off)
{
+ if (len > (size_t) INT_MAX)
+ return -EDOM;
C_aio_sparse_read_Ack *onack = new C_aio_sparse_read_Ack(c);
onack->m = m;
@@ -1028,6 +1035,9 @@ int librados::IoCtxImpl::aio_exec(const object_t& oid, AioCompletionImpl *c,
int librados::IoCtxImpl::read(const object_t& oid,
bufferlist& bl, size_t len, uint64_t off)
{
+ if (len > (size_t) INT_MAX)
+ return -EDOM;
+
Mutex mylock("IoCtxImpl::read::mylock");
Cond cond;
bool done;
@@ -1035,6 +1045,7 @@ int librados::IoCtxImpl::read(const object_t& oid,
Context *onack = new C_SafeCond(&mylock, &cond, &done, &r);
eversion_t ver;
+
::ObjectOperation op;
::ObjectOperation *pop = prepare_assert_ops(&op);
@@ -1101,6 +1112,9 @@ int librados::IoCtxImpl::sparse_read(const object_t& oid,
bufferlist& data_bl, size_t len,
uint64_t off)
{
+ if (len > (size_t) INT_MAX)
+ return -EDOM;
+
bufferlist bl;
Mutex mylock("IoCtxImpl::read::mylock");