mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-02 09:55:18 +00:00
storage: avoid memory leak on stat failure
Spotted by coverity. Triggers on failed stat, although I'm not sure how easy that condition is, so I'm not sure if this is a runtime memory hog. Regression introduced in commit 8077d64 (unreleased). * src/util/storage_file.c (virStorageFileGetMetadataFromFD): Reduce need for malloc, avoiding a leak.
This commit is contained in:
parent
9892f7bca0
commit
f515bab78d
@ -831,11 +831,6 @@ virStorageFileGetMetadataFromFD(const char *path,
|
|||||||
int ret = -1;
|
int ret = -1;
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
|
|
||||||
if (VIR_ALLOC_N(head, len) < 0) {
|
|
||||||
virReportOOMError();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset(meta, 0, sizeof (*meta));
|
memset(meta, 0, sizeof (*meta));
|
||||||
|
|
||||||
if (fstat(fd, &sb) < 0) {
|
if (fstat(fd, &sb) < 0) {
|
||||||
@ -847,13 +842,17 @@ virStorageFileGetMetadataFromFD(const char *path,
|
|||||||
|
|
||||||
/* No header to probe for directories */
|
/* No header to probe for directories */
|
||||||
if (S_ISDIR(sb.st_mode)) {
|
if (S_ISDIR(sb.st_mode)) {
|
||||||
ret = 0;
|
return 0;
|
||||||
goto cleanup;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lseek(fd, 0, SEEK_SET) == (off_t)-1) {
|
if (lseek(fd, 0, SEEK_SET) == (off_t)-1) {
|
||||||
virReportSystemError(errno, _("cannot seek to start of '%s'"), path);
|
virReportSystemError(errno, _("cannot seek to start of '%s'"), path);
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (VIR_ALLOC_N(head, len) < 0) {
|
||||||
|
virReportOOMError();
|
||||||
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((len = read(fd, head, len)) < 0) {
|
if ((len = read(fd, head, len)) < 0) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user