mmc: dw_mmc: Handle return value from bounce_buffer_start()
authorMarek Vasut <marex@denx.de>
Sat, 23 Mar 2019 17:45:27 +0000 (18:45 +0100)
committerMarek Vasut <marex@denx.de>
Mon, 29 Apr 2019 08:08:56 +0000 (10:08 +0200)
The bounce_buffer_start() can return -ENOMEM in case memory allocation
failed. However, in that case, the bounce buffer address is the same as
the possibly unaligned input address, and the cache maintenance operations
were not applied to this address. This could cause subtle problems. Add
handling for the bounce_buffer_start() return value to prevent such a
problem from happening.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Jaehoon Chung <jh80.chung@samsung.com>
Cc: Simon Glass <sjg@chromium.org>
drivers/mmc/dw_mmc.c

index d4976ac87953c149a144679b5f3d5e9f78c27b58..2faaa43911b57fbc4d0265e9e2e91641d2b36ef1 100644 (file)
@@ -270,14 +270,20 @@ static int dwmci_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
                        dwmci_wait_reset(host, DWMCI_CTRL_FIFO_RESET);
                } else {
                        if (data->flags == MMC_DATA_READ) {
-                               bounce_buffer_start(&bbstate, (void*)data->dest,
+                               ret = bounce_buffer_start(&bbstate,
+                                               (void*)data->dest,
                                                data->blocksize *
                                                data->blocks, GEN_BB_WRITE);
                        } else {
-                               bounce_buffer_start(&bbstate, (void*)data->src,
+                               ret = bounce_buffer_start(&bbstate,
+                                               (void*)data->src,
                                                data->blocksize *
                                                data->blocks, GEN_BB_READ);
                        }
+
+                       if (ret)
+                               return ret;
+
                        dwmci_prepare_data(host, data, cur_idmac,
                                           bbstate.bounce_buffer);
                }