Physical kaslr disabled no suitable memory region как исправить

HI to all, I built and installed the latest Kernel (v5.4) from source (downloaded from Linux repo). I followed the steps explained here: https://www.cyberciti.biz/tips/compiling-linux-kernel-26.html I used make menuconfig but did not make any change to default values. After doing all steps, I rebooted but got this error on a black screen in boot time:
  • Home
  • Forum
  • The Ubuntu Forum Community
  • Ubuntu Official Flavours Support
  • Installation & Upgrades
  • Physical KASLR disabled: no suitable memory region

  1. Question Physical KASLR disabled: no suitable memory region

    HI to all,

    I built and installed the latest Kernel (v5.4) from source (downloaded from Linux repo). I followed the steps explained here:

    https://www.cyberciti.biz/tips/compiling-linux-kernel-26.htmlI used make menuconfig but did not make any change to default values. After doing all steps, I rebooted but got this error on a black screen in boot time:


    Physical KASLR disabled: no suitable memory region!

    I`m using ubuntu 19.10 with deafult Kernel 5.3.0-23-generic.Here is some info and sth I did to solve thie problem:

    cat /boot/config-5.3.0-23-generic | grep CONFIG_RANDOMIZE_BASE=y
    CONFIG_RANDOMIZE_BASE=y

    cat /boot/config-5.4.0+ | grep CONFIG_RANDOMIZE_BASE=y
    CONFIG_RANDOMIZE_BASE=y


  2. Re: Physical KASLR disabled: no suitable memory region

    Welcome to the forums, 7erom;

    I do not have the knowledge help you with technical answers. However, as a general observation, if you are trying to build your first kernel, my strong advice is to build it within a VM so that you do not risk your base system. It is best to have all of the advantages of a VM (including falling back to good snapshots) when experimenting with fundamental system components such as the kernel.


  3. Re: Physical KASLR disabled: no suitable memory region

    Quote Originally Posted by DuckHook
    View Post

    Welcome to the forums, 7erom;

    I do not have the knowledge help you with technical answers. However, as a general observation, if you are trying to build your first kernel, my strong advice is to build it within a VM so that you do not risk your base system. It is best to have all of the advantages of a VM (including falling back to good snapshots) when experimenting with fundamental system components such as the kernel.

    Dear DuckHook, many thanks to you for your guidance.
    Yes, I use VM because of its snapshot capability.


Tags for this Thread

Bookmarks

Bookmarks


Posting Permissions

  • Поддерживаемая версия: 0.6.9

Этот раздел предназначен для пользователей, которые хотят понять и исправить ошибки «Couldn’t allocate runtime area». Чаще всего это встречается на Z390, X99 и X299.

  • Примечание: Clover больше не поддерживается в этом руководстве, поэтому требуется OpenCore

# Что же такое KASLR?

Что ж, KASLR расшифровывается как Kernel adress space layout randomization (рус. — Рандомизация размещения/компоновки адресного пространства ядра), используется в целях безопасности. В частности, это делает более сложным определение расположения важных объектов в памяти, поскольку это всегда случайное значение как между компьютерами, так и между загрузками. Более подробное описание KASLR (opens new window)

Это становится проблемой, когда вы вводите (introduce) устройства либо с небольшими Memory Map, либо же просто вводите слишком много устройств. Вероятно, есть место для работы ядра, и также есть свободное место, куда ядро не помещается полностью. Здесь подходит slide=xxx. Вместо того, чтобы позволить macOS выбирать случайную область для работы при каждой загрузке, мы ограничим ее той областью, которая, как мы знаем, будет работать.

# И для кого эта информация?

Как уже упомяналось ранее, это для пользователей, у которых нет достаточного места для ядра или происходит перемещение в слишком маленькое место. Как правило, при загрузке вы столкнетесь с аналогичной ошибкой:

С различными вариациями:

Или даже краш во время работы macOS:

Веселая часть этих ошибок заключается в том, что они могут быть случайными, а также причина, почему 20-кратное включение и выключение питания вашего ПК также может решить проблему, но только временно.

Забавный факт: Поиск области для работы занимает около 31 мс, а ручная установка слайд значения может в среднем сократить время загрузки на 0.207%!!!

# Так как же мне это исправить?

Реальное решение этой проблемы довольно простое. Что вам понадобится:

  • OpenRuntime (opens new window)
  • OpenShell (opens new window)(Не забудьте включить это в разделе Root -> Misc -> Tools)

И также нам нужно настроить наш config.plist -> Booter:

  • AvoidRuntimeDefrag: YES
    • Исправляет рантайм сервисы UEFI, такие как дата, время, NVRAM, управление питанием, т.д.
  • DevirtualiseMmio: YES
    • Уменьшает объем Stolen памяти, расширяет возможные значения для slide=N, и очень полезен при устранении проблем с выделением памяти (Memory Allocation) на Z390.
  • EnableSafeModeSlide: YES
    • Позволяет использовать слайд значения в безопасном режиме
  • ProtectUefiServices: NO
    • Защищает UEFI сервисы от переопределения прошивкой, в основном актуально для виртуальных машин, 300 серии и более новых систем, таких как Ice Lake и Comet Lake
  • ProvideCustomSlide: YES
    • Это даёт уверенность, что ядро будет выбирать только хорошие регионы и избегать тех, которые могут привести к сбоям загрузки. Оно по-прежнему выбирает случайно, но не включает плохие регионы при рандомизации.
  • RebuildAppleMemoryMap: YES
    • Создает Memory Map совместимую с macOS, может сломаться с некоторыми OEM прошивками ноутбуков, поэтому если вы получили сбой ранней загрузки — отключите это. Это гарантирует, что наша Memory Map будет соответствовать соответствовать тому, что ожидает ядро.

# Подготовка BIOS

Причина, по которой нам нужно сбросить Memory Map, заключается в том, что мы хотим, чтобы она была более детерминированной, имеется ввиду, чтобы при каждой загрузке было меньше вариаций, поэтому у нас будет меньше крайних случаев (Memory Map не всегда согласованы при загрузке). Для подготовки:

  • Обновите BIOS(чрезвычайно важно, поскольку известно, что ранние версии BIOS имеют проблемы с Memory Map, в особенности Z390)
  • Сбросьте CMOS
  • Включите необходимые настройки в BIOS:
    • Above4GDecoding: Позволяет устройствам использовать области памяти размером более 4 ГБ, что означает, что в macOS будет больше места для размещения; может быть проблематичным на некоторых X99, X299, поэтому рекомендуется тестировать с и без.
      • Примечание: В BIOS поддерживаемых Resizable BAR Support, включение Above4G разблокирует эту опцию. Убедитесь, что BAR support отключен, если эта опция конечно же присутствует.
    • Boot Options -> Windows8.1/10 mode: Это гарантирует, что не будет загружаться старый устаревший мусор. Интересный факт: other OS разработан только для загрузки старых версий Windows, а не для других ОС
  • Отключите как можно больше ненужных устройств в BIOS (это означает, что при каждой загрузке будет меньше изменений в Memory Map, и поэтому меньше шансов на сбой загрузки). Общие настройки:
    • CSM: Для поддержки Legacy, добавляет кучу ненужного нам мусора. Это также может сломать Shell, и вы не сможете загрузиться в него.
    • Intel SGX: Software Guard Extensions, занимает много места и ничего не делает в macOS.
    • Parallel Port: macOS даже не видит параллельные порты.
    • Serial Port: Хотелось бы знать, насколько много тех, кто отлаживает ядро…
    • iGPU: В некоторых системах такие раздутые Memory Map, что iGPU просто не влезает.
    • Thunderbolt: У многих хаков нет рабочего Thunderbolt, платы, у которых нет Thunderbolt, но имеют эту опцию, просто тратят больше места.
    • LED lighting: Извини, приятель, время уходить.
    • Legacy USB: Больше Legacy Чепухи.

# Тестовая загрузка

С нашими скорректированными настройками EFI, config.plist и BIOS, пришло время опробовать наши новые настройки. Если у вас все еще есть проблемы, похоже, нам нужно глубоко погрузиться и рассчитать значение нашего Slide

# Нахождение Slide значения

Теперь вам нужно открыть EFI Shell в выбранном вами менеджере загрузок и запустить memmap. Это даст вам список всех страниц и их размеров. Вот тут-то и начинается веселье.

Пример того, что вы увидите:

Type Start End # Pages Attributes
RT_Data 0000000000000000 0000000000000FFF 0000000000000001 800000000000000F
Available 0000000000001000 0000000000057FFF 0000000000000057 000000000000000F
Reserved 0000000000058000 0000000000058FFF 0000000000000001 000000000000000F
Available 0000000000059000 000000000008FFFF 0000000000000037 000000000000000F
RT_Code 0000000000090000 0000000000090FFF 0000000000000001 800000000000000F
Available 0000000000091000 000000000009DFFF 000000000000000D 000000000000000F
Reserved 000000000009E000 000000000009FFFF 0000000000000002 000000000000000F
Available 0000000000100000 000000005B635FFF 000000000005B536 000000000000000F
BS_Data 000000005B636000 000000005B675FFF 0000000000000040 000000000000000F
Available 000000005B676000 000000006AF77FFF 000000000000F902 000000000000000F
LoaderCode 000000006AF78000 000000006B155FFF 00000000000001DE 000000000000000F
BS_Data 000000006B156000 000000006B523FFF 00000000000003CE 000000000000000F
ACPI_NVS 000000006B524000 000000006B524FFF 0000000000000001 000000000000000F
BS_Data 000000006B526000 000000006B625FFF 0000000000000100 000000000000000F
Available 000000006B626000 000000006B634FFF 000000000000000F 000000000000000F

Теперь вам может быть интересно, как, черт возьми, мы конвертируем это в значение слайда, ну, это довольно просто. Нас интересует самое наибольшее доступное значение в столбце Start. В этом примере мы видим, что 000000006B626000 является нашим самым большим значением, обратите внимание, что они находятся в HEX, поэтому, если есть несколько значений, близких друг к другу, вам может потребоваться конвертировать их в десятичное значение. Для вычисления Slide значение (встроенный калькулятор macOS имеет функцию программирования, нажав ⌘ + 3):

000000006B626000 = 0x6B626000

(0x6B6260000x100000)/0x200000 = 0x35A

И чтобы убедиться, что это правильно:

0x100000 + (0x35A * 0x200000) = 0x6B500000

Всякий раз, когда возвращаемое значение не оригинальное (0x6B500000 против 0x6B626000), просто добавьте +1 к конечному Slide значению. Это связано с округлением. Так, например, конвертированный в десятичное счисление 0x35A становится 858, а +1 даст вам slide=859.

Но подождите, это же больше 256!

Это верно. Это вызвано Memory Map включающими в себя сектора Above4GDecoding, которые не могут быть использованы. Поэтому вам нужно будет спускаться вниз по списку, пока вы не найдете небольшое достаточное значение(для нас, это будет 0000000000100000)

И чтобы было немного яснее, вот формула:

(HEX — 0x100000)/0x200000 = Значение Slide в HEX

0x100000 + (Значение Slide в HEX * 0x200000) = Ваше изначальное HEX значение(если нет, то добавьте +1 к Slide значению)

Теперь перейдите в свой config.plist и добавьте своё слайд значение к остальным аргументам загрузки(для нас, это будет slide=0 при использовании 0x100000). Если это значение по-прежнему выдаёт вам ошибки, вы можете перейти ко второму по велечине Start значению и так далее.

Иногда вы можете обнаружить, что при вычислении слайда, вы получаете сверхмалые значения, такие как slide=-0.379150390625, когда это происходит, округлите это до slide=0.

А для пользователей, у которых возникают проблемы с поиском значения слайда, вы можете также ввести $slide [вставьте наибольшее значение #Pages] в канале #Sandbox на Discord-сервере r/Hackintosh (opens new window)

Но это таааак тяжело

Ну, не волнуйтесь, ведь есть более простое решение. После запуска memmap в оболочке запустите:

Это добавит файл memmap.txt в корень вашего EFI, после чего вы сможете перетащить в канал #Sandbox Discord-сервера r/Hackintosh и написать $slide [вставьте ссылку на memmap.txt]

# Использование DevirtualiseMmio

DevirtualiseMmio — довольно интересный квирк, особенно в том, что он преодолевает огромное препятствие с многими системами PCI устройств, такими как некоторые Z390 платы и практические все HEDT платы, такие как X99 и X299. Как это происходит? Он берет MMIO области и удаляет рантайм атрибуты, позволяя тем самым использовать их в качестве пространства для удобного размещения ядра. В сочетании с квирком ProvideCustomSlide, мы можем сохранить функцию безопасности слайда, а также получить загружаемую машину.

Для чрезвычайно проблематичных систем, таких как Threadripper TRX40 19H, нам нужно найти определенные обрасти, которые не требуются для правильной работы. Вот тут-то и вступает в игру MmioWhitelist. Обратите внимание, что белый список не требуется для большинства систем.

Если вы запустите отладочную версию OpenCore со включенным DevirtualiseMmio, вы заметите в своих логах это:

  • Примечание: См. Отладка OpenCore о том, как включить логирование в файл

Итак, у нас есть 6 регионов, через которые нам нужно пройти и посмотреть, какие из них плохие. Лучше всего заблокировать все MMIO области кроме одного и попробовать каждый регион, чтобы получить список хороших регионов.

Теперь давайте возьмем вышеприведенный пример и создадим наш собственный MmioWhitelist, нам нужно сначала преобразовать адрес из шестнадцатеричного в десятичное значение:

  • MMIO devirt 0x60000000 -> 1610612736
  • MMIO devirt 0xFE000000 -> 4261412864
  • MMIO devirt 0xFEC00000 -> 4273995776
  • MMIO devirt 0xFED00000 -> 4275044352
  • MMIO devirt 0xFEE00000 -> 4276092928
  • MMIO devirt 0xFF000000 -> 4278190080

Когда все сделано, должно выглядеть примерно так:

  • #1

After upgrade to latest pvetesting repo Linux VMs constantly reboot in cause using 5.0.21-4-pve kernel [Windos & CTs — OK].
Linux/x86 5.0.21-3-pve — OK.

root@b11:~# pveversion -v
proxmox-ve: 6.0-2 (running kernel: 5.0.21-3-pve)
pve-manager: 6.0-11 (running version: 6.0-11/2140ef37)
pve-kernel-helper: 6.0-11
pve-kernel-5.0: 6.0-10
pve-kernel-5.0.21-4-pve: 5.0.21-8
pve-kernel-5.0.21-3-pve: 5.0.21-7
ceph: 14.2.4-pve1
ceph-fuse: 14.2.4-pve1
corosync: 3.0.2-pve4
criu: 3.11-3
glusterfs-client: 5.5-3
ksm-control-daemon: 1.3-1
libjs-extjs: 6.0.1-10
libknet1: 1.13-pve1
libpve-access-control: 6.0-3
libpve-apiclient-perl: 3.0-2
libpve-common-perl: 6.0-6
libpve-guest-common-perl: 3.0-2
libpve-http-server-perl: 3.0-3
libpve-storage-perl: 6.0-9
libqb0: 1.0.5-1
lvm2: 2.03.02-pve3
lxc-pve: 3.2.1-1
lxcfs: 3.0.3-pve60
novnc-pve: 1.1.0-1
openvswitch-switch: 2.10.0+2018.08.28+git.8ca7c82b7d+ds1-12
proxmox-mini-journalreader: 1.1-1
proxmox-widget-toolkit: 2.0-8
pve-cluster: 6.0-7
pve-container: 3.0-10
pve-docs: 6.0-8
pve-edk2-firmware: 2.20190614-1
pve-firewall: 4.0-7
pve-firmware: 3.0-4
pve-ha-manager: 3.0-2
pve-i18n: 2.0-3
pve-qemu-kvm: 4.0.1-4
pve-xtermjs: 3.13.2-1
qemu-server: 6.0-13
smartmontools: 7.0-pve2
spiceterm: 3.1-1
vncterm: 1.6-1

wbr, dale.

Richard


  • #2

After upgrade to latest pvetesting repo Linux VMs constantly reboot in cause using 5.0.21-4-pve kernel [Windos & CTs — OK].
Linux/x86 5.0.21-3-pve — OK.

What shows the VM’s syslog?

  • #3

:( nothing. Quick reboot after loading kernel and jumping to it.

t.lamprecht


  • #4

:( nothing. Quick reboot after loading kernel and jumping to it.

What running in the VM (Distribution+Version), also what’s the host HW (CPU?)

t.lamprecht


  • #5

Oh, and can you maybe try to boot some live-ISO image of a Linux Distribution (Ubuntu, Fedora, …)?

Are you using ZFS as backing storage for those VMs?

  • #6

I have the same problem after update today.

t.lamprecht


  • #7

I have the same problem after update today.

same questions to you then :)

  • #8

The virtual machine is running Win server 2019 with the latest updates. The virtual machine is located on ZFS (mirrored on two HDDs) Kvm64 used. The backup on the other storage did not work either. Now I’m trying to run Linux in a container and reinstall Windows in VM.

t.lamprecht


t.lamprecht


  • #10

But, on the other hand it would be really weird that the guest FS does all writes with some FPU/SIMD instructions.
Normally the aforementioned issue affected mostly compute programs using the FPU massively.
What filesystems are the VMs using? Do the use compression/checksumming themself?

  • #11

Linux in the container runs without problems. But the Windows machine does not want to work in any way and on any storage. It started after today’s update. Reboots don’t help. NTFS used for Windows. When you try a new installation, Windows falls into the blue screen of death. The installation does not reach the choice of the Virtio SCSI driver. About the use of compression later.

t.lamprecht


  • #12

Hmm, strange, the original poster said that Windows & CTs work for them, but Linux VMs not..
I can do both here, at least a Windows 10 installations works good on both an intel setup and an AMD EPYC one..
Can re-check a windows server 2019, to be sure, though.

  • #13

QEMU (qcow2) format used for Windows image.

t.lamprecht


  • #14

QEMU (qcow2) format used for Windows image.

So it’s not located on ZFS?

  • #15

He successfully worked for ZFS for over two years. I am now trying to transfer this to a local LVM-Thin drive without any encryption.

  • #16

Tried to reinstall Proxmox on the kernel 5.0.15-1. But that doesn’t help either. Windows machines no longer start under any conditions. The mystic! I have no idea.

t.lamprecht


  • #17

Tried to reinstall Proxmox on the kernel 5.0.15-1. But that doesn’t help either. Windows machines no longer start under any conditions. The mystic! I have no idea.

That all sounds like there’s something completely different going on. If you booted and older Kernel (e.g., 5.0.21-3) and it does not work it probably has nothing to do with the 5.0.21-4 kernel. Also, all other have just issues with specific linux VMs on older Intel HW, as far as I can tell. As you have issues with just windows I’d guess that it’s something else, sadly I’m not to sure what it could be. I’d recommend to open a new thread for that.

  • #18

VM reboot in earliest stage with message:

Physical KASLR disabled: no suitable memory region!

hardware info attached

root@b12:~# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-5.0.21-4-pve root=UUID=e48d586c-8f58-4b03-a081-cdcf4776c83c ro console=tty0 console=ttyS0,115200n8 nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier

rebooted with:

root@b12:~# cat /proc/cmdline
BOOT_IMAGE=/boot/vmlinuz-5.0.21-4-pve root=UUID=e48d586c-8f58-4b03-a081-cdcf4776c83c ro console=tty0 console=ttyS0,115200n8

no changes.

booting from ISO image: proxmox-ve_6.0-1.iso

tapping «install proxmox ve»

..

Loading proxmox installer
Loading initrd

reboot

  • b12.cpu.txt

    968 bytes

    · Views: 2

  • b12.dmidecode.txt

    13.5 KB

    · Views: 1

  • b12.meminfo.txt

    1.4 KB

    · Views: 0

  • #19

Can confirm that this is «hardware dependent» problem.

Another system with Intel(R) Xeon(R) Gold 6144 CPU @ 3.50GHz — Ok.

t.lamprecht


After installing latest updates (kernel 4.15.0-29, nvidia-340 etc.) there is no network after pause/resume.

Restarting network service and/or network-manager does not solve the issue.
Reloading the network driver (Realtek r8169) will solve the issue.

After pause/resume the following error can be found in the kernel log (dmesg):


Jul 31 08:45:24 mcenter NetworkManager[778]: <info> [1533019524.9312] manager: NetworkManager state is now DISCONNECTED
Jul 31 08:45:26 mcenter kernel: [ 2106.325154] do_IRQ: 1.36 No irq handler for vector
Jul 31 08:45:27 mcenter ModemManager[736]: <info> Couldn’t check support for device at ‘/sys/devices/pci0000:00/0000:00:1c.5/0000:04:00.0’: not supported by any plugin
Jul 31 08:46:11 mcenter kernel: [ 2151.465113] Corrupted low memory at 0000000090bf190d (7f00 phys) = 4a4a000000
Jul 31 08:46:11 mcenter kernel: [ 2151.465118] Corrupted low memory at 00000000273f9219 (7f10 phys) = 0fff0000
Jul 31 08:46:11 mcenter kernel: [ 2151.465120] Corrupted low memory at 0000000029d48ce3 (7f20 phys) = 3000000000000
Jul 31 08:46:11 mcenter kernel: [ 2151.465122] Corrupted low memory at 000000008411fa33 (7f28 phys) = 28121283
Jul 31 08:46:11 mcenter kernel: [ 2151.465130] Corrupted low memory at 000000000fe096ef (e1f8 phys) = 400000000000
Jul 31 08:46:11 mcenter kernel: [ 2151.465133] ————[ cut here ]————
Jul 31 08:46:11 mcenter kernel: [ 2151.465134] Memory corruption detected in low memory

I tried booting with kernel parameter memmap=1024K$0 but i then get «Physical KASLR disabled: no suitable memory region!¨ and the system won’t boot.

I don’t know in what package the problem is (kernel, Realtek driver, suspend/resume??)

output of «uname -a» on my system:
Linux mcenter 4.15.0-29-generic #31~16.04.1-Ubuntu SMP Wed Jul 18 08:54:04 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

ProblemType: Bug
DistroRelease: Ubuntu 16.04
Package: linux-image-4.15.0-29-generic 4.15.0-29.31~16.04.1
ProcVersionSignature: Ubuntu 4.15.0-29.31~16.04.1-generic 4.15.18
Uname: Linux 4.15.0-29-generic x86_64
NonfreeKernelModules: nvidia_uvm nvidia
ApportVersion: 2.20.1-0ubuntu2.18
Architecture: amd64
CurrentDesktop: Unity
Date: Tue Jul 31 11:01:29 2018
InstallationDate: Installed on 2017-04-18 (469 days ago)
InstallationMedia: Ubuntu 16.04.2 LTS «Xenial Xerus» — Release amd64 (20170215.2)
SourcePackage: linux-signed-hwe
UpgradeStatus: No upgrade log present (probably fresh install)

Понравилась статья? Поделить с друзьями:
  • Physical error перевод
  • Phpvirtualbox an unknown php error occurred
  • Pip install bluepy error
  • Phpstorm composer createprocess error 193 1 не является приложением win32
  • Pip install aiogram ошибка