Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

fs/ntfs3: Use _le variants of bitops functions

The functions from bitops.h already have _le variants so use them to
prevent invalid reads/writes of the bitmap on big endian systems.

Signed-off-by: Thomas Kühnel <thomas.kuehnel@avm.de>
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>

authored by

Thomas Kühnel and committed by
Konstantin Komarov
095d8ce6 88a8d0d2

+16 -16
+5 -5
fs/ntfs3/bitmap.c
··· 66 66 while (wpos < wend) { 67 67 size_t free_len; 68 68 u32 free_bits, end; 69 - u32 used = find_next_zero_bit(buf, wend, wpos); 69 + u32 used = find_next_zero_bit_le(buf, wend, wpos); 70 70 71 71 if (used >= wend) { 72 72 if (*b_len < *prev_tail) { ··· 92 92 * Now we have a fragment [wpos, wend) staring with 0. 93 93 */ 94 94 end = wpos + to_alloc - *prev_tail; 95 - free_bits = find_next_bit(buf, min(end, wend), wpos); 95 + free_bits = find_next_bit_le(buf, min(end, wend), wpos); 96 96 97 97 free_len = *prev_tail + free_bits - wpos; 98 98 ··· 574 574 wbits = wnd->nbits - wbit; 575 575 576 576 do { 577 - used = find_next_zero_bit(buf, wbits, wpos); 577 + used = find_next_zero_bit_le(buf, wbits, wpos); 578 578 579 579 if (used > wpos && prev_tail) { 580 580 wnd_add_free_ext(wnd, wbit + wpos - prev_tail, ··· 590 590 break; 591 591 } 592 592 593 - frb = find_next_bit(buf, wbits, wpos); 593 + frb = find_next_bit_le(buf, wbits, wpos); 594 594 if (frb >= wbits) { 595 595 /* Keep last free block. */ 596 596 prev_tail += frb - wpos; ··· 1449 1449 buf = (ulong *)bh->b_data; 1450 1450 1451 1451 for (; wbit < wbits; wbit++) { 1452 - if (!test_bit(wbit, buf)) { 1452 + if (!test_bit_le(wbit, buf)) { 1453 1453 if (!len) 1454 1454 lcn = lcn_wnd + wbit; 1455 1455 len += 1;
+4 -4
fs/ntfs3/fsntfs.c
··· 642 642 NULL, 0, NULL, NULL)) 643 643 goto next; 644 644 645 - __clear_bit(ir - MFT_REC_RESERVED, 645 + __clear_bit_le(ir - MFT_REC_RESERVED, 646 646 &sbi->mft.reserved_bitmap); 647 647 } 648 648 } 649 649 650 650 /* Scan 5 bits for zero. Bit 0 == MFT_REC_RESERVED */ 651 - zbit = find_next_zero_bit(&sbi->mft.reserved_bitmap, 651 + zbit = find_next_zero_bit_le(&sbi->mft.reserved_bitmap, 652 652 MFT_REC_FREE, MFT_REC_RESERVED); 653 653 if (zbit >= MFT_REC_FREE) { 654 654 sbi->mft.next_reserved = MFT_REC_FREE; ··· 716 716 if (*rno >= MFT_REC_FREE) 717 717 wnd_set_used(wnd, *rno, 1); 718 718 else if (*rno >= MFT_REC_RESERVED && sbi->mft.reserved_bitmap_inited) 719 - __set_bit(*rno - MFT_REC_RESERVED, &sbi->mft.reserved_bitmap); 719 + __set_bit_le(*rno - MFT_REC_RESERVED, &sbi->mft.reserved_bitmap); 720 720 721 721 out: 722 722 if (!mft) ··· 744 744 else 745 745 wnd_set_free(wnd, rno, 1); 746 746 } else if (rno >= MFT_REC_RESERVED && sbi->mft.reserved_bitmap_inited) { 747 - __clear_bit(rno - MFT_REC_RESERVED, &sbi->mft.reserved_bitmap); 747 + __clear_bit_le(rno - MFT_REC_RESERVED, &sbi->mft.reserved_bitmap); 748 748 } 749 749 750 750 if (rno < wnd_zone_bit(wnd))
+7 -7
fs/ntfs3/index.c
··· 323 323 if (err) 324 324 return err; 325 325 326 - __set_bit(bit - bbuf.bit, bbuf.buf); 326 + __set_bit_le(bit - bbuf.bit, bbuf.buf); 327 327 328 328 bmp_buf_put(&bbuf, true); 329 329 ··· 343 343 if (err) 344 344 return err; 345 345 346 - __clear_bit(bit - bbuf.bit, bbuf.buf); 346 + __clear_bit_le(bit - bbuf.bit, bbuf.buf); 347 347 348 348 bmp_buf_put(&bbuf, true); 349 349 ··· 457 457 458 458 static bool scan_for_free(const ulong *buf, u32 bit, u32 bits, size_t *ret) 459 459 { 460 - size_t pos = find_next_zero_bit(buf, bits, bit); 460 + size_t pos = find_next_zero_bit_le(buf, bits, bit); 461 461 462 462 if (pos >= bits) 463 463 return false; ··· 489 489 490 490 if (!b->non_res) { 491 491 u32 nbits = 8 * le32_to_cpu(b->res.data_size); 492 - size_t pos = find_next_zero_bit(resident_data(b), nbits, 0); 492 + size_t pos = find_next_zero_bit_le(resident_data(b), nbits, 0); 493 493 494 494 if (pos < nbits) 495 495 *bit = pos; ··· 505 505 506 506 static bool scan_for_used(const ulong *buf, u32 bit, u32 bits, size_t *ret) 507 507 { 508 - size_t pos = find_next_bit(buf, bits, bit); 508 + size_t pos = find_next_bit_le(buf, bits, bit); 509 509 510 510 if (pos >= bits) 511 511 return false; ··· 536 536 537 537 if (!b->non_res) { 538 538 u32 nbits = le32_to_cpu(b->res.data_size) * 8; 539 - size_t pos = find_next_bit(resident_data(b), nbits, from); 539 + size_t pos = find_next_bit_le(resident_data(b), nbits, from); 540 540 541 541 if (pos < nbits) 542 542 *bit = pos; ··· 1953 1953 if (bit >= nbits) 1954 1954 return 0; 1955 1955 1956 - pos = find_next_bit(bm, nbits, bit); 1956 + pos = find_next_bit_le(bm, nbits, bit); 1957 1957 if (pos < nbits) 1958 1958 return 0; 1959 1959 } else {