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:
Utkarsh Mani Tripathi
2019-11-18 15:56:34 +05:30
parent 1dbc82435f
commit e5339f347a
3 changed files with 52 additions and 18 deletions

View File

@@ -533,7 +533,9 @@ overflow:
cmd.InSDBBuffer.Resid = 8
return api.SAMStatGood
sense:
cmd.InSDBBuffer.Resid = 0
if cmd.InSDBBuffer != nil {
cmd.InSDBBuffer.Resid = 0
}
BuildSenseData(cmd, key, asc)
return api.SAMStatCheckCondition
}
@@ -679,7 +681,9 @@ func SBCGetLbaStatus(host int, cmd *api.SCSICommand) api.SAMStat {
}
return api.SAMStatGood
sense:
cmd.InSDBBuffer.Resid = 0
if cmd.InSDBBuffer != nil {
cmd.InSDBBuffer.Resid = 0
}
BuildSenseData(cmd, key, asc)
return api.SAMStatCheckCondition
}

View File

@@ -96,7 +96,7 @@ func (s *SCSITargetService) AddCommandQueue(tid int, scmd *api.SCSICommand) erro
result := scmd.Device.PerformCommand(tid, scmd)
if result != api.SAMStatGood {
scmd.Result = result.Stat
log.Warnf("%v", result.Err)
log.Warnf("opcode: %xh err: %v", scmd.OpCode, result.Err)
}
return nil
}

View File

@@ -454,7 +454,9 @@ func SPCReportLuns(host int, cmd *api.SCSICommand) api.SAMStat {
copy(cmd.InSDBBuffer.Buffer, buf.Bytes())
return api.SAMStatGood
sense:
cmd.InSDBBuffer.Resid = 0
if cmd.InSDBBuffer != nil {
cmd.InSDBBuffer.Resid = 0
}
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
return api.SAMStatCheckCondition
}
@@ -467,7 +469,9 @@ func SPCStartStop(host int, cmd *api.SCSICommand) api.SAMStat {
return api.SAMStatReservationConflict
}
cmd.InSDBBuffer.Resid = 0
if cmd.InSDBBuffer != nil {
cmd.InSDBBuffer.Resid = 0
}
scb := cmd.SCB
pwrcnd = scb[4] & 0xf0
if pwrcnd != 0 {
@@ -662,7 +666,9 @@ func SPCSendDiagnostics(host int, cmd *api.SCSICommand) api.SAMStat {
return api.SAMStatGood
sense:
cmd.InSDBBuffer.Resid = 0
if cmd.InSDBBuffer != nil {
cmd.InSDBBuffer.Resid = 0
}
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
return api.SAMStatCheckCondition
}
@@ -748,7 +754,9 @@ func SPCReportSupportedOperationCodes(host int, cmd *api.SCSICommand) api.SAMSta
return api.SAMStatGood
sense:
cmd.InSDBBuffer.Resid = 0
if cmd.InSDBBuffer != nil {
cmd.InSDBBuffer.Resid = 0
}
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
return api.SAMStatCheckCondition
}
@@ -764,7 +772,9 @@ func SPCServiceAction(host int, cmd *api.SCSICommand) api.SAMStat {
fnop := serviceAction.(*SCSIServiceAction)
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)
return api.SAMStatCheckCondition
}
@@ -797,7 +807,9 @@ func SPCPRReadKeys(host int, cmd *api.SCSICommand) api.SAMStat {
cmd.InSDBBuffer.Resid = uint32(additionLength)
return api.SAMStatGood
sense:
cmd.InSDBBuffer.Resid = 0
if cmd.InSDBBuffer != nil {
cmd.InSDBBuffer.Resid = 0
}
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
return api.SAMStatCheckCondition
}
@@ -853,7 +865,9 @@ func SPCPRReadReservation(host int, cmd *api.SCSICommand) api.SAMStat {
return api.SAMStatGood
sense:
cmd.InSDBBuffer.Resid = 0
if cmd.InSDBBuffer != nil {
cmd.InSDBBuffer.Resid = 0
}
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
return api.SAMStatCheckCondition
}
@@ -891,7 +905,9 @@ func SPCPRReportCapabilities(host int, cmd *api.SCSICommand) api.SAMStat {
cmd.InSDBBuffer.Resid = uint32(actualLength)
return api.SAMStatGood
sense:
cmd.InSDBBuffer.Resid = 0
if cmd.InSDBBuffer != nil {
cmd.InSDBBuffer.Resid = 0
}
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
return api.SAMStatCheckCondition
}
@@ -970,7 +986,9 @@ func SPCPRRegister(host int, cmd *api.SCSICommand) api.SAMStat {
return api.SAMStatGood
sense:
cmd.InSDBBuffer.Resid = 0
if cmd.InSDBBuffer != nil {
cmd.InSDBBuffer.Resid = 0
}
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
return api.SAMStatCheckCondition
}
@@ -1032,7 +1050,9 @@ func SPCPRReserve(host int, cmd *api.SCSICommand) api.SAMStat {
scsiResOp.Save(tgtName, devUUID)
return api.SAMStatGood
sense:
cmd.InSDBBuffer.Resid = 0
if cmd.InSDBBuffer != nil {
cmd.InSDBBuffer.Resid = 0
}
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
return api.SAMStatCheckCondition
}
@@ -1082,7 +1102,9 @@ func SPCPRRelease(host int, cmd *api.SCSICommand) api.SAMStat {
}
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)
return api.SAMStatCheckCondition
}
@@ -1113,7 +1135,9 @@ func SPCPRRelease(host int, cmd *api.SCSICommand) api.SAMStat {
scsiResOp.Save(tgtName, devUUID)
return api.SAMStatGood
sense:
cmd.InSDBBuffer.Resid = 0
if cmd.InSDBBuffer != nil {
cmd.InSDBBuffer.Resid = 0
}
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
return api.SAMStatCheckCondition
}
@@ -1167,7 +1191,9 @@ func SPCPRClear(host int, cmd *api.SCSICommand) api.SAMStat {
scsiResOp.Save(tgtName, devUUID)
return api.SAMStatGood
sense:
cmd.InSDBBuffer.Resid = 0
if cmd.InSDBBuffer != nil {
cmd.InSDBBuffer.Resid = 0
}
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
return api.SAMStatCheckCondition
}
@@ -1267,7 +1293,9 @@ func SPCPRPreempt(host int, cmd *api.SCSICommand) api.SAMStat {
scsiResOp.Save(tgtName, devUUID)
return api.SAMStatGood
sense:
cmd.InSDBBuffer.Resid = 0
if cmd.InSDBBuffer != nil {
cmd.InSDBBuffer.Resid = 0
}
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
return api.SAMStatCheckCondition
}
@@ -1353,7 +1381,9 @@ found:
scsiResOp.Save(tgtName, devUUID)
return api.SAMStatGood
sense:
cmd.InSDBBuffer.Resid = 0
if cmd.InSDBBuffer != nil {
cmd.InSDBBuffer.Resid = 0
}
BuildSenseData(cmd, ILLEGAL_REQUEST, ASC_INVALID_FIELD_IN_CDB)
return api.SAMStatCheckCondition
}