nand: vybrid: Use calloc() instead of malloc() to allocate struct nfc
authorLukasz Majewski <lukma@denx.de>
Mon, 3 Dec 2018 09:20:47 +0000 (10:20 +0100)
committerStefano Babic <sbabic@denx.de>
Tue, 1 Jan 2019 13:12:18 +0000 (14:12 +0100)
Without this change it is possible that Vybrid's NFC driver malloc() call
will obtain some memory used (and correctly free'd) by some previous
driver (in this case pinctrl for Vybrid).

As a result some fields of struct nfc - in out case mtd->_get_device - are
"pre initialized" with some random values.

On the latter stage of booting, when e.g. somebody calls 'mtdparts default'
the "data abort" is observed when __get_mtd_device() function is called.

The mtd->_get_device pointer is not NULL and wrong value is referenced.

Signed-off-by: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Stefan Agner <stefan.agner@toradex.com>
drivers/mtd/nand/raw/vf610_nfc.c

index 619d0403e92b5798da9c100f5d23e1a19d8aa072..9baf5fa37a984de32ba62a886076af29f03354a8 100644 (file)
@@ -641,7 +641,7 @@ static int vf610_nfc_nand_init(int devnum, void __iomem *addr)
                .flash_bbt = 1,
        };
 
-       nfc = malloc(sizeof(*nfc));
+       nfc = calloc(1, sizeof(*nfc));
        if (!nfc) {
                printf(KERN_ERR "%s: Memory exhausted!\n", __func__);
                return -ENOMEM;