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

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'mm-hotfixes-stable-2023-02-17-15-16-2' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm

Pull misc fixes from Andrew Morton:
"Six hotfixes. Five are cc:stable: four for MM, one for nilfs2.

Also a MAINTAINERS update"

* tag 'mm-hotfixes-stable-2023-02-17-15-16-2' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm:
nilfs2: fix underflow in second superblock position calculations
hugetlb: check for undefined shift on 32 bit architectures
mm/migrate: fix wrongly apply write bit after mkdirty on sparc64
MAINTAINERS: update FPU EMULATOR web page
mm/MADV_COLLAPSE: set EAGAIN on unexpected page refcount
mm/filemap: fix page end in filemap_get_read_batch

+38 -7
+1 -1
MAINTAINERS
··· 8202 8202 FPU EMULATOR 8203 8203 M: Bill Metzenthen <billm@melbpc.org.au> 8204 8204 S: Maintained 8205 - W: http://floatingpoint.sourceforge.net/emulator/index.html 8205 + W: https://floatingpoint.billm.au/ 8206 8206 F: arch/x86/math-emu/ 8207 8207 8208 8208 FRAMEBUFFER CORE
+7
fs/nilfs2/ioctl.c
··· 1114 1114 1115 1115 minseg = range[0] + segbytes - 1; 1116 1116 do_div(minseg, segbytes); 1117 + 1118 + if (range[1] < 4096) 1119 + goto out; 1120 + 1117 1121 maxseg = NILFS_SB2_OFFSET_BYTES(range[1]); 1122 + if (maxseg < segbytes) 1123 + goto out; 1124 + 1118 1125 do_div(maxseg, segbytes); 1119 1126 maxseg--; 1120 1127
+9
fs/nilfs2/super.c
··· 409 409 goto out; 410 410 411 411 /* 412 + * Prevent underflow in second superblock position calculation. 413 + * The exact minimum size check is done in nilfs_sufile_resize(). 414 + */ 415 + if (newsize < 4096) { 416 + ret = -ENOSPC; 417 + goto out; 418 + } 419 + 420 + /* 412 421 * Write lock is required to protect some functions depending 413 422 * on the number of segments, the number of reserved segments, 414 423 * and so forth.
+7 -1
fs/nilfs2/the_nilfs.c
··· 544 544 { 545 545 struct nilfs_super_block **sbp = nilfs->ns_sbp; 546 546 struct buffer_head **sbh = nilfs->ns_sbh; 547 - u64 sb2off = NILFS_SB2_OFFSET_BYTES(bdev_nr_bytes(nilfs->ns_bdev)); 547 + u64 sb2off, devsize = bdev_nr_bytes(nilfs->ns_bdev); 548 548 int valid[2], swp = 0; 549 + 550 + if (devsize < NILFS_SEG_MIN_BLOCKS * NILFS_MIN_BLOCK_SIZE + 4096) { 551 + nilfs_err(sb, "device size too small"); 552 + return -EINVAL; 553 + } 554 + sb2off = NILFS_SB2_OFFSET_BYTES(devsize); 549 555 550 556 sbp[0] = nilfs_read_super_block(sb, NILFS_SB_OFFSET_BYTES, blocksize, 551 557 &sbh[0]);
+4 -1
include/linux/hugetlb.h
··· 743 743 if (!page_size_log) 744 744 return &default_hstate; 745 745 746 - return size_to_hstate(1UL << page_size_log); 746 + if (page_size_log < BITS_PER_LONG) 747 + return size_to_hstate(1UL << page_size_log); 748 + 749 + return NULL; 747 750 } 748 751 749 752 static inline struct hstate *hstate_vma(struct vm_area_struct *vma)
+3 -2
mm/filemap.c
··· 2588 2588 struct folio *folio; 2589 2589 int err = 0; 2590 2590 2591 + /* "last_index" is the index of the page beyond the end of the read */ 2591 2592 last_index = DIV_ROUND_UP(iocb->ki_pos + iter->count, PAGE_SIZE); 2592 2593 retry: 2593 2594 if (fatal_signal_pending(current)) 2594 2595 return -EINTR; 2595 2596 2596 - filemap_get_read_batch(mapping, index, last_index, fbatch); 2597 + filemap_get_read_batch(mapping, index, last_index - 1, fbatch); 2597 2598 if (!folio_batch_count(fbatch)) { 2598 2599 if (iocb->ki_flags & IOCB_NOIO) 2599 2600 return -EAGAIN; 2600 2601 page_cache_sync_readahead(mapping, ra, filp, index, 2601 2602 last_index - index); 2602 - filemap_get_read_batch(mapping, index, last_index, fbatch); 2603 + filemap_get_read_batch(mapping, index, last_index - 1, fbatch); 2603 2604 } 2604 2605 if (!folio_batch_count(fbatch)) { 2605 2606 if (iocb->ki_flags & (IOCB_NOWAIT | IOCB_WAITQ))
+4 -2
mm/huge_memory.c
··· 3272 3272 pmde = mk_huge_pmd(new, READ_ONCE(vma->vm_page_prot)); 3273 3273 if (pmd_swp_soft_dirty(*pvmw->pmd)) 3274 3274 pmde = pmd_mksoft_dirty(pmde); 3275 - if (is_writable_migration_entry(entry)) 3276 - pmde = maybe_pmd_mkwrite(pmde, vma); 3277 3275 if (pmd_swp_uffd_wp(*pvmw->pmd)) 3278 3276 pmde = pmd_wrprotect(pmd_mkuffd_wp(pmde)); 3279 3277 if (!is_migration_entry_young(entry)) ··· 3279 3281 /* NOTE: this may contain setting soft-dirty on some archs */ 3280 3282 if (PageDirty(new) && is_migration_entry_dirty(entry)) 3281 3283 pmde = pmd_mkdirty(pmde); 3284 + if (is_writable_migration_entry(entry)) 3285 + pmde = maybe_pmd_mkwrite(pmde, vma); 3286 + else 3287 + pmde = pmd_wrprotect(pmde); 3282 3288 3283 3289 if (PageAnon(new)) { 3284 3290 rmap_t rmap_flags = RMAP_COMPOUND;
+1
mm/khugepaged.c
··· 2611 2611 case SCAN_CGROUP_CHARGE_FAIL: 2612 2612 return -EBUSY; 2613 2613 /* Resource temporary unavailable - trying again might succeed */ 2614 + case SCAN_PAGE_COUNT: 2614 2615 case SCAN_PAGE_LOCK: 2615 2616 case SCAN_PAGE_LRU: 2616 2617 case SCAN_DEL_PAGE_LRU:
+2
mm/migrate.c
··· 224 224 pte = maybe_mkwrite(pte, vma); 225 225 else if (pte_swp_uffd_wp(*pvmw.pte)) 226 226 pte = pte_mkuffd_wp(pte); 227 + else 228 + pte = pte_wrprotect(pte); 227 229 228 230 if (folio_test_anon(folio) && !is_readable_migration_entry(entry)) 229 231 rmap_flags |= RMAP_EXCLUSIVE;