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