From: xie xingguo Date: Mon, 7 Mar 2016 18:28:16 +0000 (+0800) Subject: common: buffer: put a guard for stat() syscall during read_file X-Git-Tag: v10.1.2~20^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e10c6e4841be8ee27d68e24517c3c0a995d1fa32;p=ceph.git common: buffer: put a guard for stat() syscall during read_file Signed-off-by: xie xingguo --- diff --git a/src/common/buffer.cc b/src/common/buffer.cc index d656419ac8cc..83fd7d7eb9a5 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -1985,7 +1985,15 @@ int buffer::list::read_file(const char *fn, std::string *error) struct stat st; memset(&st, 0, sizeof(st)); - ::fstat(fd, &st); + if (::fstat(fd, &st) < 0) { + int err = errno; + std::ostringstream oss; + oss << "bufferlist::read_file(" << fn << "): stat error: " + << cpp_strerror(err); + *error = oss.str(); + VOID_TEMP_FAILURE_RETRY(::close(fd)); + return -err; + } ssize_t ret = read_fd(fd, st.st_size); if (ret < 0) {