예제 #1
0
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);
}
예제 #2
0
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);
}