diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 367922579cb1731c604ed65300e5d303e02beac2..cf4ea161b964ab36c8b4da95d9f3d209d9ca66be 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -179,7 +179,7 @@ int mmc_read(struct mmc *mmc, u64 src, uchar *dst, int size)
 	err = mmc_set_blocklen(mmc, mmc->read_bl_len);
 
 	if (err)
-		return err;
+		goto free_buffer;
 
 	for (i = startblock; i <= endblock; i++) {
 		int segment_size;