From: Yupeng Chen Date: Wed, 7 Mar 2018 05:17:21 +0000 (+0800) Subject: msg/async: size of EventCenter::file_events should be greater than fd. X-Git-Tag: v12.2.5~56^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f20f6be0dd447356e8f49338a4757de2af663945;p=ceph.git msg/async: size of EventCenter::file_events should be greater than fd. When trying to generate a file event from an FD greater than or equal to the size of file_events vector, make sure that the resized vector can hold the FD safely. Fixes: http://tracker.ceph.com/issues/23253 Signed-off-by: Yupeng Chen (cherry picked from commit 39023b5bfc48cea4ab12d432de285956dacc0571) --- diff --git a/src/msg/async/Event.cc b/src/msg/async/Event.cc index 690a245317f..c101022882e 100644 --- a/src/msg/async/Event.cc +++ b/src/msg/async/Event.cc @@ -207,7 +207,7 @@ int EventCenter::create_file_event(int fd, int mask, EventCallbackRef ctxt) int r = 0; if (fd >= nevent) { int new_size = nevent << 2; - while (fd > new_size) + while (fd >= new_size) new_size <<= 2; ldout(cct, 20) << __func__ << " event count exceed " << nevent << ", expand to " << new_size << dendl; r = driver->resize_events(new_size);