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