xref: /linux/drivers/mtd/ubi/io.c (revision d39d0ed196aa1685bb24771e92f78633c66ac9cb)
1 /*
2  * Copyright (c) International Business Machines Corp., 2006
3  * Copyright (c) Nokia Corporation, 2006, 2007
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
13  * the GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  *
19  * Author: Artem Bityutskiy (Битюцкий Артём)
20  */
21 
22 /*
23  * UBI input/output sub-system.
24  *
25  * This sub-system provides a uniform way to work with all kinds of the
26  * underlying MTD devices. It also implements handy functions for reading and
27  * writing UBI headers.
28  *
29  * We are trying to have a paranoid mindset and not to trust to what we read
30  * from the flash media in order to be more secure and robust. So this
31  * sub-system validates every single header it reads from the flash media.
32  *
33  * Some words about how the eraseblock headers are stored.
34  *
35  * The erase counter header is always stored at offset zero. By default, the
36  * VID header is stored after the EC header at the closest aligned offset
37  * (i.e. aligned to the minimum I/O unit size). Data starts next to the VID
38  * header at the closest aligned offset. But this default layout may be
39  * changed. For example, for different reasons (e.g., optimization) UBI may be
40  * asked to put the VID header at further offset, and even at an unaligned
41  * offset. Of course, if the offset of the VID header is unaligned, UBI adds
42  * proper padding in front of it. Data offset may also be changed but it has to
43  * be aligned.
44  *
45  * About minimal I/O units. In general, UBI assumes flash device model where
46  * there is only one minimal I/O unit size. E.g., in case of NOR flash it is 1,
47  * in case of NAND flash it is a NAND page, etc. This is reported by MTD in the
48  * @ubi->mtd->writesize field. But as an exception, UBI admits of using another
49  * (smaller) minimal I/O unit size for EC and VID headers to make it possible
50  * to do different optimizations.
51  *
52  * This is extremely useful in case of NAND flashes which admit of several
53  * write operations to one NAND page. In this case UBI can fit EC and VID
54  * headers at one NAND page. Thus, UBI may use "sub-page" size as the minimal
55  * I/O unit for the headers (the @ubi->hdrs_min_io_size field). But it still
56  * reports NAND page size (@ubi->min_io_size) as a minimal I/O unit for the UBI
57  * users.
58  *
59  * Example: some Samsung NANDs with 2KiB pages allow 4x 512-byte writes, so
60  * although the minimal I/O unit is 2K, UBI uses 512 bytes for EC and VID
61  * headers.
62  *
63  * Q: why not just to treat sub-page as a minimal I/O unit of this flash
64  * device, e.g., make @ubi->min_io_size = 512 in the example above?
65  *
66  * A: because when writing a sub-page, MTD still writes a full 2K page but the
67  * bytes which are not relevant to the sub-page are 0xFF. So, basically,
68  * writing 4x512 sub-pages is 4 times slower than writing one 2KiB NAND page.
69  * Thus, we prefer to use sub-pages only for EC and VID headers.
70  *
71  * As it was noted above, the VID header may start at a non-aligned offset.
72  * For example, in case of a 2KiB page NAND flash with a 512 bytes sub-page,
73  * the VID header may reside at offset 1984 which is the last 64 bytes of the
74  * last sub-page (EC header is always at offset zero). This causes some
75  * difficulties when reading and writing VID headers.
76  *
77  * Suppose we have a 64-byte buffer and we read a VID header at it. We change
78  * the data and want to write this VID header out. As we can only write in
79  * 512-byte chunks, we have to allocate one more buffer and copy our VID header
80  * to offset 448 of this buffer.
81  *
82  * The I/O sub-system does the following trick in order to avoid this extra
83  * copy. It always allocates a @ubi->vid_hdr_alsize bytes buffer for the VID
84  * header and returns a pointer to offset @ubi->vid_hdr_shift of this buffer.
85  * When the VID header is being written out, it shifts the VID header pointer
86  * back and writes the whole sub-page.
87  */
88 
89 #include <linux/crc32.h>
90 #include <linux/err.h>
91 #include <linux/slab.h>
92 #include "ubi.h"
93 
94 #ifdef CONFIG_MTD_UBI_DEBUG_PARANOID
95 static int paranoid_check_not_bad(const struct ubi_device *ubi, int pnum);
96 static int paranoid_check_peb_ec_hdr(const struct ubi_device *ubi, int pnum);
97 static int paranoid_check_ec_hdr(const struct ubi_device *ubi, int pnum,
98 				 const struct ubi_ec_hdr *ec_hdr);
99 static int paranoid_check_peb_vid_hdr(const struct ubi_device *ubi, int pnum);
100 static int paranoid_check_vid_hdr(const struct ubi_device *ubi, int pnum,
101 				  const struct ubi_vid_hdr *vid_hdr);
102 #else
103 #define paranoid_check_not_bad(ubi, pnum) 0
104 #define paranoid_check_peb_ec_hdr(ubi, pnum)  0
105 #define paranoid_check_ec_hdr(ubi, pnum, ec_hdr)  0
106 #define paranoid_check_peb_vid_hdr(ubi, pnum) 0
107 #define paranoid_check_vid_hdr(ubi, pnum, vid_hdr) 0
108 #endif
109 
110 /**
111  * ubi_io_read - read data from a physical eraseblock.
112  * @ubi: UBI device description object
113  * @buf: buffer where to store the read data
114  * @pnum: physical eraseblock number to read from
115  * @offset: offset within the physical eraseblock from where to read
116  * @len: how many bytes to read
117  *
118  * This function reads data from offset @offset of physical eraseblock @pnum
119  * and stores the read data in the @buf buffer. The following return codes are
120  * possible:
121  *
122  * o %0 if all the requested data were successfully read;
123  * o %UBI_IO_BITFLIPS if all the requested data were successfully read, but
124  *   correctable bit-flips were detected; this is harmless but may indicate
125  *   that this eraseblock may become bad soon (but do not have to);
126  * o %-EBADMSG if the MTD subsystem reported about data integrity problems, for
127  *   example it can be an ECC error in case of NAND; this most probably means
128  *   that the data is corrupted;
129  * o %-EIO if some I/O error occurred;
130  * o other negative error codes in case of other errors.
131  */
132 int ubi_io_read(const struct ubi_device *ubi, void *buf, int pnum, int offset,
133 		int len)
134 {
135 	int err, retries = 0;
136 	size_t read;
137 	loff_t addr;
138 
139 	dbg_io("read %d bytes from PEB %d:%d", len, pnum, offset);
140 
141 	ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
142 	ubi_assert(offset >= 0 && offset + len <= ubi->peb_size);
143 	ubi_assert(len > 0);
144 
145 	err = paranoid_check_not_bad(ubi, pnum);
146 	if (err)
147 		return err;
148 
149 	addr = (loff_t)pnum * ubi->peb_size + offset;
150 retry:
151 	err = ubi->mtd->read(ubi->mtd, addr, len, &read, buf);
152 	if (err) {
153 		const char *errstr = (err == -EBADMSG) ? " (ECC error)" : "";
154 
155 		if (err == -EUCLEAN) {
156 			/*
157 			 * -EUCLEAN is reported if there was a bit-flip which
158 			 * was corrected, so this is harmless.
159 			 *
160 			 * We do not report about it here unless debugging is
161 			 * enabled. A corresponding message will be printed
162 			 * later, when it is has been scrubbed.
163 			 */
164 			dbg_msg("fixable bit-flip detected at PEB %d", pnum);
165 			ubi_assert(len == read);
166 			return UBI_IO_BITFLIPS;
167 		}
168 
169 		if (read != len && retries++ < UBI_IO_RETRIES) {
170 			dbg_io("error %d%s while reading %d bytes from PEB %d:%d,"
171 			       " read only %zd bytes, retry",
172 			       err, errstr, len, pnum, offset, read);
173 			yield();
174 			goto retry;
175 		}
176 
177 		ubi_err("error %d%s while reading %d bytes from PEB %d:%d, "
178 			"read %zd bytes", err, errstr, len, pnum, offset, read);
179 		ubi_dbg_dump_stack();
180 
181 		/*
182 		 * The driver should never return -EBADMSG if it failed to read
183 		 * all the requested data. But some buggy drivers might do
184 		 * this, so we change it to -EIO.
185 		 */
186 		if (read != len && err == -EBADMSG) {
187 			ubi_assert(0);
188 			err = -EIO;
189 		}
190 	} else {
191 		ubi_assert(len == read);
192 
193 		if (ubi_dbg_is_bitflip()) {
194 			dbg_gen("bit-flip (emulated)");
195 			err = UBI_IO_BITFLIPS;
196 		}
197 	}
198 
199 	return err;
200 }
201 
202 /**
203  * ubi_io_write - write data to a physical eraseblock.
204  * @ubi: UBI device description object
205  * @buf: buffer with the data to write
206  * @pnum: physical eraseblock number to write to
207  * @offset: offset within the physical eraseblock where to write
208  * @len: how many bytes to write
209  *
210  * This function writes @len bytes of data from buffer @buf to offset @offset
211  * of physical eraseblock @pnum. If all the data were successfully written,
212  * zero is returned. If an error occurred, this function returns a negative
213  * error code. If %-EIO is returned, the physical eraseblock most probably went
214  * bad.
215  *
216  * Note, in case of an error, it is possible that something was still written
217  * to the flash media, but may be some garbage.
218  */
219 int ubi_io_write(struct ubi_device *ubi, const void *buf, int pnum, int offset,
220 		 int len)
221 {
222 	int err;
223 	size_t written;
224 	loff_t addr;
225 
226 	dbg_io("write %d bytes to PEB %d:%d", len, pnum, offset);
227 
228 	ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
229 	ubi_assert(offset >= 0 && offset + len <= ubi->peb_size);
230 	ubi_assert(offset % ubi->hdrs_min_io_size == 0);
231 	ubi_assert(len > 0 && len % ubi->hdrs_min_io_size == 0);
232 
233 	if (ubi->ro_mode) {
234 		ubi_err("read-only mode");
235 		return -EROFS;
236 	}
237 
238 	/* The below has to be compiled out if paranoid checks are disabled */
239 
240 	err = paranoid_check_not_bad(ubi, pnum);
241 	if (err)
242 		return err;
243 
244 	/* The area we are writing to has to contain all 0xFF bytes */
245 	err = ubi_dbg_check_all_ff(ubi, pnum, offset, len);
246 	if (err)
247 		return err;
248 
249 	if (offset >= ubi->leb_start) {
250 		/*
251 		 * We write to the data area of the physical eraseblock. Make
252 		 * sure it has valid EC and VID headers.
253 		 */
254 		err = paranoid_check_peb_ec_hdr(ubi, pnum);
255 		if (err)
256 			return err;
257 		err = paranoid_check_peb_vid_hdr(ubi, pnum);
258 		if (err)
259 			return err;
260 	}
261 
262 	if (ubi_dbg_is_write_failure()) {
263 		dbg_err("cannot write %d bytes to PEB %d:%d "
264 			"(emulated)", len, pnum, offset);
265 		ubi_dbg_dump_stack();
266 		return -EIO;
267 	}
268 
269 	addr = (loff_t)pnum * ubi->peb_size + offset;
270 	err = ubi->mtd->write(ubi->mtd, addr, len, &written, buf);
271 	if (err) {
272 		ubi_err("error %d while writing %d bytes to PEB %d:%d, written "
273 			"%zd bytes", err, len, pnum, offset, written);
274 		ubi_dbg_dump_stack();
275 		ubi_dbg_dump_flash(ubi, pnum, offset, len);
276 	} else
277 		ubi_assert(written == len);
278 
279 	if (!err) {
280 		err = ubi_dbg_check_write(ubi, buf, pnum, offset, len);
281 		if (err)
282 			return err;
283 
284 		/*
285 		 * Since we always write sequentially, the rest of the PEB has
286 		 * to contain only 0xFF bytes.
287 		 */
288 		offset += len;
289 		len = ubi->peb_size - offset;
290 		if (len)
291 			err = ubi_dbg_check_all_ff(ubi, pnum, offset, len);
292 	}
293 
294 	return err;
295 }
296 
297 /**
298  * erase_callback - MTD erasure call-back.
299  * @ei: MTD erase information object.
300  *
301  * Note, even though MTD erase interface is asynchronous, all the current
302  * implementations are synchronous anyway.
303  */
304 static void erase_callback(struct erase_info *ei)
305 {
306 	wake_up_interruptible((wait_queue_head_t *)ei->priv);
307 }
308 
309 /**
310  * do_sync_erase - synchronously erase a physical eraseblock.
311  * @ubi: UBI device description object
312  * @pnum: the physical eraseblock number to erase
313  *
314  * This function synchronously erases physical eraseblock @pnum and returns
315  * zero in case of success and a negative error code in case of failure. If
316  * %-EIO is returned, the physical eraseblock most probably went bad.
317  */
318 static int do_sync_erase(struct ubi_device *ubi, int pnum)
319 {
320 	int err, retries = 0;
321 	struct erase_info ei;
322 	wait_queue_head_t wq;
323 
324 	dbg_io("erase PEB %d", pnum);
325 
326 retry:
327 	init_waitqueue_head(&wq);
328 	memset(&ei, 0, sizeof(struct erase_info));
329 
330 	ei.mtd      = ubi->mtd;
331 	ei.addr     = (loff_t)pnum * ubi->peb_size;
332 	ei.len      = ubi->peb_size;
333 	ei.callback = erase_callback;
334 	ei.priv     = (unsigned long)&wq;
335 
336 	err = ubi->mtd->erase(ubi->mtd, &ei);
337 	if (err) {
338 		if (retries++ < UBI_IO_RETRIES) {
339 			dbg_io("error %d while erasing PEB %d, retry",
340 			       err, pnum);
341 			yield();
342 			goto retry;
343 		}
344 		ubi_err("cannot erase PEB %d, error %d", pnum, err);
345 		ubi_dbg_dump_stack();
346 		return err;
347 	}
348 
349 	err = wait_event_interruptible(wq, ei.state == MTD_ERASE_DONE ||
350 					   ei.state == MTD_ERASE_FAILED);
351 	if (err) {
352 		ubi_err("interrupted PEB %d erasure", pnum);
353 		return -EINTR;
354 	}
355 
356 	if (ei.state == MTD_ERASE_FAILED) {
357 		if (retries++ < UBI_IO_RETRIES) {
358 			dbg_io("error while erasing PEB %d, retry", pnum);
359 			yield();
360 			goto retry;
361 		}
362 		ubi_err("cannot erase PEB %d", pnum);
363 		ubi_dbg_dump_stack();
364 		return -EIO;
365 	}
366 
367 	err = ubi_dbg_check_all_ff(ubi, pnum, 0, ubi->peb_size);
368 	if (err)
369 		return err;
370 
371 	if (ubi_dbg_is_erase_failure() && !err) {
372 		dbg_err("cannot erase PEB %d (emulated)", pnum);
373 		return -EIO;
374 	}
375 
376 	return 0;
377 }
378 
379 /**
380  * check_pattern - check if buffer contains only a certain byte pattern.
381  * @buf: buffer to check
382  * @patt: the pattern to check
383  * @size: buffer size in bytes
384  *
385  * This function returns %1 in there are only @patt bytes in @buf, and %0 if
386  * something else was also found.
387  */
388 static int check_pattern(const void *buf, uint8_t patt, int size)
389 {
390 	int i;
391 
392 	for (i = 0; i < size; i++)
393 		if (((const uint8_t *)buf)[i] != patt)
394 			return 0;
395 	return 1;
396 }
397 
398 /* Patterns to write to a physical eraseblock when torturing it */
399 static uint8_t patterns[] = {0xa5, 0x5a, 0x0};
400 
401 /**
402  * torture_peb - test a supposedly bad physical eraseblock.
403  * @ubi: UBI device description object
404  * @pnum: the physical eraseblock number to test
405  *
406  * This function returns %-EIO if the physical eraseblock did not pass the
407  * test, a positive number of erase operations done if the test was
408  * successfully passed, and other negative error codes in case of other errors.
409  */
410 static int torture_peb(struct ubi_device *ubi, int pnum)
411 {
412 	int err, i, patt_count;
413 
414 	ubi_msg("run torture test for PEB %d", pnum);
415 	patt_count = ARRAY_SIZE(patterns);
416 	ubi_assert(patt_count > 0);
417 
418 	mutex_lock(&ubi->buf_mutex);
419 	for (i = 0; i < patt_count; i++) {
420 		err = do_sync_erase(ubi, pnum);
421 		if (err)
422 			goto out;
423 
424 		/* Make sure the PEB contains only 0xFF bytes */
425 		err = ubi_io_read(ubi, ubi->peb_buf1, pnum, 0, ubi->peb_size);
426 		if (err)
427 			goto out;
428 
429 		err = check_pattern(ubi->peb_buf1, 0xFF, ubi->peb_size);
430 		if (err == 0) {
431 			ubi_err("erased PEB %d, but a non-0xFF byte found",
432 				pnum);
433 			err = -EIO;
434 			goto out;
435 		}
436 
437 		/* Write a pattern and check it */
438 		memset(ubi->peb_buf1, patterns[i], ubi->peb_size);
439 		err = ubi_io_write(ubi, ubi->peb_buf1, pnum, 0, ubi->peb_size);
440 		if (err)
441 			goto out;
442 
443 		memset(ubi->peb_buf1, ~patterns[i], ubi->peb_size);
444 		err = ubi_io_read(ubi, ubi->peb_buf1, pnum, 0, ubi->peb_size);
445 		if (err)
446 			goto out;
447 
448 		err = check_pattern(ubi->peb_buf1, patterns[i], ubi->peb_size);
449 		if (err == 0) {
450 			ubi_err("pattern %x checking failed for PEB %d",
451 				patterns[i], pnum);
452 			err = -EIO;
453 			goto out;
454 		}
455 	}
456 
457 	err = patt_count;
458 	ubi_msg("PEB %d passed torture test, do not mark it a bad", pnum);
459 
460 out:
461 	mutex_unlock(&ubi->buf_mutex);
462 	if (err == UBI_IO_BITFLIPS || err == -EBADMSG) {
463 		/*
464 		 * If a bit-flip or data integrity error was detected, the test
465 		 * has not passed because it happened on a freshly erased
466 		 * physical eraseblock which means something is wrong with it.
467 		 */
468 		ubi_err("read problems on freshly erased PEB %d, must be bad",
469 			pnum);
470 		err = -EIO;
471 	}
472 	return err;
473 }
474 
475 /**
476  * nor_erase_prepare - prepare a NOR flash PEB for erasure.
477  * @ubi: UBI device description object
478  * @pnum: physical eraseblock number to prepare
479  *
480  * NOR flash, or at least some of them, have peculiar embedded PEB erasure
481  * algorithm: the PEB is first filled with zeroes, then it is erased. And
482  * filling with zeroes starts from the end of the PEB. This was observed with
483  * Spansion S29GL512N NOR flash.
484  *
485  * This means that in case of a power cut we may end up with intact data at the
486  * beginning of the PEB, and all zeroes at the end of PEB. In other words, the
487  * EC and VID headers are OK, but a large chunk of data at the end of PEB is
488  * zeroed. This makes UBI mistakenly treat this PEB as used and associate it
489  * with an LEB, which leads to subsequent failures (e.g., UBIFS fails).
490  *
491  * This function is called before erasing NOR PEBs and it zeroes out EC and VID
492  * magic numbers in order to invalidate them and prevent the failures. Returns
493  * zero in case of success and a negative error code in case of failure.
494  */
495 static int nor_erase_prepare(struct ubi_device *ubi, int pnum)
496 {
497 	int err, err1;
498 	size_t written;
499 	loff_t addr;
500 	uint32_t data = 0;
501 	struct ubi_vid_hdr vid_hdr;
502 
503 	addr = (loff_t)pnum * ubi->peb_size + ubi->vid_hdr_aloffset;
504 	err = ubi->mtd->write(ubi->mtd, addr, 4, &written, (void *)&data);
505 	if (!err) {
506 		addr -= ubi->vid_hdr_aloffset;
507 		err = ubi->mtd->write(ubi->mtd, addr, 4, &written,
508 				      (void *)&data);
509 		if (!err)
510 			return 0;
511 	}
512 
513 	/*
514 	 * We failed to write to the media. This was observed with Spansion
515 	 * S29GL512N NOR flash. Most probably the eraseblock erasure was
516 	 * interrupted at a very inappropriate moment, so it became unwritable.
517 	 * In this case we probably anyway have garbage in this PEB.
518 	 */
519 	err1 = ubi_io_read_vid_hdr(ubi, pnum, &vid_hdr, 0);
520 	if (err1 == UBI_IO_BAD_HDR_READ || err1 == UBI_IO_BAD_HDR)
521 		/*
522 		 * The VID header is corrupted, so we can safely erase this
523 		 * PEB and not afraid that it will be treated as a valid PEB in
524 		 * case of an unclean reboot.
525 		 */
526 		return 0;
527 
528 	/*
529 	 * The PEB contains a valid VID header, but we cannot invalidate it.
530 	 * Supposedly the flash media or the driver is screwed up, so return an
531 	 * error.
532 	 */
533 	ubi_err("cannot invalidate PEB %d, write returned %d read returned %d",
534 		pnum, err, err1);
535 	ubi_dbg_dump_flash(ubi, pnum, 0, ubi->peb_size);
536 	return -EIO;
537 }
538 
539 /**
540  * ubi_io_sync_erase - synchronously erase a physical eraseblock.
541  * @ubi: UBI device description object
542  * @pnum: physical eraseblock number to erase
543  * @torture: if this physical eraseblock has to be tortured
544  *
545  * This function synchronously erases physical eraseblock @pnum. If @torture
546  * flag is not zero, the physical eraseblock is checked by means of writing
547  * different patterns to it and reading them back. If the torturing is enabled,
548  * the physical eraseblock is erased more than once.
549  *
550  * This function returns the number of erasures made in case of success, %-EIO
551  * if the erasure failed or the torturing test failed, and other negative error
552  * codes in case of other errors. Note, %-EIO means that the physical
553  * eraseblock is bad.
554  */
555 int ubi_io_sync_erase(struct ubi_device *ubi, int pnum, int torture)
556 {
557 	int err, ret = 0;
558 
559 	ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
560 
561 	err = paranoid_check_not_bad(ubi, pnum);
562 	if (err != 0)
563 		return err;
564 
565 	if (ubi->ro_mode) {
566 		ubi_err("read-only mode");
567 		return -EROFS;
568 	}
569 
570 	if (ubi->nor_flash) {
571 		err = nor_erase_prepare(ubi, pnum);
572 		if (err)
573 			return err;
574 	}
575 
576 	if (torture) {
577 		ret = torture_peb(ubi, pnum);
578 		if (ret < 0)
579 			return ret;
580 	}
581 
582 	err = do_sync_erase(ubi, pnum);
583 	if (err)
584 		return err;
585 
586 	return ret + 1;
587 }
588 
589 /**
590  * ubi_io_is_bad - check if a physical eraseblock is bad.
591  * @ubi: UBI device description object
592  * @pnum: the physical eraseblock number to check
593  *
594  * This function returns a positive number if the physical eraseblock is bad,
595  * zero if not, and a negative error code if an error occurred.
596  */
597 int ubi_io_is_bad(const struct ubi_device *ubi, int pnum)
598 {
599 	struct mtd_info *mtd = ubi->mtd;
600 
601 	ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
602 
603 	if (ubi->bad_allowed) {
604 		int ret;
605 
606 		ret = mtd->block_isbad(mtd, (loff_t)pnum * ubi->peb_size);
607 		if (ret < 0)
608 			ubi_err("error %d while checking if PEB %d is bad",
609 				ret, pnum);
610 		else if (ret)
611 			dbg_io("PEB %d is bad", pnum);
612 		return ret;
613 	}
614 
615 	return 0;
616 }
617 
618 /**
619  * ubi_io_mark_bad - mark a physical eraseblock as bad.
620  * @ubi: UBI device description object
621  * @pnum: the physical eraseblock number to mark
622  *
623  * This function returns zero in case of success and a negative error code in
624  * case of failure.
625  */
626 int ubi_io_mark_bad(const struct ubi_device *ubi, int pnum)
627 {
628 	int err;
629 	struct mtd_info *mtd = ubi->mtd;
630 
631 	ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
632 
633 	if (ubi->ro_mode) {
634 		ubi_err("read-only mode");
635 		return -EROFS;
636 	}
637 
638 	if (!ubi->bad_allowed)
639 		return 0;
640 
641 	err = mtd->block_markbad(mtd, (loff_t)pnum * ubi->peb_size);
642 	if (err)
643 		ubi_err("cannot mark PEB %d bad, error %d", pnum, err);
644 	return err;
645 }
646 
647 /**
648  * validate_ec_hdr - validate an erase counter header.
649  * @ubi: UBI device description object
650  * @ec_hdr: the erase counter header to check
651  *
652  * This function returns zero if the erase counter header is OK, and %1 if
653  * not.
654  */
655 static int validate_ec_hdr(const struct ubi_device *ubi,
656 			   const struct ubi_ec_hdr *ec_hdr)
657 {
658 	long long ec;
659 	int vid_hdr_offset, leb_start;
660 
661 	ec = be64_to_cpu(ec_hdr->ec);
662 	vid_hdr_offset = be32_to_cpu(ec_hdr->vid_hdr_offset);
663 	leb_start = be32_to_cpu(ec_hdr->data_offset);
664 
665 	if (ec_hdr->version != UBI_VERSION) {
666 		ubi_err("node with incompatible UBI version found: "
667 			"this UBI version is %d, image version is %d",
668 			UBI_VERSION, (int)ec_hdr->version);
669 		goto bad;
670 	}
671 
672 	if (vid_hdr_offset != ubi->vid_hdr_offset) {
673 		ubi_err("bad VID header offset %d, expected %d",
674 			vid_hdr_offset, ubi->vid_hdr_offset);
675 		goto bad;
676 	}
677 
678 	if (leb_start != ubi->leb_start) {
679 		ubi_err("bad data offset %d, expected %d",
680 			leb_start, ubi->leb_start);
681 		goto bad;
682 	}
683 
684 	if (ec < 0 || ec > UBI_MAX_ERASECOUNTER) {
685 		ubi_err("bad erase counter %lld", ec);
686 		goto bad;
687 	}
688 
689 	return 0;
690 
691 bad:
692 	ubi_err("bad EC header");
693 	ubi_dbg_dump_ec_hdr(ec_hdr);
694 	ubi_dbg_dump_stack();
695 	return 1;
696 }
697 
698 /**
699  * ubi_io_read_ec_hdr - read and check an erase counter header.
700  * @ubi: UBI device description object
701  * @pnum: physical eraseblock to read from
702  * @ec_hdr: a &struct ubi_ec_hdr object where to store the read erase counter
703  * header
704  * @verbose: be verbose if the header is corrupted or was not found
705  *
706  * This function reads erase counter header from physical eraseblock @pnum and
707  * stores it in @ec_hdr. This function also checks CRC checksum of the read
708  * erase counter header. The following codes may be returned:
709  *
710  * o %0 if the CRC checksum is correct and the header was successfully read;
711  * o %UBI_IO_BITFLIPS if the CRC is correct, but bit-flips were detected
712  *   and corrected by the flash driver; this is harmless but may indicate that
713  *   this eraseblock may become bad soon (but may be not);
714  * o %UBI_IO_BAD_HDR if the erase counter header is corrupted (a CRC error);
715  * o %UBI_IO_PEB_EMPTY if the physical eraseblock is empty;
716  * o a negative error code in case of failure.
717  */
718 int ubi_io_read_ec_hdr(struct ubi_device *ubi, int pnum,
719 		       struct ubi_ec_hdr *ec_hdr, int verbose)
720 {
721 	int err, read_err = 0;
722 	uint32_t crc, magic, hdr_crc;
723 
724 	dbg_io("read EC header from PEB %d", pnum);
725 	ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
726 
727 	err = ubi_io_read(ubi, ec_hdr, pnum, 0, UBI_EC_HDR_SIZE);
728 	if (err) {
729 		if (err != UBI_IO_BITFLIPS && err != -EBADMSG)
730 			return err;
731 
732 		/*
733 		 * We read all the data, but either a correctable bit-flip
734 		 * occurred, or MTD reported about some data integrity error,
735 		 * like an ECC error in case of NAND. The former is harmless,
736 		 * the later may mean that the read data is corrupted. But we
737 		 * have a CRC check-sum and we will detect this. If the EC
738 		 * header is still OK, we just report this as there was a
739 		 * bit-flip.
740 		 */
741 		if (err == -EBADMSG)
742 			read_err = UBI_IO_BAD_HDR_READ;
743 	}
744 
745 	magic = be32_to_cpu(ec_hdr->magic);
746 	if (magic != UBI_EC_HDR_MAGIC) {
747 		if (read_err)
748 			return read_err;
749 
750 		/*
751 		 * The magic field is wrong. Let's check if we have read all
752 		 * 0xFF. If yes, this physical eraseblock is assumed to be
753 		 * empty.
754 		 */
755 		if (check_pattern(ec_hdr, 0xFF, UBI_EC_HDR_SIZE)) {
756 			/* The physical eraseblock is supposedly empty */
757 			if (verbose)
758 				ubi_warn("no EC header found at PEB %d, "
759 					 "only 0xFF bytes", pnum);
760 			else if (UBI_IO_DEBUG)
761 				dbg_msg("no EC header found at PEB %d, "
762 					"only 0xFF bytes", pnum);
763 			return UBI_IO_PEB_EMPTY;
764 		}
765 
766 		/*
767 		 * This is not a valid erase counter header, and these are not
768 		 * 0xFF bytes. Report that the header is corrupted.
769 		 */
770 		if (verbose) {
771 			ubi_warn("bad magic number at PEB %d: %08x instead of "
772 				 "%08x", pnum, magic, UBI_EC_HDR_MAGIC);
773 			ubi_dbg_dump_ec_hdr(ec_hdr);
774 		} else if (UBI_IO_DEBUG)
775 			dbg_msg("bad magic number at PEB %d: %08x instead of "
776 				"%08x", pnum, magic, UBI_EC_HDR_MAGIC);
777 		return UBI_IO_BAD_HDR;
778 	}
779 
780 	crc = crc32(UBI_CRC32_INIT, ec_hdr, UBI_EC_HDR_SIZE_CRC);
781 	hdr_crc = be32_to_cpu(ec_hdr->hdr_crc);
782 
783 	if (hdr_crc != crc) {
784 		if (verbose) {
785 			ubi_warn("bad EC header CRC at PEB %d, calculated "
786 				 "%#08x, read %#08x", pnum, crc, hdr_crc);
787 			ubi_dbg_dump_ec_hdr(ec_hdr);
788 		} else if (UBI_IO_DEBUG)
789 			dbg_msg("bad EC header CRC at PEB %d, calculated "
790 				"%#08x, read %#08x", pnum, crc, hdr_crc);
791 		return read_err ?: UBI_IO_BAD_HDR;
792 	}
793 
794 	/* And of course validate what has just been read from the media */
795 	err = validate_ec_hdr(ubi, ec_hdr);
796 	if (err) {
797 		ubi_err("validation failed for PEB %d", pnum);
798 		return -EINVAL;
799 	}
800 
801 	/*
802 	 * If there was %-EBADMSG, but the header CRC is still OK, report about
803 	 * a bit-flip to force scrubbing on this PEB.
804 	 */
805 	return read_err ? UBI_IO_BITFLIPS : 0;
806 }
807 
808 /**
809  * ubi_io_write_ec_hdr - write an erase counter header.
810  * @ubi: UBI device description object
811  * @pnum: physical eraseblock to write to
812  * @ec_hdr: the erase counter header to write
813  *
814  * This function writes erase counter header described by @ec_hdr to physical
815  * eraseblock @pnum. It also fills most fields of @ec_hdr before writing, so
816  * the caller do not have to fill them. Callers must only fill the @ec_hdr->ec
817  * field.
818  *
819  * This function returns zero in case of success and a negative error code in
820  * case of failure. If %-EIO is returned, the physical eraseblock most probably
821  * went bad.
822  */
823 int ubi_io_write_ec_hdr(struct ubi_device *ubi, int pnum,
824 			struct ubi_ec_hdr *ec_hdr)
825 {
826 	int err;
827 	uint32_t crc;
828 
829 	dbg_io("write EC header to PEB %d", pnum);
830 	ubi_assert(pnum >= 0 &&  pnum < ubi->peb_count);
831 
832 	ec_hdr->magic = cpu_to_be32(UBI_EC_HDR_MAGIC);
833 	ec_hdr->version = UBI_VERSION;
834 	ec_hdr->vid_hdr_offset = cpu_to_be32(ubi->vid_hdr_offset);
835 	ec_hdr->data_offset = cpu_to_be32(ubi->leb_start);
836 	ec_hdr->image_seq = cpu_to_be32(ubi->image_seq);
837 	crc = crc32(UBI_CRC32_INIT, ec_hdr, UBI_EC_HDR_SIZE_CRC);
838 	ec_hdr->hdr_crc = cpu_to_be32(crc);
839 
840 	err = paranoid_check_ec_hdr(ubi, pnum, ec_hdr);
841 	if (err)
842 		return err;
843 
844 	err = ubi_io_write(ubi, ec_hdr, pnum, 0, ubi->ec_hdr_alsize);
845 	return err;
846 }
847 
848 /**
849  * validate_vid_hdr - validate a volume identifier header.
850  * @ubi: UBI device description object
851  * @vid_hdr: the volume identifier header to check
852  *
853  * This function checks that data stored in the volume identifier header
854  * @vid_hdr. Returns zero if the VID header is OK and %1 if not.
855  */
856 static int validate_vid_hdr(const struct ubi_device *ubi,
857 			    const struct ubi_vid_hdr *vid_hdr)
858 {
859 	int vol_type = vid_hdr->vol_type;
860 	int copy_flag = vid_hdr->copy_flag;
861 	int vol_id = be32_to_cpu(vid_hdr->vol_id);
862 	int lnum = be32_to_cpu(vid_hdr->lnum);
863 	int compat = vid_hdr->compat;
864 	int data_size = be32_to_cpu(vid_hdr->data_size);
865 	int used_ebs = be32_to_cpu(vid_hdr->used_ebs);
866 	int data_pad = be32_to_cpu(vid_hdr->data_pad);
867 	int data_crc = be32_to_cpu(vid_hdr->data_crc);
868 	int usable_leb_size = ubi->leb_size - data_pad;
869 
870 	if (copy_flag != 0 && copy_flag != 1) {
871 		dbg_err("bad copy_flag");
872 		goto bad;
873 	}
874 
875 	if (vol_id < 0 || lnum < 0 || data_size < 0 || used_ebs < 0 ||
876 	    data_pad < 0) {
877 		dbg_err("negative values");
878 		goto bad;
879 	}
880 
881 	if (vol_id >= UBI_MAX_VOLUMES && vol_id < UBI_INTERNAL_VOL_START) {
882 		dbg_err("bad vol_id");
883 		goto bad;
884 	}
885 
886 	if (vol_id < UBI_INTERNAL_VOL_START && compat != 0) {
887 		dbg_err("bad compat");
888 		goto bad;
889 	}
890 
891 	if (vol_id >= UBI_INTERNAL_VOL_START && compat != UBI_COMPAT_DELETE &&
892 	    compat != UBI_COMPAT_RO && compat != UBI_COMPAT_PRESERVE &&
893 	    compat != UBI_COMPAT_REJECT) {
894 		dbg_err("bad compat");
895 		goto bad;
896 	}
897 
898 	if (vol_type != UBI_VID_DYNAMIC && vol_type != UBI_VID_STATIC) {
899 		dbg_err("bad vol_type");
900 		goto bad;
901 	}
902 
903 	if (data_pad >= ubi->leb_size / 2) {
904 		dbg_err("bad data_pad");
905 		goto bad;
906 	}
907 
908 	if (vol_type == UBI_VID_STATIC) {
909 		/*
910 		 * Although from high-level point of view static volumes may
911 		 * contain zero bytes of data, but no VID headers can contain
912 		 * zero at these fields, because they empty volumes do not have
913 		 * mapped logical eraseblocks.
914 		 */
915 		if (used_ebs == 0) {
916 			dbg_err("zero used_ebs");
917 			goto bad;
918 		}
919 		if (data_size == 0) {
920 			dbg_err("zero data_size");
921 			goto bad;
922 		}
923 		if (lnum < used_ebs - 1) {
924 			if (data_size != usable_leb_size) {
925 				dbg_err("bad data_size");
926 				goto bad;
927 			}
928 		} else if (lnum == used_ebs - 1) {
929 			if (data_size == 0) {
930 				dbg_err("bad data_size at last LEB");
931 				goto bad;
932 			}
933 		} else {
934 			dbg_err("too high lnum");
935 			goto bad;
936 		}
937 	} else {
938 		if (copy_flag == 0) {
939 			if (data_crc != 0) {
940 				dbg_err("non-zero data CRC");
941 				goto bad;
942 			}
943 			if (data_size != 0) {
944 				dbg_err("non-zero data_size");
945 				goto bad;
946 			}
947 		} else {
948 			if (data_size == 0) {
949 				dbg_err("zero data_size of copy");
950 				goto bad;
951 			}
952 		}
953 		if (used_ebs != 0) {
954 			dbg_err("bad used_ebs");
955 			goto bad;
956 		}
957 	}
958 
959 	return 0;
960 
961 bad:
962 	ubi_err("bad VID header");
963 	ubi_dbg_dump_vid_hdr(vid_hdr);
964 	ubi_dbg_dump_stack();
965 	return 1;
966 }
967 
968 /**
969  * ubi_io_read_vid_hdr - read and check a volume identifier header.
970  * @ubi: UBI device description object
971  * @pnum: physical eraseblock number to read from
972  * @vid_hdr: &struct ubi_vid_hdr object where to store the read volume
973  * identifier header
974  * @verbose: be verbose if the header is corrupted or wasn't found
975  *
976  * This function reads the volume identifier header from physical eraseblock
977  * @pnum and stores it in @vid_hdr. It also checks CRC checksum of the read
978  * volume identifier header. The following codes may be returned:
979  *
980  * o %0 if the CRC checksum is correct and the header was successfully read;
981  * o %UBI_IO_BITFLIPS if the CRC is correct, but bit-flips were detected
982  *   and corrected by the flash driver; this is harmless but may indicate that
983  *   this eraseblock may become bad soon;
984  * o %UBI_IO_BAD_HDR if the volume identifier header is corrupted (a CRC
985  *   error detected);
986  * o %UBI_IO_PEB_FREE if the physical eraseblock is free (i.e., there is no VID
987  *   header there);
988  * o a negative error code in case of failure.
989  */
990 int ubi_io_read_vid_hdr(struct ubi_device *ubi, int pnum,
991 			struct ubi_vid_hdr *vid_hdr, int verbose)
992 {
993 	int err, read_err = 0;
994 	uint32_t crc, magic, hdr_crc;
995 	void *p;
996 
997 	dbg_io("read VID header from PEB %d", pnum);
998 	ubi_assert(pnum >= 0 &&  pnum < ubi->peb_count);
999 
1000 	p = (char *)vid_hdr - ubi->vid_hdr_shift;
1001 	err = ubi_io_read(ubi, p, pnum, ubi->vid_hdr_aloffset,
1002 			  ubi->vid_hdr_alsize);
1003 	if (err) {
1004 		if (err != UBI_IO_BITFLIPS && err != -EBADMSG)
1005 			return err;
1006 
1007 		/*
1008 		 * We read all the data, but either a correctable bit-flip
1009 		 * occurred, or MTD reported about some data integrity error,
1010 		 * like an ECC error in case of NAND. The former is harmless,
1011 		 * the later may mean the read data is corrupted. But we have a
1012 		 * CRC check-sum and we will identify this. If the VID header is
1013 		 * still OK, we just report this as there was a bit-flip.
1014 		 */
1015 		if (err == -EBADMSG)
1016 			read_err = UBI_IO_BAD_HDR_READ;
1017 	}
1018 
1019 	magic = be32_to_cpu(vid_hdr->magic);
1020 	if (magic != UBI_VID_HDR_MAGIC) {
1021 		if (read_err)
1022 			return read_err;
1023 
1024 		/*
1025 		 * If we have read all 0xFF bytes, the VID header probably does
1026 		 * not exist and the physical eraseblock is assumed to be free.
1027 		 */
1028 		if (check_pattern(vid_hdr, 0xFF, UBI_VID_HDR_SIZE)) {
1029 			/* The physical eraseblock is supposedly free */
1030 			if (verbose)
1031 				ubi_warn("no VID header found at PEB %d, "
1032 					 "only 0xFF bytes", pnum);
1033 			else if (UBI_IO_DEBUG)
1034 				dbg_msg("no VID header found at PEB %d, "
1035 					"only 0xFF bytes", pnum);
1036 			return UBI_IO_PEB_FREE;
1037 		}
1038 
1039 		/*
1040 		 * This is not a valid VID header, and these are not 0xFF
1041 		 * bytes. Report that the header is corrupted.
1042 		 */
1043 		if (verbose) {
1044 			ubi_warn("bad magic number at PEB %d: %08x instead of "
1045 				 "%08x", pnum, magic, UBI_VID_HDR_MAGIC);
1046 			ubi_dbg_dump_vid_hdr(vid_hdr);
1047 		} else if (UBI_IO_DEBUG)
1048 			dbg_msg("bad magic number at PEB %d: %08x instead of "
1049 				"%08x", pnum, magic, UBI_VID_HDR_MAGIC);
1050 		return UBI_IO_BAD_HDR;
1051 	}
1052 
1053 	crc = crc32(UBI_CRC32_INIT, vid_hdr, UBI_VID_HDR_SIZE_CRC);
1054 	hdr_crc = be32_to_cpu(vid_hdr->hdr_crc);
1055 
1056 	if (hdr_crc != crc) {
1057 		if (verbose) {
1058 			ubi_warn("bad CRC at PEB %d, calculated %#08x, "
1059 				 "read %#08x", pnum, crc, hdr_crc);
1060 			ubi_dbg_dump_vid_hdr(vid_hdr);
1061 		} else if (UBI_IO_DEBUG)
1062 			dbg_msg("bad CRC at PEB %d, calculated %#08x, "
1063 				"read %#08x", pnum, crc, hdr_crc);
1064 		return read_err ?: UBI_IO_BAD_HDR;
1065 	}
1066 
1067 	/* Validate the VID header that we have just read */
1068 	err = validate_vid_hdr(ubi, vid_hdr);
1069 	if (err) {
1070 		ubi_err("validation failed for PEB %d", pnum);
1071 		return -EINVAL;
1072 	}
1073 
1074 	/*
1075 	 * If there was a read error (%-EBADMSG), but the header CRC is still
1076 	 * OK, report about a bit-flip to force scrubbing on this PEB.
1077 	 */
1078 	return read_err ? UBI_IO_BITFLIPS : 0;
1079 }
1080 
1081 /**
1082  * ubi_io_write_vid_hdr - write a volume identifier header.
1083  * @ubi: UBI device description object
1084  * @pnum: the physical eraseblock number to write to
1085  * @vid_hdr: the volume identifier header to write
1086  *
1087  * This function writes the volume identifier header described by @vid_hdr to
1088  * physical eraseblock @pnum. This function automatically fills the
1089  * @vid_hdr->magic and the @vid_hdr->version fields, as well as calculates
1090  * header CRC checksum and stores it at vid_hdr->hdr_crc.
1091  *
1092  * This function returns zero in case of success and a negative error code in
1093  * case of failure. If %-EIO is returned, the physical eraseblock probably went
1094  * bad.
1095  */
1096 int ubi_io_write_vid_hdr(struct ubi_device *ubi, int pnum,
1097 			 struct ubi_vid_hdr *vid_hdr)
1098 {
1099 	int err;
1100 	uint32_t crc;
1101 	void *p;
1102 
1103 	dbg_io("write VID header to PEB %d", pnum);
1104 	ubi_assert(pnum >= 0 &&  pnum < ubi->peb_count);
1105 
1106 	err = paranoid_check_peb_ec_hdr(ubi, pnum);
1107 	if (err)
1108 		return err;
1109 
1110 	vid_hdr->magic = cpu_to_be32(UBI_VID_HDR_MAGIC);
1111 	vid_hdr->version = UBI_VERSION;
1112 	crc = crc32(UBI_CRC32_INIT, vid_hdr, UBI_VID_HDR_SIZE_CRC);
1113 	vid_hdr->hdr_crc = cpu_to_be32(crc);
1114 
1115 	err = paranoid_check_vid_hdr(ubi, pnum, vid_hdr);
1116 	if (err)
1117 		return err;
1118 
1119 	p = (char *)vid_hdr - ubi->vid_hdr_shift;
1120 	err = ubi_io_write(ubi, p, pnum, ubi->vid_hdr_aloffset,
1121 			   ubi->vid_hdr_alsize);
1122 	return err;
1123 }
1124 
1125 #ifdef CONFIG_MTD_UBI_DEBUG_PARANOID
1126 
1127 /**
1128  * paranoid_check_not_bad - ensure that a physical eraseblock is not bad.
1129  * @ubi: UBI device description object
1130  * @pnum: physical eraseblock number to check
1131  *
1132  * This function returns zero if the physical eraseblock is good, %-EINVAL if
1133  * it is bad and a negative error code if an error occurred.
1134  */
1135 static int paranoid_check_not_bad(const struct ubi_device *ubi, int pnum)
1136 {
1137 	int err;
1138 
1139 	err = ubi_io_is_bad(ubi, pnum);
1140 	if (!err)
1141 		return err;
1142 
1143 	ubi_err("paranoid check failed for PEB %d", pnum);
1144 	ubi_dbg_dump_stack();
1145 	return err > 0 ? -EINVAL : err;
1146 }
1147 
1148 /**
1149  * paranoid_check_ec_hdr - check if an erase counter header is all right.
1150  * @ubi: UBI device description object
1151  * @pnum: physical eraseblock number the erase counter header belongs to
1152  * @ec_hdr: the erase counter header to check
1153  *
1154  * This function returns zero if the erase counter header contains valid
1155  * values, and %-EINVAL if not.
1156  */
1157 static int paranoid_check_ec_hdr(const struct ubi_device *ubi, int pnum,
1158 				 const struct ubi_ec_hdr *ec_hdr)
1159 {
1160 	int err;
1161 	uint32_t magic;
1162 
1163 	magic = be32_to_cpu(ec_hdr->magic);
1164 	if (magic != UBI_EC_HDR_MAGIC) {
1165 		ubi_err("bad magic %#08x, must be %#08x",
1166 			magic, UBI_EC_HDR_MAGIC);
1167 		goto fail;
1168 	}
1169 
1170 	err = validate_ec_hdr(ubi, ec_hdr);
1171 	if (err) {
1172 		ubi_err("paranoid check failed for PEB %d", pnum);
1173 		goto fail;
1174 	}
1175 
1176 	return 0;
1177 
1178 fail:
1179 	ubi_dbg_dump_ec_hdr(ec_hdr);
1180 	ubi_dbg_dump_stack();
1181 	return -EINVAL;
1182 }
1183 
1184 /**
1185  * paranoid_check_peb_ec_hdr - check erase counter header.
1186  * @ubi: UBI device description object
1187  * @pnum: the physical eraseblock number to check
1188  *
1189  * This function returns zero if the erase counter header is all right and and
1190  * a negative error code if not or if an error occurred.
1191  */
1192 static int paranoid_check_peb_ec_hdr(const struct ubi_device *ubi, int pnum)
1193 {
1194 	int err;
1195 	uint32_t crc, hdr_crc;
1196 	struct ubi_ec_hdr *ec_hdr;
1197 
1198 	ec_hdr = kzalloc(ubi->ec_hdr_alsize, GFP_NOFS);
1199 	if (!ec_hdr)
1200 		return -ENOMEM;
1201 
1202 	err = ubi_io_read(ubi, ec_hdr, pnum, 0, UBI_EC_HDR_SIZE);
1203 	if (err && err != UBI_IO_BITFLIPS && err != -EBADMSG)
1204 		goto exit;
1205 
1206 	crc = crc32(UBI_CRC32_INIT, ec_hdr, UBI_EC_HDR_SIZE_CRC);
1207 	hdr_crc = be32_to_cpu(ec_hdr->hdr_crc);
1208 	if (hdr_crc != crc) {
1209 		ubi_err("bad CRC, calculated %#08x, read %#08x", crc, hdr_crc);
1210 		ubi_err("paranoid check failed for PEB %d", pnum);
1211 		ubi_dbg_dump_ec_hdr(ec_hdr);
1212 		ubi_dbg_dump_stack();
1213 		err = -EINVAL;
1214 		goto exit;
1215 	}
1216 
1217 	err = paranoid_check_ec_hdr(ubi, pnum, ec_hdr);
1218 
1219 exit:
1220 	kfree(ec_hdr);
1221 	return err;
1222 }
1223 
1224 /**
1225  * paranoid_check_vid_hdr - check that a volume identifier header is all right.
1226  * @ubi: UBI device description object
1227  * @pnum: physical eraseblock number the volume identifier header belongs to
1228  * @vid_hdr: the volume identifier header to check
1229  *
1230  * This function returns zero if the volume identifier header is all right, and
1231  * %-EINVAL if not.
1232  */
1233 static int paranoid_check_vid_hdr(const struct ubi_device *ubi, int pnum,
1234 				  const struct ubi_vid_hdr *vid_hdr)
1235 {
1236 	int err;
1237 	uint32_t magic;
1238 
1239 	magic = be32_to_cpu(vid_hdr->magic);
1240 	if (magic != UBI_VID_HDR_MAGIC) {
1241 		ubi_err("bad VID header magic %#08x at PEB %d, must be %#08x",
1242 			magic, pnum, UBI_VID_HDR_MAGIC);
1243 		goto fail;
1244 	}
1245 
1246 	err = validate_vid_hdr(ubi, vid_hdr);
1247 	if (err) {
1248 		ubi_err("paranoid check failed for PEB %d", pnum);
1249 		goto fail;
1250 	}
1251 
1252 	return err;
1253 
1254 fail:
1255 	ubi_err("paranoid check failed for PEB %d", pnum);
1256 	ubi_dbg_dump_vid_hdr(vid_hdr);
1257 	ubi_dbg_dump_stack();
1258 	return -EINVAL;
1259 
1260 }
1261 
1262 /**
1263  * paranoid_check_peb_vid_hdr - check volume identifier header.
1264  * @ubi: UBI device description object
1265  * @pnum: the physical eraseblock number to check
1266  *
1267  * This function returns zero if the volume identifier header is all right,
1268  * and a negative error code if not or if an error occurred.
1269  */
1270 static int paranoid_check_peb_vid_hdr(const struct ubi_device *ubi, int pnum)
1271 {
1272 	int err;
1273 	uint32_t crc, hdr_crc;
1274 	struct ubi_vid_hdr *vid_hdr;
1275 	void *p;
1276 
1277 	vid_hdr = ubi_zalloc_vid_hdr(ubi, GFP_NOFS);
1278 	if (!vid_hdr)
1279 		return -ENOMEM;
1280 
1281 	p = (char *)vid_hdr - ubi->vid_hdr_shift;
1282 	err = ubi_io_read(ubi, p, pnum, ubi->vid_hdr_aloffset,
1283 			  ubi->vid_hdr_alsize);
1284 	if (err && err != UBI_IO_BITFLIPS && err != -EBADMSG)
1285 		goto exit;
1286 
1287 	crc = crc32(UBI_CRC32_INIT, vid_hdr, UBI_EC_HDR_SIZE_CRC);
1288 	hdr_crc = be32_to_cpu(vid_hdr->hdr_crc);
1289 	if (hdr_crc != crc) {
1290 		ubi_err("bad VID header CRC at PEB %d, calculated %#08x, "
1291 			"read %#08x", pnum, crc, hdr_crc);
1292 		ubi_err("paranoid check failed for PEB %d", pnum);
1293 		ubi_dbg_dump_vid_hdr(vid_hdr);
1294 		ubi_dbg_dump_stack();
1295 		err = -EINVAL;
1296 		goto exit;
1297 	}
1298 
1299 	err = paranoid_check_vid_hdr(ubi, pnum, vid_hdr);
1300 
1301 exit:
1302 	ubi_free_vid_hdr(ubi, vid_hdr);
1303 	return err;
1304 }
1305 
1306 /**
1307  * ubi_dbg_check_write - make sure write succeeded.
1308  * @ubi: UBI device description object
1309  * @buf: buffer with data which were written
1310  * @pnum: physical eraseblock number the data were written to
1311  * @offset: offset within the physical eraseblock the data were written to
1312  * @len: how many bytes were written
1313  *
1314  * This functions reads data which were recently written and compares it with
1315  * the original data buffer - the data have to match. Returns zero if the data
1316  * match and a negative error code if not or in case of failure.
1317  */
1318 int ubi_dbg_check_write(struct ubi_device *ubi, const void *buf, int pnum,
1319 			int offset, int len)
1320 {
1321 	int err, i;
1322 
1323 	mutex_lock(&ubi->dbg_buf_mutex);
1324 	err = ubi_io_read(ubi, ubi->dbg_peb_buf, pnum, offset, len);
1325 	if (err)
1326 		goto out_unlock;
1327 
1328 	for (i = 0; i < len; i++) {
1329 		uint8_t c = ((uint8_t *)buf)[i];
1330 		uint8_t c1 = ((uint8_t *)ubi->dbg_peb_buf)[i];
1331 		int dump_len;
1332 
1333 		if (c == c1)
1334 			continue;
1335 
1336 		ubi_err("paranoid check failed for PEB %d:%d, len %d",
1337 			pnum, offset, len);
1338 		ubi_msg("data differ at position %d", i);
1339 		dump_len = max_t(int, 128, len - i);
1340 		ubi_msg("hex dump of the original buffer from %d to %d",
1341 			i, i + dump_len);
1342 		print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1,
1343 			       buf + i, dump_len, 1);
1344 		ubi_msg("hex dump of the read buffer from %d to %d",
1345 			i, i + dump_len);
1346 		print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1,
1347 			       ubi->dbg_peb_buf + i, dump_len, 1);
1348 		ubi_dbg_dump_stack();
1349 		err = -EINVAL;
1350 		goto out_unlock;
1351 	}
1352 	mutex_unlock(&ubi->dbg_buf_mutex);
1353 
1354 	return 0;
1355 
1356 out_unlock:
1357 	mutex_unlock(&ubi->dbg_buf_mutex);
1358 	return err;
1359 }
1360 
1361 /**
1362  * ubi_dbg_check_all_ff - check that a region of flash is empty.
1363  * @ubi: UBI device description object
1364  * @pnum: the physical eraseblock number to check
1365  * @offset: the starting offset within the physical eraseblock to check
1366  * @len: the length of the region to check
1367  *
1368  * This function returns zero if only 0xFF bytes are present at offset
1369  * @offset of the physical eraseblock @pnum, and a negative error code if not
1370  * or if an error occurred.
1371  */
1372 int ubi_dbg_check_all_ff(struct ubi_device *ubi, int pnum, int offset, int len)
1373 {
1374 	size_t read;
1375 	int err;
1376 	loff_t addr = (loff_t)pnum * ubi->peb_size + offset;
1377 
1378 	mutex_lock(&ubi->dbg_buf_mutex);
1379 	err = ubi->mtd->read(ubi->mtd, addr, len, &read, ubi->dbg_peb_buf);
1380 	if (err && err != -EUCLEAN) {
1381 		ubi_err("error %d while reading %d bytes from PEB %d:%d, "
1382 			"read %zd bytes", err, len, pnum, offset, read);
1383 		goto error;
1384 	}
1385 
1386 	err = check_pattern(ubi->dbg_peb_buf, 0xFF, len);
1387 	if (err == 0) {
1388 		ubi_err("flash region at PEB %d:%d, length %d does not "
1389 			"contain all 0xFF bytes", pnum, offset, len);
1390 		goto fail;
1391 	}
1392 	mutex_unlock(&ubi->dbg_buf_mutex);
1393 
1394 	return 0;
1395 
1396 fail:
1397 	ubi_err("paranoid check failed for PEB %d", pnum);
1398 	ubi_msg("hex dump of the %d-%d region", offset, offset + len);
1399 	print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 32, 1,
1400 		       ubi->dbg_peb_buf, len, 1);
1401 	err = -EINVAL;
1402 error:
1403 	ubi_dbg_dump_stack();
1404 	mutex_unlock(&ubi->dbg_buf_mutex);
1405 	return err;
1406 }
1407 
1408 #endif /* CONFIG_MTD_UBI_DEBUG_PARANOID */
1409