summaryrefslogtreecommitdiff
path: root/usr/src/cmd/zfs/zfs_main.c
diff options
context:
space:
mode:
authorDon Brady <don.brady@delphix.com>2020-06-19 16:40:07 -0500
committerJason King <jason.king@joyent.com>2020-07-07 12:55:10 -0500
commit7ac89354c798225fea6296348415955ccd95fb80 (patch)
tree898a5b9a1cadcc1759f4bdf36e26e0d6122cf24b /usr/src/cmd/zfs/zfs_main.c
parent6f0673af8764c356a5bd511fc7ca8af579fe2000 (diff)
downloadillumos-joyent-7ac89354c798225fea6296348415955ccd95fb80.tar.gz
12877 Port OpenZFS #7780 - Add basic zfs ioc input nvpair validation
12895 zfs_onexit_fd_hold fails to release non-zfs fds Portions contributed by: Brian Behlendorf <behlendorf1@llnl.gov> Portions contributed by: George Wilson <george.wilson@delphix.com> Portions contributed by: Simon Klinkert <simon.klinkert@gmail.com> Portions contributed by: Jason King <jason.king@joyent.com> Reviewed by: Matthew Ahrens <mahrens@delphix.com> Reviewed by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed by: Toomas Soome <tsoome@me.com> Approved by: Dan McDonald <danmcd@joyent.com>
Diffstat (limited to 'usr/src/cmd/zfs/zfs_main.c')
-rw-r--r--usr/src/cmd/zfs/zfs_main.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/usr/src/cmd/zfs/zfs_main.c b/usr/src/cmd/zfs/zfs_main.c
index 08a0b6bcd1..695da7fcbc 100644
--- a/usr/src/cmd/zfs/zfs_main.c
+++ b/usr/src/cmd/zfs/zfs_main.c
@@ -7344,7 +7344,7 @@ zfs_do_bookmark(int argc, char **argv)
fnvlist_free(nvl);
if (ret != 0) {
- const char *err_msg;
+ const char *err_msg = NULL;
char errbuf[1024];
(void) snprintf(errbuf, sizeof (errbuf),
@@ -7368,11 +7368,13 @@ zfs_do_bookmark(int argc, char **argv)
err_msg = "out of space";
break;
default:
- err_msg = "unknown error";
+ (void) zfs_standard_error(g_zfs, ret, errbuf);
break;
}
- (void) fprintf(stderr, "%s: %s\n", errbuf,
- dgettext(TEXT_DOMAIN, err_msg));
+ if (err_msg != NULL) {
+ (void) fprintf(stderr, "%s: %s\n", errbuf,
+ dgettext(TEXT_DOMAIN, err_msg));
+ }
}
return (ret != 0);
@@ -7389,7 +7391,7 @@ zfs_do_channel_program(int argc, char **argv)
char c;
char *progbuf, *filename, *poolname;
size_t progsize, progread;
- nvlist_t *outnvl;
+ nvlist_t *outnvl = NULL;
uint64_t instrlimit = ZCP_DEFAULT_INSTRLIMIT;
uint64_t memlimit = ZCP_DEFAULT_MEMLIMIT;
boolean_t sync_flag = B_TRUE, json_output = B_FALSE;
@@ -7529,7 +7531,8 @@ zfs_do_channel_program(int argc, char **argv)
* falling back on strerror() for an unexpected return code.
*/
char *errstring = NULL;
- if (nvlist_exists(outnvl, ZCP_RET_ERROR)) {
+ const char *msg = gettext("Channel program execution failed");
+ if (outnvl != NULL && nvlist_exists(outnvl, ZCP_RET_ERROR)) {
(void) nvlist_lookup_string(outnvl,
ZCP_RET_ERROR, &errstring);
if (errstring == NULL)
@@ -7554,12 +7557,11 @@ zfs_do_channel_program(int argc, char **argv)
"programs must be run as root.";
break;
default:
- errstring = strerror(ret);
+ (void) zfs_standard_error(g_zfs, ret, msg);
}
}
- (void) fprintf(stderr,
- gettext("Channel program execution failed:\n%s\n"),
- errstring);
+ if (errstring != NULL)
+ (void) fprintf(stderr, "%s:\n%s\n", msg, errstring);
} else {
if (json_output) {
(void) nvlist_print_json(stdout, outnvl);