diff options
author | Josh Durgin <josh.durgin@inktank.com> | 2012-05-16 13:40:51 -0700 |
---|---|---|
committer | Josh Durgin <josh.durgin@inktank.com> | 2012-05-16 13:40:51 -0700 |
commit | 1109c132385657eb79d68180950805b5b6d1db7a (patch) | |
tree | 1cb3e4108a1356e69a7812908935c09f75c7701e /src/librados | |
parent | 2f1f808811bd55b299b3477fc580eed62d3c1c25 (diff) | |
download | ceph-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.cc | 14 |
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"); |