void InvalidMSIXIRQ_r10b::ASQCmdToxify(SharedASQPtr asq, uint16_t illegalIrqVec) { struct backdoor_inject inject; struct nvme_gen_sq asqMetrics = asq->GetQMetrics(); LOG_NRM("Attempt to utilize illegal IRQ vec %d", illegalIrqVec); if (asqMetrics.tail_ptr_virt) inject.cmd_ptr = (asqMetrics.tail_ptr_virt - 1); else inject.cmd_ptr = (asq->GetNumEntries() - 1); inject.q_id = asq->GetQId(); inject.dword = 11; inject.value_mask = 0xFFFF0000; inject.value = (illegalIrqVec << 16); LOG_NRM("Inject toxic parameters: (qId, cmd_ptr, dword, mask, val) = " "(%d, %d, %d, %d, %d)", inject.q_id, inject.cmd_ptr, inject.dword, inject.value_mask, inject.value); asq->SetToxicCmdValue(inject); }
void IllegalCreateQs_r10b::ASQCmdToxify(SharedASQPtr asq, uint8_t dw, uint32_t mask, uint32_t val) { struct nvme_gen_sq asqMetrics = asq->GetQMetrics(); struct backdoor_inject inject; inject.q_id = asq->GetQId(); if (asqMetrics.tail_ptr_virt) inject.cmd_ptr = asqMetrics.tail_ptr_virt - 1; else inject.cmd_ptr = asq->GetNumEntries() - 1; inject.dword = dw; inject.value_mask = mask; inject.value = val; LOG_NRM("Inject toxic parameters: (qId, cmd_ptr, dword, mask, val) = " "(%d, %d, %d, %d, %d)", inject.q_id, inject.cmd_ptr, inject.dword, inject.value_mask, inject.value); asq->SetToxicCmdValue(inject); }