Print this page
4031 scsa1394 violates DDI scsi_pkt(9S) allocation rules

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/io/1394/targets/scsa1394/sbp2_driver.c
          +++ new/usr/src/uts/common/io/1394/targets/scsa1394/sbp2_driver.c
↓ open down ↓ 549 lines elided ↑ open up ↑
 550  550          scsa1394_state_t *sp = lp->l_sp;
 551  551          scsa1394_cmd_orb_t *orb = sbp2_task_orb_kaddr(&cmd->sc_task);
 552  552  
 553  553          mutex_enter(&lp->l_mutex);
 554  554  
 555  555          lp->l_stat.stat_cmd_cnt++;
 556  556  
 557  557          bzero(orb->co_cdb, sizeof (orb->co_cdb));
 558  558  
 559  559          /* CDB */
 560      -        bcopy(cmd->sc_cdb, orb->co_cdb, cmd->sc_cdb_actual_len);
      560 +        bcopy(cmd->sc_pkt->pkt_cdbp, orb->co_cdb, cmd->sc_orig_cdblen);
 561  561  
 562  562          /*
 563  563           * ORB parameters
 564  564           *
 565  565           * use max speed and max payload for this speed.
 566  566           * max async data transfer for a given speed is 512<<speed
 567  567           * SBP-2 defines (see 5.1.2) max data transfer as 2^(max_payload+2),
 568  568           * hence max_payload = 7 + speed
 569  569           */
 570  570          orb->co_params = SBP2_ORB_NOTIFY | SBP2_ORB_RQ_FMT_SBP2 |
↓ open down ↓ 247 lines elided ↑ open up ↑
 818  818                  pkt->pkt_reason = CMD_TRAN_ERR;
 819  819                  lp->l_stat.stat_err_status_resp++;
 820  820          }
 821  821  
 822  822          if (pkt->pkt_reason == CMD_TRAN_ERR) {
 823  823                  lp->l_stat.stat_err_status_tran_err++;
 824  824  
 825  825                  /* save the command */
 826  826                  p = &lp->l_stat.stat_cmd_last_fail[
 827  827                      lp->l_stat.stat_cmd_last_fail_idx][0];
 828      -                bcopy(&pkt->pkt_cdbp[0], p, min(cmd->sc_cdb_len, 16));
      828 +                bcopy(&pkt->pkt_cdbp[0], p, min(cmd->sc_pkt->pkt_cdblen, 16));
 829  829                  *(clock_t *)&p[2] = ddi_get_lbolt();
 830  830                  lp->l_stat.stat_cmd_last_fail_idx =
 831  831                      (lp->l_stat.stat_cmd_last_fail_idx + 1) %
 832  832                      SCSA1394_STAT_NCMD_LAST;
 833  833          }
 834  834  
 835  835          /* generic HBA status processing */
 836  836          scsa1394_cmd_status_proc(lp, cmd);
 837  837  }
 838  838  
↓ open down ↓ 163 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX