Add nil pointer check for InSDBBuffer
- Gotgt was crashing for few opcodes (sg_inq (sg3-utils)) because InSDBBuffer was not initialized for such opcodes (Need help) Signed-off-by: Utkarsh Mani Tripathi <utkarsh.tripathi@mayadata.io>
This commit is contained in:
@@ -533,7 +533,9 @@ overflow:
|
|||||||
cmd.InSDBBuffer.Resid = 8
|
cmd.InSDBBuffer.Resid = 8
|
||||||
return api.SAMStatGood
|
return api.SAMStatGood
|
||||||
sense:
|
sense:
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, key, asc)
|
BuildSenseData(cmd, key, asc)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
@@ -679,7 +681,9 @@ func SBCGetLbaStatus(host int, cmd *api.SCSICommand) api.SAMStat {
|
|||||||
}
|
}
|
||||||
return api.SAMStatGood
|
return api.SAMStatGood
|
||||||
sense:
|
sense:
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, key, asc)
|
BuildSenseData(cmd, key, asc)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ func (s *SCSITargetService) AddCommandQueue(tid int, scmd *api.SCSICommand) erro
|
|||||||
result := scmd.Device.PerformCommand(tid, scmd)
|
result := scmd.Device.PerformCommand(tid, scmd)
|
||||||
if result != api.SAMStatGood {
|
if result != api.SAMStatGood {
|
||||||
scmd.Result = result.Stat
|
scmd.Result = result.Stat
|
||||||
log.Warnf("%v", result.Err)
|
log.Warnf("opcode: %xh err: %v", scmd.OpCode, result.Err)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -454,7 +454,9 @@ func SPCReportLuns(host int, cmd *api.SCSICommand) api.SAMStat {
|
|||||||
copy(cmd.InSDBBuffer.Buffer, buf.Bytes())
|
copy(cmd.InSDBBuffer.Buffer, buf.Bytes())
|
||||||
return api.SAMStatGood
|
return api.SAMStatGood
|
||||||
sense:
|
sense:
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
@@ -467,7 +469,9 @@ func SPCStartStop(host int, cmd *api.SCSICommand) api.SAMStat {
|
|||||||
return api.SAMStatReservationConflict
|
return api.SAMStatReservationConflict
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
scb := cmd.SCB
|
scb := cmd.SCB
|
||||||
pwrcnd = scb[4] & 0xf0
|
pwrcnd = scb[4] & 0xf0
|
||||||
if pwrcnd != 0 {
|
if pwrcnd != 0 {
|
||||||
@@ -662,7 +666,9 @@ func SPCSendDiagnostics(host int, cmd *api.SCSICommand) api.SAMStat {
|
|||||||
|
|
||||||
return api.SAMStatGood
|
return api.SAMStatGood
|
||||||
sense:
|
sense:
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
@@ -748,7 +754,9 @@ func SPCReportSupportedOperationCodes(host int, cmd *api.SCSICommand) api.SAMSta
|
|||||||
return api.SAMStatGood
|
return api.SAMStatGood
|
||||||
|
|
||||||
sense:
|
sense:
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
@@ -764,7 +772,9 @@ func SPCServiceAction(host int, cmd *api.SCSICommand) api.SAMStat {
|
|||||||
fnop := serviceAction.(*SCSIServiceAction)
|
fnop := serviceAction.(*SCSIServiceAction)
|
||||||
return fnop.CommandPerformFunc(host, cmd)
|
return fnop.CommandPerformFunc(host, cmd)
|
||||||
}
|
}
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
@@ -797,7 +807,9 @@ func SPCPRReadKeys(host int, cmd *api.SCSICommand) api.SAMStat {
|
|||||||
cmd.InSDBBuffer.Resid = uint32(additionLength)
|
cmd.InSDBBuffer.Resid = uint32(additionLength)
|
||||||
return api.SAMStatGood
|
return api.SAMStatGood
|
||||||
sense:
|
sense:
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
@@ -853,7 +865,9 @@ func SPCPRReadReservation(host int, cmd *api.SCSICommand) api.SAMStat {
|
|||||||
return api.SAMStatGood
|
return api.SAMStatGood
|
||||||
|
|
||||||
sense:
|
sense:
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
@@ -891,7 +905,9 @@ func SPCPRReportCapabilities(host int, cmd *api.SCSICommand) api.SAMStat {
|
|||||||
cmd.InSDBBuffer.Resid = uint32(actualLength)
|
cmd.InSDBBuffer.Resid = uint32(actualLength)
|
||||||
return api.SAMStatGood
|
return api.SAMStatGood
|
||||||
sense:
|
sense:
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
@@ -970,7 +986,9 @@ func SPCPRRegister(host int, cmd *api.SCSICommand) api.SAMStat {
|
|||||||
return api.SAMStatGood
|
return api.SAMStatGood
|
||||||
|
|
||||||
sense:
|
sense:
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
@@ -1032,7 +1050,9 @@ func SPCPRReserve(host int, cmd *api.SCSICommand) api.SAMStat {
|
|||||||
scsiResOp.Save(tgtName, devUUID)
|
scsiResOp.Save(tgtName, devUUID)
|
||||||
return api.SAMStatGood
|
return api.SAMStatGood
|
||||||
sense:
|
sense:
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
@@ -1082,7 +1102,9 @@ func SPCPRRelease(host int, cmd *api.SCSICommand) api.SAMStat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if curRes.Scope != resScope || curRes.Type != resType {
|
if curRes.Scope != resScope || curRes.Type != resType {
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_RELEASE_OF_PERSISTENT_RESERVATION)
|
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_RELEASE_OF_PERSISTENT_RESERVATION)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
@@ -1113,7 +1135,9 @@ func SPCPRRelease(host int, cmd *api.SCSICommand) api.SAMStat {
|
|||||||
scsiResOp.Save(tgtName, devUUID)
|
scsiResOp.Save(tgtName, devUUID)
|
||||||
return api.SAMStatGood
|
return api.SAMStatGood
|
||||||
sense:
|
sense:
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
@@ -1167,7 +1191,9 @@ func SPCPRClear(host int, cmd *api.SCSICommand) api.SAMStat {
|
|||||||
scsiResOp.Save(tgtName, devUUID)
|
scsiResOp.Save(tgtName, devUUID)
|
||||||
return api.SAMStatGood
|
return api.SAMStatGood
|
||||||
sense:
|
sense:
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
@@ -1267,7 +1293,9 @@ func SPCPRPreempt(host int, cmd *api.SCSICommand) api.SAMStat {
|
|||||||
scsiResOp.Save(tgtName, devUUID)
|
scsiResOp.Save(tgtName, devUUID)
|
||||||
return api.SAMStatGood
|
return api.SAMStatGood
|
||||||
sense:
|
sense:
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
@@ -1353,7 +1381,9 @@ found:
|
|||||||
scsiResOp.Save(tgtName, devUUID)
|
scsiResOp.Save(tgtName, devUUID)
|
||||||
return api.SAMStatGood
|
return api.SAMStatGood
|
||||||
sense:
|
sense:
|
||||||
cmd.InSDBBuffer.Resid = 0
|
if cmd.InSDBBuffer != nil {
|
||||||
|
cmd.InSDBBuffer.Resid = 0
|
||||||
|
}
|
||||||
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
|
||||||
return api.SAMStatCheckCondition
|
return api.SAMStatCheckCondition
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user