diff options
author | Navdeep Parhar <np@FreeBSD.org> | 2017-10-07 01:20:30 +0000 |
---|---|---|
committer | Navdeep Parhar <np@FreeBSD.org> | 2017-10-07 01:20:30 +0000 |
commit | 313a64359d186ac3acc0216d9cf9fd22c7de9aa9 (patch) | |
tree | 4703b12e1435817f065853d99795d1779f5c45c5 /usr.sbin | |
parent | 709939a7b70fa68571df38bfe3f4b8e344b0ee05 (diff) | |
download | src-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.c | 20 |
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); } |