On Wed, Oct 14, 2020 at 06:42:02AM +0900, Dmitry Fomichev wrote:
> +{
> +    NvmeEffectsLog log = {};
> +    uint32_t *dst_acs = log.acs, *dst_iocs = log.iocs;
> +    uint32_t trans_len;
> +    int i;
> +
> +    trace_pci_nvme_cmd_supp_and_effects_log_read();
> +
> +    if (off >= sizeof(log)) {
> +        trace_pci_nvme_err_invalid_effects_log_offset(off);
> +        return NVME_INVALID_FIELD | NVME_DNR;
> +    }
> +
> +    for (i = 0; i < 256; i++) {
> +        dst_acs[i] = nvme_cse_acs[i];
> +    }
> +
> +    for (i = 0; i < 256; i++) {
> +        dst_iocs[i] = nvme_cse_iocs_nvm[i];
> +    }

You're just copying the array, so let's do it like this:

    memcpy(log.acs, nvme_cse_acs, sizeof(nvme_cse_acs));
    memcpy(log.iocs, nvme_cse_iocs_nvm, sizeof(nvme_cse_iocs_nvm));

I think you also need to check

    if (NVME_CC_CSS(n->bar.cc) != NVME_CC_CSS_ADMIN_ONLY)

before copying iocs.

Reply via email to