From mboxrd@z Thu Jan 1 00:00:00 1970 From: Abhishek Sahu Subject: [PATCH v4 08/15] mtd: rawnand: qcom: fix null pointer access for erased page detection Date: Wed, 20 Jun 2018 12:57:35 +0530 Message-ID: <1529479662-4026-9-git-send-email-absahu@codeaurora.org> References: <1529479662-4026-1-git-send-email-absahu@codeaurora.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1529479662-4026-1-git-send-email-absahu@codeaurora.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-mtd" Errors-To: linux-mtd-bounces+gldm-linux-mtd-36=gmane.org@lists.infradead.org To: Boris Brezillon , Miquel Raynal Cc: Archit Taneja , linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, Marek Vasut , Abhishek Sahu , linux-mtd@lists.infradead.org, Richard Weinberger , Andy Gross , Brian Norris , David Woodhouse List-Id: linux-arm-msm@vger.kernel.org cGFyc2VfcmVhZF9lcnJvcnMgY2FuIGJlIGNhbGxlZCB3aXRoIG9ubHkgb29iX2J1ZiBpbiB3aGlj aCBjYXNlCmRhdGFfYnVmIHdpbGwgYmUgTlVMTC4gIElmIGRhdGFfYnVmIGlzIE5VTEwsIHRoZW4g ZG9u4oCZdAp0cmVhdCB0aGlzIHBhZ2UgYXMgY29tcGxldGVseSBlcmFzZWQgaW4gY2FzZSBvZiBF Q0MgdW5jb3JyZWN0YWJsZQplcnJvciBmb3IgUlMgRUNDLiBGb3IgQkNIIEVDQywgdGhlIGNvbnRy b2xsZXIgaXRzZWxmIHRlbGxzCnJlZ2FyZGluZyBlcmFzZWQgcGFnZSBpbiBzdGF0dXMgcmVnaXN0 ZXIuCgpBY2tlZC1ieTogTWlxdWVsIFJheW5hbCA8bWlxdWVsLnJheW5hbEBib290bGluLmNvbT4K U2lnbmVkLW9mZi1ieTogQWJoaXNoZWsgU2FodSA8YWJzYWh1QGNvZGVhdXJvcmEub3JnPgotLS0K KiBDaGFuZ2VzIGZyb20gdjM6CiAgTk9ORQoKKiBDaGFuZ2VzIGZyb20gdjI6CiAgTk9ORQoKKiBD aGFuZ2VzIGZyb20gdjE6CiAgMS4gQWRkZWQgbW9yZSBkZXRhaWwgaW4gY29tbWl0IG1lc3NhZ2UK ICAyLiBBZGRlZCBjb21tZW50IGJlZm9yZSBlYWNoIGlmL2Vsc2UKCiBkcml2ZXJzL210ZC9uYW5k L3Jhdy9xY29tX25hbmRjLmMgfCAxOCArKysrKysrKysrKysrKystLS0KIDEgZmlsZSBjaGFuZ2Vk LCAxNSBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RyaXZlcnMv bXRkL25hbmQvcmF3L3Fjb21fbmFuZGMuYyBiL2RyaXZlcnMvbXRkL25hbmQvcmF3L3Fjb21fbmFu ZGMuYwppbmRleCAwZDkzMWQ1Li5hODMxZjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5k L3Jhdy9xY29tX25hbmRjLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9yYXcvcWNvbV9uYW5kYy5j CkBAIC0xNjExLDEzICsxNjExLDI0IEBAIHN0YXRpYyBpbnQgcGFyc2VfcmVhZF9lcnJvcnMoc3Ry dWN0IHFjb21fbmFuZF9ob3N0ICpob3N0LCB1OCAqZGF0YV9idWYsCiAJCQlpbnQgcmV0LCBlY2Ns ZW4sIGV4dHJhb29ibGVuOwogCQkJdm9pZCAqZWNjYnVmOwogCi0JCQkvKiBpZ25vcmUgZXJhc2Vk IGNvZGV3b3JkIGVycm9ycyAqLworCQkJLyoKKwkJCSAqIEZvciBCQ0ggRUNDLCBpZ25vcmUgZXJh c2VkIGNvZGV3b3JkIGVycm9ycywgaWYKKwkJCSAqIEVSQVNFRF9DVyBiaXRzIGFyZSBzZXQuCisJ CQkgKi8KIAkJCWlmIChob3N0LT5iY2hfZW5hYmxlZCkgewogCQkJCWVyYXNlZCA9IChlcmFzZWRf Y3cgJiBFUkFTRURfQ1cpID09IEVSQVNFRF9DVyA/CiAJCQkJCSB0cnVlIDogZmFsc2U7Ci0JCQl9 IGVsc2UgeworCQkJLyoKKwkJCSAqIEZvciBSUyBFQ0MsIEhXIHJlcG9ydHMgdGhlIGVyYXNlZCBD VyBieSBwbGFjaW5nCisJCQkgKiBzcGVjaWFsIGNoYXJhY3RlcnMgYXQgY2VydGFpbiBvZmZzZXRz IGluIHRoZSBidWZmZXIuCisJCQkgKiBUaGVzZSBzcGVjaWFsIGNoYXJhY3RlcnMgd2lsbCBiZSB2 YWxpZCBvbmx5IGlmCisJCQkgKiBjb21wbGV0ZSBwYWdlIGlzIHJlYWQgaS5lLiBkYXRhX2J1ZiBp cyBub3QgTlVMTC4KKwkJCSAqLworCQkJfSBlbHNlIGlmIChkYXRhX2J1ZikgewogCQkJCWVyYXNl ZCA9IGVyYXNlZF9jaHVua19jaGVja19hbmRfZml4dXAoZGF0YV9idWYsCiAJCQkJCQkJCSAgICAg IGRhdGFfbGVuKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJhc2VkID0gZmFsc2U7CiAJCQl9CiAKIAkJ CWlmIChlcmFzZWQpIHsKQEAgLTE2NjUsNyArMTY3Niw4IEBAIHN0YXRpYyBpbnQgcGFyc2VfcmVh ZF9lcnJvcnMoc3RydWN0IHFjb21fbmFuZF9ob3N0ICpob3N0LCB1OCAqZGF0YV9idWYsCiAJCQlt YXhfYml0ZmxpcHMgPSBtYXgobWF4X2JpdGZsaXBzLCBzdGF0KTsKIAkJfQogCi0JCWRhdGFfYnVm ICs9IGRhdGFfbGVuOworCQlpZiAoZGF0YV9idWYpCisJCQlkYXRhX2J1ZiArPSBkYXRhX2xlbjsK IAkJaWYgKG9vYl9idWYpCiAJCQlvb2JfYnVmICs9IG9vYl9sZW4gKyBlY2MtPmJ5dGVzOwogCX0K LS0gClFVQUxDT01NIElORElBLCBvbiBiZWhhbGYgb2YgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50 ZXIsIEluYy4KaXMgYSBtZW1iZXIgb2YgQ29kZSBBdXJvcmEgRm9ydW0sIGhvc3RlZCBieSBUaGUg TGludXggRm91bmRhdGlvbgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpMaW51eCBNVEQgZGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3QKaHR0cDov L2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tdGQvCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.codeaurora.org ([198.145.29.96]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fVXXY-0001O3-S7 for linux-mtd@lists.infradead.org; Wed, 20 Jun 2018 07:29:02 +0000 From: Abhishek Sahu To: Boris Brezillon , Miquel Raynal Cc: David Woodhouse , Brian Norris , Marek Vasut , Richard Weinberger , linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org, Andy Gross , Archit Taneja , Abhishek Sahu Subject: [PATCH v4 08/15] mtd: rawnand: qcom: fix null pointer access for erased page detection Date: Wed, 20 Jun 2018 12:57:35 +0530 Message-Id: <1529479662-4026-9-git-send-email-absahu@codeaurora.org> In-Reply-To: <1529479662-4026-1-git-send-email-absahu@codeaurora.org> References: <1529479662-4026-1-git-send-email-absahu@codeaurora.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , parse_read_errors can be called with only oob_buf in which case data_buf will be NULL. If data_buf is NULL, then don’t treat this page as completely erased in case of ECC uncorrectable error for RS ECC. For BCH ECC, the controller itself tells regarding erased page in status register. Acked-by: Miquel Raynal Signed-off-by: Abhishek Sahu --- * Changes from v3: NONE * Changes from v2: NONE * Changes from v1: 1. Added more detail in commit message 2. Added comment before each if/else drivers/mtd/nand/raw/qcom_nandc.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/drivers/mtd/nand/raw/qcom_nandc.c b/drivers/mtd/nand/raw/qcom_nandc.c index 0d931d5..a831f9c 100644 --- a/drivers/mtd/nand/raw/qcom_nandc.c +++ b/drivers/mtd/nand/raw/qcom_nandc.c @@ -1611,13 +1611,24 @@ static int parse_read_errors(struct qcom_nand_host *host, u8 *data_buf, int ret, ecclen, extraooblen; void *eccbuf; - /* ignore erased codeword errors */ + /* + * For BCH ECC, ignore erased codeword errors, if + * ERASED_CW bits are set. + */ if (host->bch_enabled) { erased = (erased_cw & ERASED_CW) == ERASED_CW ? true : false; - } else { + /* + * For RS ECC, HW reports the erased CW by placing + * special characters at certain offsets in the buffer. + * These special characters will be valid only if + * complete page is read i.e. data_buf is not NULL. + */ + } else if (data_buf) { erased = erased_chunk_check_and_fixup(data_buf, data_len); + } else { + erased = false; } if (erased) { @@ -1665,7 +1676,8 @@ static int parse_read_errors(struct qcom_nand_host *host, u8 *data_buf, max_bitflips = max(max_bitflips, stat); } - data_buf += data_len; + if (data_buf) + data_buf += data_len; if (oob_buf) oob_buf += oob_len + ecc->bytes; } -- QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation