ncomp = (struct acpi_iort_named_component *)node->node_data;
 
+       if (!ncomp->memory_address_limit) {
+               pr_warn(FW_BUG "Named component missing memory address limit\n");
+               return -EINVAL;
+       }
+
        *size = ncomp->memory_address_limit >= 64 ? U64_MAX :
                        1ULL<<ncomp->memory_address_limit;
 
 
        rc = (struct acpi_iort_root_complex *)node->node_data;
 
+       if (!rc->memory_address_limit) {
+               pr_warn(FW_BUG "Root complex missing memory address limit\n");
+               return -EINVAL;
+       }
+
        *size = rc->memory_address_limit >= 64 ? U64_MAX :
                        1ULL<<rc->memory_address_limit;
 
                end = dmaaddr + size - 1;
                mask = DMA_BIT_MASK(ilog2(end) + 1);
                dev->bus_dma_limit = end;
-               dev->coherent_dma_mask = mask;
-               *dev->dma_mask = mask;
+               dev->coherent_dma_mask = min(dev->coherent_dma_mask, mask);
+               *dev->dma_mask = min(*dev->dma_mask, mask);
        }
 
        *dma_addr = dmaaddr;