On Tue, Jul 04, 2023 at 05:33:58PM +0900, Jeuk Kim wrote: > +static MemTxResult ufs_dma_read_prdt(UfsRequest *req) > +{ > + UfsHc *u = req->hc; > + uint16_t prdt_len = le16_to_cpu(req->utrd.prd_table_length); > + uint16_t prdt_byte_off = > + le16_to_cpu(req->utrd.prd_table_offset) * sizeof(uint32_t); > + uint32_t prdt_size = prdt_len * sizeof(UfshcdSgEntry); > + g_autofree UfshcdSgEntry *prd_entries = NULL; > + hwaddr req_upiu_base_addr, prdt_base_addr; > + int err; > + > + assert(!req->sg); > + > + if (prdt_len == 0) { > + return MEMTX_OK; > + } > + > + prd_entries = g_new(UfshcdSgEntry, prdt_size); > + if (!prd_entries) {
g_new() never returns NULL. The process aborts if there is not enough memory available. Use g_try_new() if you want to handle memory allocation failure. > + trace_ufs_err_memory_allocation(); > + return MEMTX_ERROR; > + } > + > + req_upiu_base_addr = ufs_get_req_upiu_base_addr(&req->utrd); > + prdt_base_addr = req_upiu_base_addr + prdt_byte_off; > + > + err = ufs_addr_read(u, prdt_base_addr, prd_entries, prdt_size); > + if (err) { > + trace_ufs_err_dma_read_prdt(req->slot, prdt_base_addr); > + return err; > + } > + > + req->sg = g_malloc0(sizeof(QEMUSGList)); > + if (!req->sg) { g_malloc0() never returns NULL. The process aborts if there is not enough memory available.
signature.asc
Description: PGP signature