mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-25 02:49:32 +03:00
Fix file descriptor handling in zdb_copy_object()
Coverity found a file descriptor leak. Eyeballing it showed that we had no handling for the `open()` call failing either. We can address both of these at once. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Neal Gompa <ngompa@datto.com> Signed-off-by: Richard Yao <richard.yao@alumni.stonybrook.edu> Closes #13862
This commit is contained in:
parent
13f2b8fb92
commit
7195c04d98
@ -4737,6 +4737,8 @@ zdb_copy_object(objset_t *os, uint64_t srcobj, char *destfile)
|
||||
}
|
||||
|
||||
int fd = open(destfile, O_WRONLY | O_CREAT | O_TRUNC, 0644);
|
||||
if (fd == -1)
|
||||
return (errno);
|
||||
/*
|
||||
* We cap the size at 1 mebibyte here to prevent
|
||||
* allocation failures and nigh-infinite printing if the
|
||||
@ -4746,6 +4748,7 @@ zdb_copy_object(objset_t *os, uint64_t srcobj, char *destfile)
|
||||
offset = 0;
|
||||
char *buf = kmem_alloc(oursize, KM_NOSLEEP);
|
||||
if (buf == NULL) {
|
||||
(void) close(fd);
|
||||
return (ENOMEM);
|
||||
}
|
||||
|
||||
@ -4755,6 +4758,7 @@ zdb_copy_object(objset_t *os, uint64_t srcobj, char *destfile)
|
||||
if (err != 0) {
|
||||
(void) printf("got error %u from dmu_read\n", err);
|
||||
kmem_free(buf, oursize);
|
||||
(void) close(fd);
|
||||
return (err);
|
||||
}
|
||||
if (dump_opt['v'] > 3) {
|
||||
|
Loading…
Reference in New Issue
Block a user