Der Fehler „memfd_create() called without MFD_EXEC or MFD_NOEXEC_SEAL set“ unter Linux bedeutet Folgendes:
- Seit Linux Kernel Version 6.3 erwartet die memfd_create()-Funktion, dass entweder die Flag MFD_EXEC oder MFD_NOEXEC_SEAL gesetzt wird.
- Diese Flags dienen dazu, das Ausführungsbit (executable bit) beim Erstellen des memfd zu versiegeln
- Wenn keine dieser Flags gesetzt ist, gibt der Kernel eine Warnung aus, um darauf hinzuweisen, dass die Anwendung möglicherweise nicht die beabsichtigte Sicherheitskonfiguration verwendet.
- Die Warnung tritt bei verschiedenen Anwendungen auf, darunter systemd, pipewire, Weston, QEMU, PHP-FPM und anderen.
- In den meisten Fällen handelt es sich um eine harmlose Warnung, die keine direkten Auswirkungen auf die Funktionalität hat
- Um die Warnung zu beheben, müssen die betroffenen Projekte ihren Code aktualisieren und eine der beiden Flags (meist MFD_NOEXEC_SEAL) beim Aufruf von memfd_create() setzen.
- Einige Projekte haben bereits Patches veröffentlicht oder arbeiten daran, diese Änderung zu implementieren
Diese Änderung wurde eingeführt, um die Sicherheit zu verbessern, indem Entwickler explizit angeben müssen, ob der erstellte memfd ausführbar sein soll oder nicht. Es ist wichtig zu beachten, dass dies in erster Linie eine Warnung ist und in den meisten Fällen keine unmittelbaren Probleme verursacht.
#dmesg :
Um die MFD_EXEC oder MFD_NOEXEC_SEAL Flagge in Gentoo Linux einzurichten, sind folgende Schritte notwendig:
- Überprüfen Sie Ihre Kernel-Version:
uname -r
Stellen Sie sicher, dass Sie Kernel 6.3 oder höher verwenden, da diese Flags erst ab dieser Version relevant sind.
- Identifizieren Sie die betroffenen Pakete:
Typischerweise sind dies systemd, pipewire, weston, QEMU, PHP-FPM und ähnliche Programme, die memfd_create() verwenden. - Erstellen Sie einen lokalen Overlay:
sudo mkdir -p /usr/local/portage/category/package
- Für jedes betroffene Paket: a. Kopieren Sie das ebuild in Ihren lokalen Overlay:
sudo cp /usr/portage/category/package/package-version.ebuild /usr/local/portage/category/package/
b. Erstellen Sie einen Patch, der die memfd_create()-Aufrufe aktualisiert, indem Sie MFD_NOEXEC_SEAL (in den meisten Fällen) oder MFD_EXEC hinzufügen. c. Fügen Sie den Patch zum ebuild hinzu:PATCHES=( "${FILESDIR}/memfd_create-fix.patch" )
d. Aktualisieren Sie die Manifest-Datei:ebuild /usr/local/portage/category/package/package-version.ebuild manifest
- Aktualisieren Sie die betroffenen Pakete:
emerge --ask --verbose --oneshot package1 package2 package3
- Starten Sie Ihr System neu, um sicherzustellen, dass alle Änderungen wirksam werden.
Beachten Sie, dass dieser Prozess fortgeschrittene Kenntnisse im Umgang mit Gentoo und dem Portage-System erfordert. Wenn Sie sich unsicher sind, konsultieren Sie die Gentoo-Dokumentation oder suchen Sie Hilfe in den offiziellen Gentoo-Foren.