]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
common: buffer: put a guard for stat() syscall during read_file
authorxie xingguo <xie.xingguo@zte.com.cn>
Mon, 7 Mar 2016 18:28:16 +0000 (02:28 +0800)
committerxie xingguo <xie.xingguo@zte.com.cn>
Sat, 12 Mar 2016 11:32:43 +0000 (19:32 +0800)
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
src/common/buffer.cc

index d656419ac8cc2e18b8e0c59f4c63efb00a9b9536..83fd7d7eb9a52f2cecc6dbfef15121fc14763639 100644 (file)
@@ -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) {