Check paddr for overflow.
Fix panic on initialize of "vm reserv" per-superpage lock in case when RAM ends at upper boundary of address space. Observed on ARM32 board BPI-R2 (2GB RAM 0x80000000-0xffffffff). PR: 235362 Reviewed by: kib, markj, alc MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D21272
This commit is contained in:
parent
dcb235ab9e
commit
6b821a7455
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=351133
@ -316,7 +316,8 @@ sysctl_vm_reserv_fullpop(SYSCTL_HANDLER_ARGS)
|
||||
for (segind = 0; segind < vm_phys_nsegs; segind++) {
|
||||
seg = &vm_phys_segs[segind];
|
||||
paddr = roundup2(seg->start, VM_LEVEL_0_SIZE);
|
||||
while (paddr + VM_LEVEL_0_SIZE <= seg->end) {
|
||||
while (paddr + VM_LEVEL_0_SIZE > paddr && paddr +
|
||||
VM_LEVEL_0_SIZE <= seg->end) {
|
||||
rv = &vm_reserv_array[paddr >> VM_LEVEL_0_SHIFT];
|
||||
fullpop += rv->popcnt == VM_LEVEL_0_NPAGES;
|
||||
paddr += VM_LEVEL_0_SIZE;
|
||||
@ -1055,7 +1056,8 @@ vm_reserv_init(void)
|
||||
for (segind = 0; segind < vm_phys_nsegs; segind++) {
|
||||
seg = &vm_phys_segs[segind];
|
||||
paddr = roundup2(seg->start, VM_LEVEL_0_SIZE);
|
||||
while (paddr + VM_LEVEL_0_SIZE <= seg->end) {
|
||||
while (paddr + VM_LEVEL_0_SIZE > paddr && paddr +
|
||||
VM_LEVEL_0_SIZE <= seg->end) {
|
||||
rv = &vm_reserv_array[paddr >> VM_LEVEL_0_SHIFT];
|
||||
rv->pages = PHYS_TO_VM_PAGE(paddr);
|
||||
rv->domain = seg->domain;
|
||||
|
Loading…
Reference in New Issue
Block a user