@@ -566,8 +566,8 @@ static void test_admin_err_nvme_resp(nvme_mi_ep_t ep)
566566 | NVME_SC_DNR ));
567567}
568568
569- /* invalid Admin command transfers */
570- static int test_admin_invalid_formats_cb (struct nvme_mi_ep * ep ,
569+ /* invalid command transfers */
570+ static int test_rejected_command_cb (struct nvme_mi_ep * ep ,
571571 struct nvme_mi_req * req ,
572572 struct nvme_mi_resp * resp ,
573573 void * data )
@@ -588,7 +588,7 @@ static void test_admin_invalid_formats(nvme_mi_ep_t ep)
588588 size_t len ;
589589 int rc ;
590590
591- test_set_transport_callback (ep , test_admin_invalid_formats_cb , NULL );
591+ test_set_transport_callback (ep , test_rejected_command_cb , NULL );
592592
593593 ctrl = nvme_mi_init_ctrl (ep , 1 );
594594 assert (ctrl );
@@ -629,6 +629,44 @@ static void test_admin_invalid_formats(nvme_mi_ep_t ep)
629629 assert (rc != 0 );
630630}
631631
632+ static void test_mi_invalid_formats (nvme_mi_ep_t ep )
633+ {
634+ struct {
635+ struct nvme_mi_mi_req_hdr hdr ;
636+ uint8_t data [4 ];
637+ } req = { 0 };
638+ struct nvme_mi_mi_resp_hdr resp = { 0 };
639+ nvme_mi_ctrl_t ctrl ;
640+ size_t len ;
641+ int rc ;
642+
643+ test_set_transport_callback (ep , test_rejected_command_cb , NULL );
644+
645+ ctrl = nvme_mi_init_ctrl (ep , 1 );
646+ assert (ctrl );
647+
648+ /* unaligned req size */
649+ len = 0 ;
650+
651+ rc = nvme_mi_mi_xfer (ep , & req .hdr , 1 , & resp , & len );
652+ assert (rc != 0 );
653+
654+ /* unaligned resp size */
655+ len = 1 ;
656+ rc = nvme_mi_mi_xfer (ep , & req .hdr , 0 , & resp , & len );
657+ assert (rc != 0 );
658+
659+ /* resp too large */
660+ len = 4096 + 4 ;
661+ rc = nvme_mi_mi_xfer (ep , & req .hdr , 0 , & resp , & len );
662+ assert (rc != 0 );
663+
664+ /* req and resp payloads */
665+ len = 4 ;
666+ rc = nvme_mi_mi_xfer (ep , & req .hdr , 4 , & resp , & len );
667+ assert (rc != 0 );
668+ }
669+
632670/* test: header length too small */
633671static int test_resp_hdr_small_cb (struct nvme_mi_ep * ep ,
634672 struct nvme_mi_req * req ,
@@ -2049,6 +2087,7 @@ struct test {
20492087 DEFINE_TEST (endpoint_quirk_probe ),
20502088 DEFINE_TEST (admin_dlen_doff_req ),
20512089 DEFINE_TEST (admin_dlen_doff_resp ),
2090+ DEFINE_TEST (mi_invalid_formats ),
20522091};
20532092
20542093static void run_test (struct test * test , FILE * logfd , nvme_mi_ep_t ep )
0 commit comments