xref: /illumos-gate/usr/src/test/nvme-tests/tests/libnvme/bad-req.c (revision 533affcbc7fc4d0c8132976ea454aaa715fe2307)
1*533affcbSRobert Mustacchi /*
2*533affcbSRobert Mustacchi  * This file and its contents are supplied under the terms of the
3*533affcbSRobert Mustacchi  * Common Development and Distribution License ("CDDL"), version 1.0.
4*533affcbSRobert Mustacchi  * You may only use this file in accordance with the terms of version
5*533affcbSRobert Mustacchi  * 1.0 of the CDDL.
6*533affcbSRobert Mustacchi  *
7*533affcbSRobert Mustacchi  * A full copy of the text of the CDDL should have accompanied this
8*533affcbSRobert Mustacchi  * source.  A copy of the CDDL is also available via the Internet at
9*533affcbSRobert Mustacchi  * http://www.illumos.org/license/CDDL.
10*533affcbSRobert Mustacchi  */
11*533affcbSRobert Mustacchi 
12*533affcbSRobert Mustacchi /*
13*533affcbSRobert Mustacchi  * Copyright 2024 Oxide Computer Company
14*533affcbSRobert Mustacchi  */
15*533affcbSRobert Mustacchi 
16*533affcbSRobert Mustacchi /*
17*533affcbSRobert Mustacchi  * Go through the various controller request initialization routines and try to
18*533affcbSRobert Mustacchi  * force various bad arguments in them.
19*533affcbSRobert Mustacchi  */
20*533affcbSRobert Mustacchi 
21*533affcbSRobert Mustacchi #include <err.h>
22*533affcbSRobert Mustacchi #include <string.h>
23*533affcbSRobert Mustacchi #include <umem.h>
24*533affcbSRobert Mustacchi 
25*533affcbSRobert Mustacchi #include "libnvme_test_common.h"
26*533affcbSRobert Mustacchi 
27*533affcbSRobert Mustacchi static bool
bad_id_req(nvme_ctrl_t * ctrl,nvme_csi_t csi,uint32_t cns,nvme_id_req_t ** reqp,nvme_err_t exp_err,const char * desc)28*533affcbSRobert Mustacchi bad_id_req(nvme_ctrl_t *ctrl, nvme_csi_t csi, uint32_t cns,
29*533affcbSRobert Mustacchi     nvme_id_req_t **reqp, nvme_err_t exp_err, const char *desc)
30*533affcbSRobert Mustacchi {
31*533affcbSRobert Mustacchi 	if (nvme_id_req_init_by_cns(ctrl, csi, cns, reqp)) {
32*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_id_req_init_by_cns() erroneously "
33*533affcbSRobert Mustacchi 		    "passed despite %s", desc);
34*533affcbSRobert Mustacchi 		nvme_id_req_fini(*reqp);
35*533affcbSRobert Mustacchi 		return (false);
36*533affcbSRobert Mustacchi 	} else if (nvme_ctrl_err(ctrl) != exp_err) {
37*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_id_req_init_by_cns() returned "
38*533affcbSRobert Mustacchi 		    "wrong error %s (0x%x), not %s (0x%x)",
39*533affcbSRobert Mustacchi 		    nvme_ctrl_errtostr(ctrl, nvme_ctrl_err(ctrl)),
40*533affcbSRobert Mustacchi 		    nvme_ctrl_err(ctrl), nvme_ctrl_errtostr(ctrl,
41*533affcbSRobert Mustacchi 		    exp_err), exp_err);
42*533affcbSRobert Mustacchi 		return (false);
43*533affcbSRobert Mustacchi 	} else {
44*533affcbSRobert Mustacchi 		(void) printf("TEST PASSED: nvme_id_req_init_by_cns() "
45*533affcbSRobert Mustacchi 		    "correctly failed for %s\n", desc);
46*533affcbSRobert Mustacchi 		return (true);
47*533affcbSRobert Mustacchi 	}
48*533affcbSRobert Mustacchi }
49*533affcbSRobert Mustacchi 
50*533affcbSRobert Mustacchi static bool
bad_log_req(nvme_ctrl_t * ctrl,nvme_log_req_t ** reqp,nvme_err_t exp_err,const char * desc)51*533affcbSRobert Mustacchi bad_log_req(nvme_ctrl_t *ctrl, nvme_log_req_t **reqp, nvme_err_t exp_err,
52*533affcbSRobert Mustacchi     const char *desc)
53*533affcbSRobert Mustacchi {
54*533affcbSRobert Mustacchi 	if (nvme_log_req_init(ctrl, reqp)) {
55*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_log_req_init() erroneously "
56*533affcbSRobert Mustacchi 		    "passed despite %s", desc);
57*533affcbSRobert Mustacchi 		nvme_log_req_fini(*reqp);
58*533affcbSRobert Mustacchi 		return (false);
59*533affcbSRobert Mustacchi 	} else if (nvme_ctrl_err(ctrl) != exp_err) {
60*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_log_req_init() returned "
61*533affcbSRobert Mustacchi 		    "wrong error %s (0x%x), not %s (0x%x)",
62*533affcbSRobert Mustacchi 		    nvme_ctrl_errtostr(ctrl, nvme_ctrl_err(ctrl)),
63*533affcbSRobert Mustacchi 		    nvme_ctrl_err(ctrl), nvme_ctrl_errtostr(ctrl,
64*533affcbSRobert Mustacchi 		    exp_err), exp_err);
65*533affcbSRobert Mustacchi 		return (false);
66*533affcbSRobert Mustacchi 	} else {
67*533affcbSRobert Mustacchi 		(void) printf("TEST PASSED: nvme_log_req_init() "
68*533affcbSRobert Mustacchi 		    "correctly failed for %s\n", desc);
69*533affcbSRobert Mustacchi 		return (true);
70*533affcbSRobert Mustacchi 	}
71*533affcbSRobert Mustacchi }
72*533affcbSRobert Mustacchi 
73*533affcbSRobert Mustacchi static bool
bad_log_req_by_name(nvme_ctrl_t * ctrl,const char * name,uint32_t flags,nvme_log_req_t ** reqp,nvme_err_t exp_err,const char * desc)74*533affcbSRobert Mustacchi bad_log_req_by_name(nvme_ctrl_t *ctrl, const char *name, uint32_t flags,
75*533affcbSRobert Mustacchi     nvme_log_req_t **reqp, nvme_err_t exp_err, const char *desc)
76*533affcbSRobert Mustacchi {
77*533affcbSRobert Mustacchi 	if (nvme_log_req_init_by_name(ctrl, name, flags, NULL, reqp)) {
78*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_log_req_init_by_name() erroneously "
79*533affcbSRobert Mustacchi 		    "passed despite %s", desc);
80*533affcbSRobert Mustacchi 		nvme_log_req_fini(*reqp);
81*533affcbSRobert Mustacchi 		return (false);
82*533affcbSRobert Mustacchi 	} else if (nvme_ctrl_err(ctrl) != exp_err) {
83*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_log_req_init_by_name() returned "
84*533affcbSRobert Mustacchi 		    "wrong error %s (0x%x), not %s (0x%x)",
85*533affcbSRobert Mustacchi 		    nvme_ctrl_errtostr(ctrl, nvme_ctrl_err(ctrl)),
86*533affcbSRobert Mustacchi 		    nvme_ctrl_err(ctrl), nvme_ctrl_errtostr(ctrl,
87*533affcbSRobert Mustacchi 		    exp_err), exp_err);
88*533affcbSRobert Mustacchi 		return (false);
89*533affcbSRobert Mustacchi 	} else {
90*533affcbSRobert Mustacchi 		(void) printf("TEST PASSED: nvme_log_req_init_by_name() "
91*533affcbSRobert Mustacchi 		    "correctly failed for %s\n", desc);
92*533affcbSRobert Mustacchi 		return (true);
93*533affcbSRobert Mustacchi 	}
94*533affcbSRobert Mustacchi }
95*533affcbSRobert Mustacchi 
96*533affcbSRobert Mustacchi static bool
bad_get_feat_req(nvme_ctrl_t * ctrl,nvme_get_feat_req_t ** reqp,nvme_err_t exp_err,const char * desc)97*533affcbSRobert Mustacchi bad_get_feat_req(nvme_ctrl_t *ctrl, nvme_get_feat_req_t **reqp,
98*533affcbSRobert Mustacchi     nvme_err_t exp_err, const char *desc)
99*533affcbSRobert Mustacchi {
100*533affcbSRobert Mustacchi 	if (nvme_get_feat_req_init(ctrl, reqp)) {
101*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_get_feat_req_init() erroneously "
102*533affcbSRobert Mustacchi 		    "passed despite %s", desc);
103*533affcbSRobert Mustacchi 		nvme_get_feat_req_fini(*reqp);
104*533affcbSRobert Mustacchi 		return (false);
105*533affcbSRobert Mustacchi 	} else if (nvme_ctrl_err(ctrl) != exp_err) {
106*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_get_feat_req_init() returned "
107*533affcbSRobert Mustacchi 		    "wrong error %s (0x%x), not %s (0x%x)",
108*533affcbSRobert Mustacchi 		    nvme_ctrl_errtostr(ctrl, nvme_ctrl_err(ctrl)),
109*533affcbSRobert Mustacchi 		    nvme_ctrl_err(ctrl), nvme_ctrl_errtostr(ctrl,
110*533affcbSRobert Mustacchi 		    exp_err), exp_err);
111*533affcbSRobert Mustacchi 		return (false);
112*533affcbSRobert Mustacchi 	} else {
113*533affcbSRobert Mustacchi 		(void) printf("TEST PASSED: nvme_get_feat_req_init() "
114*533affcbSRobert Mustacchi 		    "correctly failed for %s\n", desc);
115*533affcbSRobert Mustacchi 		return (true);
116*533affcbSRobert Mustacchi 	}
117*533affcbSRobert Mustacchi }
118*533affcbSRobert Mustacchi 
119*533affcbSRobert Mustacchi static bool
bad_get_feat_req_by_name(nvme_ctrl_t * ctrl,const char * name,uint32_t flags,nvme_get_feat_req_t ** reqp,nvme_err_t exp_err,const char * desc)120*533affcbSRobert Mustacchi bad_get_feat_req_by_name(nvme_ctrl_t *ctrl, const char *name, uint32_t flags,
121*533affcbSRobert Mustacchi     nvme_get_feat_req_t **reqp, nvme_err_t exp_err, const char *desc)
122*533affcbSRobert Mustacchi {
123*533affcbSRobert Mustacchi 	if (nvme_get_feat_req_init_by_name(ctrl, name, flags, NULL, reqp)) {
124*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_get_feat_req_init_by_name() "
125*533affcbSRobert Mustacchi 		    "erroneously passed despite %s", desc);
126*533affcbSRobert Mustacchi 		nvme_get_feat_req_fini(*reqp);
127*533affcbSRobert Mustacchi 		return (false);
128*533affcbSRobert Mustacchi 	} else if (nvme_ctrl_err(ctrl) != exp_err) {
129*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_get_feat_req_init_by_name() returned "
130*533affcbSRobert Mustacchi 		    "wrong error %s (0x%x), not %s (0x%x)",
131*533affcbSRobert Mustacchi 		    nvme_ctrl_errtostr(ctrl, nvme_ctrl_err(ctrl)),
132*533affcbSRobert Mustacchi 		    nvme_ctrl_err(ctrl), nvme_ctrl_errtostr(ctrl,
133*533affcbSRobert Mustacchi 		    exp_err), exp_err);
134*533affcbSRobert Mustacchi 		return (false);
135*533affcbSRobert Mustacchi 	} else {
136*533affcbSRobert Mustacchi 		(void) printf("TEST PASSED: nvme_get_feat_req_init_by_name() "
137*533affcbSRobert Mustacchi 		    "correctly failed for %s\n", desc);
138*533affcbSRobert Mustacchi 		return (true);
139*533affcbSRobert Mustacchi 	}
140*533affcbSRobert Mustacchi }
141*533affcbSRobert Mustacchi 
142*533affcbSRobert Mustacchi static bool
bad_vuc_req(nvme_ctrl_t * ctrl,nvme_vuc_req_t ** reqp,nvme_err_t exp_err,const char * desc)143*533affcbSRobert Mustacchi bad_vuc_req(nvme_ctrl_t *ctrl, nvme_vuc_req_t **reqp, nvme_err_t exp_err,
144*533affcbSRobert Mustacchi     const char *desc)
145*533affcbSRobert Mustacchi {
146*533affcbSRobert Mustacchi 	if (nvme_vuc_req_init(ctrl, reqp)) {
147*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_vuc_req_init() erroneously "
148*533affcbSRobert Mustacchi 		    "passed despite %s", desc);
149*533affcbSRobert Mustacchi 		nvme_vuc_req_fini(*reqp);
150*533affcbSRobert Mustacchi 		return (false);
151*533affcbSRobert Mustacchi 	} else if (nvme_ctrl_err(ctrl) != exp_err) {
152*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_vuc_req_init() returned "
153*533affcbSRobert Mustacchi 		    "wrong error %s (0x%x), not %s (0x%x)",
154*533affcbSRobert Mustacchi 		    nvme_ctrl_errtostr(ctrl, nvme_ctrl_err(ctrl)),
155*533affcbSRobert Mustacchi 		    nvme_ctrl_err(ctrl), nvme_ctrl_errtostr(ctrl,
156*533affcbSRobert Mustacchi 		    exp_err), exp_err);
157*533affcbSRobert Mustacchi 		return (false);
158*533affcbSRobert Mustacchi 	} else {
159*533affcbSRobert Mustacchi 		(void) printf("TEST PASSED: nvme_vuc_req_init() "
160*533affcbSRobert Mustacchi 		    "correctly failed for %s\n", desc);
161*533affcbSRobert Mustacchi 		return (true);
162*533affcbSRobert Mustacchi 	}
163*533affcbSRobert Mustacchi }
164*533affcbSRobert Mustacchi 
165*533affcbSRobert Mustacchi static bool
bad_fw_commit_req(nvme_ctrl_t * ctrl,nvme_fw_commit_req_t ** reqp,nvme_err_t exp_err,const char * desc)166*533affcbSRobert Mustacchi bad_fw_commit_req(nvme_ctrl_t *ctrl, nvme_fw_commit_req_t **reqp,
167*533affcbSRobert Mustacchi     nvme_err_t exp_err, const char *desc)
168*533affcbSRobert Mustacchi {
169*533affcbSRobert Mustacchi 	if (nvme_fw_commit_req_init(ctrl, reqp)) {
170*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_fw_commit_req_init() erroneously "
171*533affcbSRobert Mustacchi 		    "passed despite %s", desc);
172*533affcbSRobert Mustacchi 		nvme_fw_commit_req_fini(*reqp);
173*533affcbSRobert Mustacchi 		return (false);
174*533affcbSRobert Mustacchi 	} else if (nvme_ctrl_err(ctrl) != exp_err) {
175*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_fw_commit_req_init() returned "
176*533affcbSRobert Mustacchi 		    "wrong error %s (0x%x), not %s (0x%x)",
177*533affcbSRobert Mustacchi 		    nvme_ctrl_errtostr(ctrl, nvme_ctrl_err(ctrl)),
178*533affcbSRobert Mustacchi 		    nvme_ctrl_err(ctrl), nvme_ctrl_errtostr(ctrl,
179*533affcbSRobert Mustacchi 		    exp_err), exp_err);
180*533affcbSRobert Mustacchi 		return (false);
181*533affcbSRobert Mustacchi 	} else {
182*533affcbSRobert Mustacchi 		(void) printf("TEST PASSED: nvme_fw_commit_req_init() "
183*533affcbSRobert Mustacchi 		    "correctly failed for %s\n", desc);
184*533affcbSRobert Mustacchi 		return (true);
185*533affcbSRobert Mustacchi 	}
186*533affcbSRobert Mustacchi }
187*533affcbSRobert Mustacchi 
188*533affcbSRobert Mustacchi static bool
bad_format_req(nvme_ctrl_t * ctrl,nvme_format_req_t ** reqp,nvme_err_t exp_err,const char * desc)189*533affcbSRobert Mustacchi bad_format_req(nvme_ctrl_t *ctrl, nvme_format_req_t **reqp, nvme_err_t exp_err,
190*533affcbSRobert Mustacchi     const char *desc)
191*533affcbSRobert Mustacchi {
192*533affcbSRobert Mustacchi 	if (nvme_format_req_init(ctrl, reqp)) {
193*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_format_req_init() erroneously "
194*533affcbSRobert Mustacchi 		    "passed despite %s", desc);
195*533affcbSRobert Mustacchi 		nvme_format_req_fini(*reqp);
196*533affcbSRobert Mustacchi 		return (false);
197*533affcbSRobert Mustacchi 	} else if (nvme_ctrl_err(ctrl) != exp_err) {
198*533affcbSRobert Mustacchi 		warnx("TEST FAILED: nvme_format_req_init() returned "
199*533affcbSRobert Mustacchi 		    "wrong error %s (0x%x), not %s (0x%x)",
200*533affcbSRobert Mustacchi 		    nvme_ctrl_errtostr(ctrl, nvme_ctrl_err(ctrl)),
201*533affcbSRobert Mustacchi 		    nvme_ctrl_err(ctrl), nvme_ctrl_errtostr(ctrl,
202*533affcbSRobert Mustacchi 		    exp_err), exp_err);
203*533affcbSRobert Mustacchi 		return (false);
204*533affcbSRobert Mustacchi 	} else {
205*533affcbSRobert Mustacchi 		(void) printf("TEST PASSED: nvme_format_req_init() "
206*533affcbSRobert Mustacchi 		    "correctly failed for %s\n", desc);
207*533affcbSRobert Mustacchi 		return (true);
208*533affcbSRobert Mustacchi 	}
209*533affcbSRobert Mustacchi }
210*533affcbSRobert Mustacchi 
211*533affcbSRobert Mustacchi int
main(void)212*533affcbSRobert Mustacchi main(void)
213*533affcbSRobert Mustacchi {
214*533affcbSRobert Mustacchi 	int ret = EXIT_SUCCESS;
215*533affcbSRobert Mustacchi 	nvme_t *nvme;
216*533affcbSRobert Mustacchi 	nvme_ctrl_t *ctrl;
217*533affcbSRobert Mustacchi 	nvme_id_req_t *id_req;
218*533affcbSRobert Mustacchi 	nvme_log_req_t *log_req;
219*533affcbSRobert Mustacchi 	nvme_get_feat_req_t *feat_req;
220*533affcbSRobert Mustacchi 	nvme_vuc_req_t *vuc_req;
221*533affcbSRobert Mustacchi 	nvme_fw_commit_req_t *fw_commit_req;
222*533affcbSRobert Mustacchi 	nvme_format_req_t *format_req;
223*533affcbSRobert Mustacchi 
224*533affcbSRobert Mustacchi 	libnvme_test_init(&nvme, &ctrl);
225*533affcbSRobert Mustacchi 
226*533affcbSRobert Mustacchi 	if (!bad_id_req(ctrl, NVME_CSI_NVM, NVME_IDENTIFY_CTRL, NULL,
227*533affcbSRobert Mustacchi 	    NVME_ERR_BAD_PTR, "invalid req pointer")) {
228*533affcbSRobert Mustacchi 		ret = false;
229*533affcbSRobert Mustacchi 	}
230*533affcbSRobert Mustacchi 
231*533affcbSRobert Mustacchi 	if (!bad_id_req(ctrl, 0xff, NVME_IDENTIFY_CTRL, &id_req,
232*533affcbSRobert Mustacchi 	    NVME_ERR_IDENTIFY_UNKNOWN, "unknown identify (bad csi)")) {
233*533affcbSRobert Mustacchi 		ret = false;
234*533affcbSRobert Mustacchi 	}
235*533affcbSRobert Mustacchi 
236*533affcbSRobert Mustacchi 	if (!bad_id_req(ctrl, NVME_CSI_NVM, UINT32_MAX, &id_req,
237*533affcbSRobert Mustacchi 	    NVME_ERR_IDENTIFY_UNKNOWN, "unknown identify (bad cns)")) {
238*533affcbSRobert Mustacchi 		ret = false;
239*533affcbSRobert Mustacchi 	}
240*533affcbSRobert Mustacchi 
241*533affcbSRobert Mustacchi 	if (!bad_log_req(ctrl, NULL, NVME_ERR_BAD_PTR, "invalid req pointer")) {
242*533affcbSRobert Mustacchi 		ret = false;
243*533affcbSRobert Mustacchi 	}
244*533affcbSRobert Mustacchi 
245*533affcbSRobert Mustacchi 	if (!bad_log_req_by_name(ctrl, "health", 0, NULL, NVME_ERR_BAD_PTR,
246*533affcbSRobert Mustacchi 	    "bad output pointer")) {
247*533affcbSRobert Mustacchi 		ret = false;
248*533affcbSRobert Mustacchi 	}
249*533affcbSRobert Mustacchi 
250*533affcbSRobert Mustacchi 	if (!bad_log_req_by_name(ctrl, NULL, 0, &log_req, NVME_ERR_BAD_PTR,
251*533affcbSRobert Mustacchi 	    "bad name pointer")) {
252*533affcbSRobert Mustacchi 		ret = false;
253*533affcbSRobert Mustacchi 	}
254*533affcbSRobert Mustacchi 
255*533affcbSRobert Mustacchi 	if (!bad_log_req_by_name(ctrl, NULL, 0x12345678, &log_req,
256*533affcbSRobert Mustacchi 	    NVME_ERR_BAD_PTR, "bad flags")) {
257*533affcbSRobert Mustacchi 		ret = false;
258*533affcbSRobert Mustacchi 	}
259*533affcbSRobert Mustacchi 
260*533affcbSRobert Mustacchi 	if (!bad_log_req_by_name(ctrl, "elbereth", 0, &log_req,
261*533affcbSRobert Mustacchi 	    NVME_ERR_LOG_NAME_UNKNOWN, "unknown log")) {
262*533affcbSRobert Mustacchi 		ret = false;
263*533affcbSRobert Mustacchi 	}
264*533affcbSRobert Mustacchi 
265*533affcbSRobert Mustacchi 	if (!bad_get_feat_req(ctrl, NULL, NVME_ERR_BAD_PTR,
266*533affcbSRobert Mustacchi 	    "invalid req pointer")) {
267*533affcbSRobert Mustacchi 		ret = false;
268*533affcbSRobert Mustacchi 	}
269*533affcbSRobert Mustacchi 
270*533affcbSRobert Mustacchi 	if (!bad_get_feat_req_by_name(ctrl, "health", 0, NULL, NVME_ERR_BAD_PTR,
271*533affcbSRobert Mustacchi 	    "bad output pointer")) {
272*533affcbSRobert Mustacchi 		ret = false;
273*533affcbSRobert Mustacchi 	}
274*533affcbSRobert Mustacchi 
275*533affcbSRobert Mustacchi 	if (!bad_get_feat_req_by_name(ctrl, NULL, 0, &feat_req,
276*533affcbSRobert Mustacchi 	    NVME_ERR_BAD_PTR, "bad name pointer")) {
277*533affcbSRobert Mustacchi 		ret = false;
278*533affcbSRobert Mustacchi 	}
279*533affcbSRobert Mustacchi 
280*533affcbSRobert Mustacchi 	if (!bad_get_feat_req_by_name(ctrl, NULL, 0x87654321, &feat_req,
281*533affcbSRobert Mustacchi 	    NVME_ERR_BAD_PTR, "bad flags")) {
282*533affcbSRobert Mustacchi 		ret = false;
283*533affcbSRobert Mustacchi 	}
284*533affcbSRobert Mustacchi 
285*533affcbSRobert Mustacchi 	if (!bad_get_feat_req_by_name(ctrl, "elbereth", 0, &feat_req,
286*533affcbSRobert Mustacchi 	    NVME_ERR_FEAT_NAME_UNKNOWN, "unknown feat")) {
287*533affcbSRobert Mustacchi 		ret = false;
288*533affcbSRobert Mustacchi 	}
289*533affcbSRobert Mustacchi 
290*533affcbSRobert Mustacchi 	if (!bad_vuc_req(ctrl, NULL, NVME_ERR_BAD_PTR, "invalid req pointer")) {
291*533affcbSRobert Mustacchi 		ret = false;
292*533affcbSRobert Mustacchi 	}
293*533affcbSRobert Mustacchi 
294*533affcbSRobert Mustacchi 	if (!bad_fw_commit_req(ctrl, NULL, NVME_ERR_BAD_PTR,
295*533affcbSRobert Mustacchi 	    "invalid req pointer")) {
296*533affcbSRobert Mustacchi 		ret = false;
297*533affcbSRobert Mustacchi 	}
298*533affcbSRobert Mustacchi 
299*533affcbSRobert Mustacchi 	if (!bad_format_req(ctrl, NULL, NVME_ERR_BAD_PTR,
300*533affcbSRobert Mustacchi 	    "invalid req pointer")) {
301*533affcbSRobert Mustacchi 		ret = false;
302*533affcbSRobert Mustacchi 	}
303*533affcbSRobert Mustacchi 
304*533affcbSRobert Mustacchi 	umem_setmtbf(1);
305*533affcbSRobert Mustacchi 	if (!bad_id_req(ctrl, NVME_CSI_NVM, NVME_IDENTIFY_CTRL, &id_req,
306*533affcbSRobert Mustacchi 	    NVME_ERR_NO_MEM, "no memory")) {
307*533affcbSRobert Mustacchi 		ret = false;
308*533affcbSRobert Mustacchi 	}
309*533affcbSRobert Mustacchi 
310*533affcbSRobert Mustacchi 	if (!bad_log_req(ctrl, &log_req, NVME_ERR_NO_MEM, "no memory")) {
311*533affcbSRobert Mustacchi 		ret = false;
312*533affcbSRobert Mustacchi 	}
313*533affcbSRobert Mustacchi 
314*533affcbSRobert Mustacchi 	if (!bad_log_req_by_name(ctrl, "health", 0, &log_req, NVME_ERR_NO_MEM,
315*533affcbSRobert Mustacchi 	    "no memory")) {
316*533affcbSRobert Mustacchi 		ret = false;
317*533affcbSRobert Mustacchi 	}
318*533affcbSRobert Mustacchi 
319*533affcbSRobert Mustacchi 	if (!bad_get_feat_req(ctrl, &feat_req, NVME_ERR_NO_MEM, "no memory")) {
320*533affcbSRobert Mustacchi 		ret = false;
321*533affcbSRobert Mustacchi 	}
322*533affcbSRobert Mustacchi 
323*533affcbSRobert Mustacchi 	if (!bad_get_feat_req_by_name(ctrl, "health", 0, &feat_req,
324*533affcbSRobert Mustacchi 	    NVME_ERR_NO_MEM, "no memory")) {
325*533affcbSRobert Mustacchi 		ret = false;
326*533affcbSRobert Mustacchi 	}
327*533affcbSRobert Mustacchi 
328*533affcbSRobert Mustacchi 	if (!bad_vuc_req(ctrl, &vuc_req, NVME_ERR_NO_MEM, "no memory")) {
329*533affcbSRobert Mustacchi 		ret = false;
330*533affcbSRobert Mustacchi 	}
331*533affcbSRobert Mustacchi 
332*533affcbSRobert Mustacchi 	if (!bad_fw_commit_req(ctrl, &fw_commit_req, NVME_ERR_NO_MEM,
333*533affcbSRobert Mustacchi 	    "no memory")) {
334*533affcbSRobert Mustacchi 		ret = false;
335*533affcbSRobert Mustacchi 	}
336*533affcbSRobert Mustacchi 
337*533affcbSRobert Mustacchi 	if (!bad_format_req(ctrl, &format_req, NVME_ERR_NO_MEM, "no memory")) {
338*533affcbSRobert Mustacchi 		ret = false;
339*533affcbSRobert Mustacchi 	}
340*533affcbSRobert Mustacchi 	umem_setmtbf(0);
341*533affcbSRobert Mustacchi 
342*533affcbSRobert Mustacchi 	if (ret == EXIT_SUCCESS) {
343*533affcbSRobert Mustacchi 		(void) printf("All tests passed successfully\n");
344*533affcbSRobert Mustacchi 	}
345*533affcbSRobert Mustacchi 
346*533affcbSRobert Mustacchi 	nvme_ctrl_fini(ctrl);
347*533affcbSRobert Mustacchi 	nvme_fini(nvme);
348*533affcbSRobert Mustacchi 	return (ret);
349*533affcbSRobert Mustacchi }
350