]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
FileStore: potential memory leak if _fgetattrs fails 6420/head
authorxiexingguo <258156334@qq.com>
Mon, 26 Oct 2015 10:38:01 +0000 (18:38 +0800)
committerNathan Cutler <ncutler@suse.com>
Thu, 29 Oct 2015 06:39:34 +0000 (07:39 +0100)
Memory leak happens if _fgetattrs encounters some error and simply returns.
Fixes: #13597
Signed-off-by: xie xingguo <xie.xingguo@zte.com.cn>
(cherry picked from commit ace7dd096b58a88e25ce16f011aed09269f2a2b4)

src/os/FileStore.cc

index f6c3bb872a2ea0ad2be85c72a3a9b25f24a670a2..4f0772e9b646ea4831ad17af7d2ea994647b6b70 100644 (file)
@@ -3780,6 +3780,7 @@ int FileStore::_fgetattrs(int fd, map<string,bufferptr>& aset)
     dout(10) << " -ERANGE, got " << len << dendl;
     if (len < 0) {
       assert(!m_filestore_fail_eio || len != -EIO);
+      delete[] names2;
       return len;
     }
     name = names2;
@@ -3798,8 +3799,10 @@ int FileStore::_fgetattrs(int fd, map<string,bufferptr>& aset)
       if (*name) {
         dout(20) << "fgetattrs " << fd << " getting '" << name << "'" << dendl;
         int r = _fgetattr(fd, attrname, aset[name]);
-        if (r < 0)
+        if (r < 0) {
+         delete[] names2;
          return r;
+        }
       }
     }
     name += strlen(name) + 1;