aboutsummaryrefslogtreecommitdiff
path: root/usr.sbin
diff options
context:
space:
mode:
authorNavdeep Parhar <np@FreeBSD.org>2017-10-07 01:20:30 +0000
committerNavdeep Parhar <np@FreeBSD.org>2017-10-07 01:20:30 +0000
commit313a64359d186ac3acc0216d9cf9fd22c7de9aa9 (patch)
tree4703b12e1435817f065853d99795d1779f5c45c5 /usr.sbin
parent709939a7b70fa68571df38bfe3f4b8e344b0ee05 (diff)
downloadsrc-313a64359d186ac3acc0216d9cf9fd22c7de9aa9.tar.gz
src-313a64359d186ac3acc0216d9cf9fd22c7de9aa9.zip
cxgbetool(8): Do not create a large file devoid of useful content when
the dumpstate ioctl fails. Make the file world-readable while here. MFC after: 2 weeks Sponsored by: Chelsio Communications
Notes
Notes: svn path=/head/; revision=324379
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/cxgbetool/cxgbetool.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/usr.sbin/cxgbetool/cxgbetool.c b/usr.sbin/cxgbetool/cxgbetool.c
index b11001f10c0c..f80e59fe6667 100644
--- a/usr.sbin/cxgbetool/cxgbetool.c
+++ b/usr.sbin/cxgbetool/cxgbetool.c
@@ -1896,13 +1896,6 @@ dumpstate(int argc, const char *argv[])
return (EINVAL);
}
- fd = open(fname, O_CREAT | O_TRUNC | O_EXCL | O_WRONLY,
- S_IRUSR | S_IRGRP);
- if (fd < 0) {
- warn("open(%s)", fname);
- return (errno);
- }
-
dump.wr_flash = 0;
memset(&dump.bitmap, 0xff, sizeof(dump.bitmap));
dump.len = 8 * 1024 * 1024;
@@ -1913,9 +1906,20 @@ dumpstate(int argc, const char *argv[])
}
rc = doit(CHELSIO_T4_CUDBG_DUMP, &dump);
+ if (rc != 0)
+ goto done;
+
+ fd = open(fname, O_CREAT | O_TRUNC | O_EXCL | O_WRONLY,
+ S_IRUSR | S_IRGRP | S_IROTH);
+ if (fd < 0) {
+ warn("open(%s)", fname);
+ rc = errno;
+ goto done;
+ }
write(fd, dump.data, dump.len);
- free(dump.data);
close(fd);
+done:
+ free(dump.data);
return (rc);
}