packages: consolidate genodeSources patches
This commit is contained in:
parent
4a613364df
commit
ba1d50ab6b
|
@ -35,11 +35,7 @@ let
|
||||||
version = builtins.substring 0 7 upstreamSources.rev;
|
version = builtins.substring 0 7 upstreamSources.rev;
|
||||||
src = upstreamSources;
|
src = upstreamSources;
|
||||||
nativeBuildInputs = [ expect gnumake tcl ];
|
nativeBuildInputs = [ expect gnumake tcl ];
|
||||||
patches = [
|
patches = [ ./patches/sources.patch ];
|
||||||
./patches/binary-labels.patch
|
|
||||||
./patches/label-fail.patch
|
|
||||||
./patches/phdr.patch
|
|
||||||
];
|
|
||||||
configurePhase = ''
|
configurePhase = ''
|
||||||
patchShebangs ./tool
|
patchShebangs ./tool
|
||||||
substituteInPlace repos/base/etc/tools.conf \
|
substituteInPlace repos/base/etc/tools.conf \
|
||||||
|
@ -335,12 +331,6 @@ let
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
basePatches = [
|
|
||||||
./patches/cxx-align.patch
|
|
||||||
./patches/core-diag.patch
|
|
||||||
./patches/ld-ro.patch
|
|
||||||
];
|
|
||||||
|
|
||||||
in makePackages // depotPackages // {
|
in makePackages // depotPackages // {
|
||||||
|
|
||||||
genodeSources = genodeSources // {
|
genodeSources = genodeSources // {
|
||||||
|
@ -353,7 +343,6 @@ in makePackages // depotPackages // {
|
||||||
KERNEL = "hw";
|
KERNEL = "hw";
|
||||||
BOARD = "pc";
|
BOARD = "pc";
|
||||||
targets = [ "bootstrap" "core" "timer" "lib/ld" ];
|
targets = [ "bootstrap" "core" "timer" "lib/ld" ];
|
||||||
patches = basePatches;
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
mv $out/lib/ld-hw.lib.so $out/lib/ld.lib.so
|
mv $out/lib/ld-hw.lib.so $out/lib/ld.lib.so
|
||||||
mv $out/bin/hw_timer_drv $out/bin/timer_drv
|
mv $out/bin/hw_timer_drv $out/bin/timer_drv
|
||||||
|
@ -369,7 +358,6 @@ in makePackages // depotPackages // {
|
||||||
KERNEL = "hw";
|
KERNEL = "hw";
|
||||||
BOARD = "virt_qemu";
|
BOARD = "virt_qemu";
|
||||||
targets = [ "bootstrap" "core" "timer" "lib/ld" ];
|
targets = [ "bootstrap" "core" "timer" "lib/ld" ];
|
||||||
patches = basePatches;
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
mv $out/lib/ld-hw.lib.so $out/lib/ld.lib.so
|
mv $out/lib/ld-hw.lib.so $out/lib/ld.lib.so
|
||||||
mv $out/bin/hw_timer_drv $out/bin/timer_drv
|
mv $out/bin/hw_timer_drv $out/bin/timer_drv
|
||||||
|
@ -384,7 +372,6 @@ in makePackages // depotPackages // {
|
||||||
KERNEL = "linux";
|
KERNEL = "linux";
|
||||||
BOARD = "linux";
|
BOARD = "linux";
|
||||||
targets = [ "core" "timer" "lib/ld" ];
|
targets = [ "core" "timer" "lib/ld" ];
|
||||||
patches = basePatches;
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
mv $out/lib/ld-linux.lib.so $out/lib/ld.lib.so
|
mv $out/lib/ld-linux.lib.so $out/lib/ld.lib.so
|
||||||
mv $out/bin/linux_timer_drv $out/bin/timer_drv
|
mv $out/bin/linux_timer_drv $out/bin/timer_drv
|
||||||
|
@ -397,7 +384,6 @@ in makePackages // depotPackages // {
|
||||||
outputs = [ "out" "coreObj" ];
|
outputs = [ "out" "coreObj" ];
|
||||||
KERNEL = "nova";
|
KERNEL = "nova";
|
||||||
targets = [ "core" "timer" "lib/ld" ];
|
targets = [ "core" "timer" "lib/ld" ];
|
||||||
patches = basePatches;
|
|
||||||
postInstall = ''
|
postInstall = ''
|
||||||
mv $out/lib/ld-nova.lib.so $out/lib/ld.lib.so
|
mv $out/lib/ld-nova.lib.so $out/lib/ld.lib.so
|
||||||
mv $out/bin/nova_timer_drv $out/bin/timer_drv
|
mv $out/bin/nova_timer_drv $out/bin/timer_drv
|
||||||
|
|
|
@ -98,7 +98,7 @@ in {
|
||||||
imx53_qsb_drivers = { };
|
imx53_qsb_drivers = { };
|
||||||
imx8_fb_drv = { };
|
imx8_fb_drv = { };
|
||||||
imx8q_evk_drivers = { };
|
imx8q_evk_drivers = { };
|
||||||
init.patches = [ ./patches/sandbox.patch ./patches/xml-fail.patch ];
|
init = { };
|
||||||
input_event_bridge = { };
|
input_event_bridge = { };
|
||||||
intel_fb_drv = {
|
intel_fb_drv = {
|
||||||
BOARD = "pc";
|
BOARD = "pc";
|
||||||
|
@ -306,7 +306,7 @@ in {
|
||||||
vbox5-nova = vbox5';
|
vbox5-nova = vbox5';
|
||||||
verify = { };
|
verify = { };
|
||||||
vesa_drv.portInputs = with ports; [ libc x86emu ];
|
vesa_drv.portInputs = with ports; [ libc x86emu ];
|
||||||
vfs.patches = [ ./patches/vfs.patch ];
|
vfs = { };
|
||||||
vfs_audit = { };
|
vfs_audit = { };
|
||||||
vfs_block = { };
|
vfs_block = { };
|
||||||
vfs_fatfs = { };
|
vfs_fatfs = { };
|
||||||
|
|
|
@ -1,98 +0,0 @@
|
||||||
commit 2d76b3271fa826a97c3974b7e67f2799e9ba448d
|
|
||||||
Author: Emery Hemingway <ehmry@posteo.net>
|
|
||||||
Date: Fri May 29 18:42:57 2020 +0530
|
|
||||||
|
|
||||||
Use 128-byte strings for session labels
|
|
||||||
|
|
||||||
Sixty-four bytes is insufficient for Nix store paths.
|
|
||||||
|
|
||||||
diff --git a/repos/base/include/base/child.h b/repos/base/include/base/child.h
|
|
||||||
index 8c7b33a9d9..3bd6483547 100644
|
|
||||||
--- a/repos/base/include/base/child.h
|
|
||||||
+++ b/repos/base/include/base/child.h
|
|
||||||
@@ -44,9 +44,9 @@ namespace Genode {
|
|
||||||
*/
|
|
||||||
struct Genode::Child_policy
|
|
||||||
{
|
|
||||||
- typedef String<64> Name;
|
|
||||||
- typedef String<64> Binary_name;
|
|
||||||
- typedef String<64> Linker_name;
|
|
||||||
+ typedef String<128> Name;
|
|
||||||
+ typedef String<128> Binary_name;
|
|
||||||
+ typedef String<128> Linker_name;
|
|
||||||
|
|
||||||
virtual ~Child_policy() { }
|
|
||||||
|
|
||||||
@@ -407,7 +407,7 @@ class Genode::Child : protected Rpc_object<Parent>,
|
|
||||||
|
|
||||||
Id_space<Parent::Client>::Id const _client_id;
|
|
||||||
|
|
||||||
- typedef String<64> Label;
|
|
||||||
+ typedef String<128> Label;
|
|
||||||
|
|
||||||
Args const _args;
|
|
||||||
|
|
||||||
diff --git a/repos/base/include/base/shared_object.h b/repos/base/include/base/shared_object.h
|
|
||||||
index f4dd1622fe..7ffe5fa34c 100644
|
|
||||||
--- a/repos/base/include/base/shared_object.h
|
|
||||||
+++ b/repos/base/include/base/shared_object.h
|
|
||||||
@@ -128,7 +128,7 @@ class Genode::Dynamic_linker
|
|
||||||
struct Object_info
|
|
||||||
{
|
|
||||||
/* name of shared library, or "binary" for the main program */
|
|
||||||
- typedef String<64> Name;
|
|
||||||
+ typedef String<128> Name;
|
|
||||||
Name name;
|
|
||||||
|
|
||||||
Rom_dataspace_capability ds_cap;
|
|
||||||
diff --git a/repos/base/src/lib/ldso/include/file.h b/repos/base/src/lib/ldso/include/file.h
|
|
||||||
index a8875a781e..e06749f7ef 100644
|
|
||||||
--- a/repos/base/src/lib/ldso/include/file.h
|
|
||||||
+++ b/repos/base/src/lib/ldso/include/file.h
|
|
||||||
@@ -98,7 +98,7 @@ struct Linker::Elf_file : File
|
|
||||||
Ram_dataspace_capability ram_cap[Phdr::MAX_PHDR];
|
|
||||||
bool const loaded;
|
|
||||||
|
|
||||||
- typedef String<64> Name;
|
|
||||||
+ typedef String<128> Name;
|
|
||||||
|
|
||||||
Rom_dataspace_capability _rom_dataspace(Name const &name)
|
|
||||||
{
|
|
||||||
diff --git a/repos/libports/src/lib/libc/internal/types.h b/repos/libports/src/lib/libc/internal/types.h
|
|
||||||
index 233da10b47..afaee3f8d7 100644
|
|
||||||
--- a/repos/libports/src/lib/libc/internal/types.h
|
|
||||||
+++ b/repos/libports/src/lib/libc/internal/types.h
|
|
||||||
@@ -23,7 +23,7 @@ namespace Libc {
|
|
||||||
using namespace Genode;
|
|
||||||
|
|
||||||
typedef Genode::uint64_t uint64_t;
|
|
||||||
- typedef String<64> Binary_name;
|
|
||||||
+ typedef String<128> Binary_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* _LIBC__INTERNAL__TYPES_H_ */
|
|
||||||
diff --git a/repos/libports/src/lib/libc/kernel.cc b/repos/libports/src/lib/libc/kernel.cc
|
|
||||||
index 430295e7d5..bdb3c66598 100644
|
|
||||||
--- a/repos/libports/src/lib/libc/kernel.cc
|
|
||||||
+++ b/repos/libports/src/lib/libc/kernel.cc
|
|
||||||
@@ -300,7 +300,7 @@ void Libc::Kernel::_clone_state_from_parent()
|
|
||||||
|
|
||||||
/* clone RW segment of a shared library or the binary */
|
|
||||||
if (node.type() == "rw") {
|
|
||||||
- typedef String<64> Name;
|
|
||||||
+ typedef String<128> Name;
|
|
||||||
Name const name = node.attribute_value("name", Name());
|
|
||||||
|
|
||||||
/*
|
|
||||||
diff --git a/repos/os/src/lib/sandbox/child.h b/repos/os/src/lib/sandbox/child.h
|
|
||||||
index 030ccbd66d..5164d33ba5 100644
|
|
||||||
--- a/repos/os/src/lib/sandbox/child.h
|
|
||||||
+++ b/repos/os/src/lib/sandbox/child.h
|
|
||||||
@@ -119,7 +119,6 @@ class Sandbox::Child : Child_policy, Routed_service::Wakeup
|
|
||||||
throw Missing_name_attribute();
|
|
||||||
}
|
|
||||||
|
|
||||||
- typedef String<64> Name;
|
|
||||||
Name const _unique_name { _name_from_xml(_start_node->xml()) };
|
|
||||||
|
|
||||||
static Binary_name _binary_from_xml(Xml_node start_node,
|
|
|
@ -1,39 +0,0 @@
|
||||||
From 55f35e33680287ba925accf3bddadaa46d5ff30a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Emery Hemingway <ehmry@posteo.net>
|
|
||||||
Date: Sat, 7 Nov 2020 08:37:29 +0100
|
|
||||||
Subject: [PATCH] core: log ROM requests with affirmative "diag" flag
|
|
||||||
|
|
||||||
---
|
|
||||||
repos/base/src/core/include/rom_session_component.h | 12 ++++++++++--
|
|
||||||
1 file changed, 10 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/repos/base/src/core/include/rom_session_component.h b/repos/base/src/core/include/rom_session_component.h
|
|
||||||
index c584701f5f..2c93302e14 100644
|
|
||||||
--- a/repos/base/src/core/include/rom_session_component.h
|
|
||||||
+++ b/repos/base/src/core/include/rom_session_component.h
|
|
||||||
@@ -35,12 +35,20 @@ namespace Genode {
|
|
||||||
{
|
|
||||||
/* extract label */
|
|
||||||
Session_label const label = label_from_args(args);
|
|
||||||
+ auto const name = label.last_element();
|
|
||||||
+
|
|
||||||
+ /* extract diag flag */
|
|
||||||
+ bool diag = session_diag_from_args(args).enabled;
|
|
||||||
|
|
||||||
/* find ROM module for trailing label element */
|
|
||||||
- Rom_module const * rom = rom_fs.find(label.last_element().string());
|
|
||||||
- if (rom)
|
|
||||||
+ Rom_module const * rom = rom_fs.find(name.string());
|
|
||||||
+
|
|
||||||
+ if (rom) {
|
|
||||||
+ if (diag) log("serve ROM \"", name, "\" to \"", label, "\"");
|
|
||||||
return *rom;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
+ error("ROM not found for ", args);
|
|
||||||
throw Service_denied();
|
|
||||||
}
|
|
||||||
|
|
||||||
--
|
|
||||||
2.29.2
|
|
||||||
|
|
|
@ -1,57 +0,0 @@
|
||||||
commit 0df2ea0956e46f3914be01aa9d7b20a06d805e53
|
|
||||||
Author: Emery Hemingway <ehmry@posteo.net>
|
|
||||||
Date: Wed Apr 8 12:39:44 2020 +0530
|
|
||||||
|
|
||||||
cxx: align exception allocator to sixteen bytes
|
|
||||||
|
|
||||||
diff --git a/repos/base/src/lib/cxx/malloc_free.cc b/repos/base/src/lib/cxx/malloc_free.cc
|
|
||||||
index b551dfe627..870dbb6c6d 100644
|
|
||||||
--- a/repos/base/src/lib/cxx/malloc_free.cc
|
|
||||||
+++ b/repos/base/src/lib/cxx/malloc_free.cc
|
|
||||||
@@ -61,27 +61,23 @@ void Genode::init_cxx_heap(Env &env)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
-typedef unsigned long Block_header;
|
|
||||||
+typedef size_t Block_header;
|
|
||||||
|
|
||||||
|
|
||||||
extern "C" void *malloc(size_t size)
|
|
||||||
{
|
|
||||||
- /* enforce size to be a multiple of 4 bytes */
|
|
||||||
- size = (size + 3) & ~3;
|
|
||||||
-
|
|
||||||
/*
|
|
||||||
- * We store the size of the allocation at the very
|
|
||||||
- * beginning of the allocated block and return
|
|
||||||
- * the subsequent address. This way, we can retrieve
|
|
||||||
- * the size information when freeing the block.
|
|
||||||
+ * We pad each allocation with 16 leading bytes for
|
|
||||||
+ * storing the size of the allocation. This way, we can
|
|
||||||
+ * retrieve the size information when freeing the block.
|
|
||||||
*/
|
|
||||||
- unsigned long real_size = size + sizeof(Block_header);
|
|
||||||
- void *addr = 0;
|
|
||||||
- if (!cxx_heap().alloc(real_size, &addr))
|
|
||||||
- return 0;
|
|
||||||
+ size_t real_size = size + 16;
|
|
||||||
+ addr_t real_addr = 0;
|
|
||||||
+ if (!cxx_heap().alloc(real_size, (void**)&real_addr))
|
|
||||||
+ return nullptr;
|
|
||||||
|
|
||||||
- *(Block_header *)addr = real_size;
|
|
||||||
- return (Block_header *)addr + 1;
|
|
||||||
+ *(Block_header *)real_addr = real_size;
|
|
||||||
+ return (void*)(real_addr + 16);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -101,7 +97,7 @@ extern "C" void free(void *ptr)
|
|
||||||
{
|
|
||||||
if (!ptr) return;
|
|
||||||
|
|
||||||
- unsigned long *addr = ((unsigned long *)ptr) - 1;
|
|
||||||
+ unsigned long *addr = (unsigned long *)(addr_t(ptr) - 16);
|
|
||||||
cxx_heap().free(addr, *addr);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,184 +0,0 @@
|
||||||
From 4250346b87b8e24a48d04ddacc77512eaa20ce0e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Emery Hemingway <ehmry@posteo.net>
|
|
||||||
Date: Sat, 7 Nov 2020 11:23:03 +0100
|
|
||||||
Subject: [PATCH 1/3] base: fail on label truncation
|
|
||||||
|
|
||||||
---
|
|
||||||
repos/base/include/base/session_label.h | 27 ++++++++++++++++++++++---
|
|
||||||
repos/base/include/util/arg_string.h | 6 ++++++
|
|
||||||
2 files changed, 30 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/repos/base/include/base/session_label.h b/repos/base/include/base/session_label.h
|
|
||||||
index d5e752d120..85034904e5 100644
|
|
||||||
--- a/repos/base/include/base/session_label.h
|
|
||||||
+++ b/repos/base/include/base/session_label.h
|
|
||||||
@@ -16,10 +16,14 @@
|
|
||||||
#define _INCLUDE__BASE__SESSION_LABEL_H_
|
|
||||||
|
|
||||||
#include <base/snprintf.h>
|
|
||||||
+#include <base/log.h>
|
|
||||||
#include <util/arg_string.h>
|
|
||||||
#include <util/string.h>
|
|
||||||
|
|
||||||
-namespace Genode { struct Session_label; }
|
|
||||||
+namespace Genode {
|
|
||||||
+ struct Session_label;
|
|
||||||
+ class Label_overflow : Exception { };
|
|
||||||
+}
|
|
||||||
|
|
||||||
struct Genode::Session_label : String<160>
|
|
||||||
{
|
|
||||||
@@ -33,6 +37,8 @@ struct Genode::Session_label : String<160>
|
|
||||||
using String = String<capacity()>;
|
|
||||||
using String::String;
|
|
||||||
|
|
||||||
+ /* TODO: String::String can still truncate and break labels */
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* Copy constructor
|
|
||||||
*
|
|
||||||
@@ -41,7 +47,13 @@ struct Genode::Session_label : String<160>
|
|
||||||
*/
|
|
||||||
template <size_t N>
|
|
||||||
Session_label(Genode::String<N> const &other)
|
|
||||||
- : Genode::String<160>(other) { }
|
|
||||||
+ : Genode::String<160>(other)
|
|
||||||
+ {
|
|
||||||
+ if (length() < other.length()) {
|
|
||||||
+ error(__func__, " overflow - «", other, "»");
|
|
||||||
+ throw Label_overflow();
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
|
|
||||||
Session_label last_element() const
|
|
||||||
{
|
|
||||||
@@ -90,8 +102,13 @@ namespace Genode {
|
|
||||||
inline Session_label label_from_args(char const *args)
|
|
||||||
{
|
|
||||||
char buf[Session_label::capacity()];
|
|
||||||
- Arg_string::find_arg(args, "label").string(buf, sizeof(buf), "");
|
|
||||||
+ auto arg = Arg_string::find_arg(args, "label");
|
|
||||||
+ if (Session_label::capacity() <= arg.length()) {
|
|
||||||
+ error(__func__, " overflow - «", (char const *)args, "»");
|
|
||||||
+ throw Label_overflow();
|
|
||||||
+ }
|
|
||||||
|
|
||||||
+ arg.string(buf, sizeof(buf), "");
|
|
||||||
return Session_label(Cstring(buf));
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -103,6 +120,10 @@ namespace Genode {
|
|
||||||
String<N2> const &label)
|
|
||||||
{
|
|
||||||
String<N1 + N2 + 4> const prefixed_label(prefix, " -> ", label);
|
|
||||||
+ if (Session_label::capacity() <= prefixed_label.length()) {
|
|
||||||
+ error(__func__, " overflow - «", prefix, "» - «", label, "»");
|
|
||||||
+ throw Label_overflow();
|
|
||||||
+ }
|
|
||||||
return Session_label(prefixed_label);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
diff --git a/repos/base/include/util/arg_string.h b/repos/base/include/util/arg_string.h
|
|
||||||
index 610fbb16b3..48777e0c2a 100644
|
|
||||||
--- a/repos/base/include/util/arg_string.h
|
|
||||||
+++ b/repos/base/include/util/arg_string.h
|
|
||||||
@@ -114,6 +114,12 @@ class Genode::Arg
|
|
||||||
|
|
||||||
inline bool valid() const { return _key; }
|
|
||||||
|
|
||||||
+ size_t length() const
|
|
||||||
+ {
|
|
||||||
+ return _value.type() == Token::STRING
|
|
||||||
+ ? _value.len() - 2 : _value.len();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
unsigned long ulong_value(unsigned long default_value) const
|
|
||||||
{
|
|
||||||
unsigned long value = 0;
|
|
||||||
--
|
|
||||||
2.30.0
|
|
||||||
|
|
||||||
|
|
||||||
From 252c08cf61ad7feef83bd2e542465330633ba41f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Emery Hemingway <ehmry@posteo.net>
|
|
||||||
Date: Wed, 10 Feb 2021 13:32:42 +0100
|
|
||||||
Subject: [PATCH 2/3] Detect destroyed argument buffers at Env::session
|
|
||||||
|
|
||||||
Session request arguments are silently zeroed when their length
|
|
||||||
exceedes some buffer size.
|
|
||||||
---
|
|
||||||
repos/base/src/lib/base/component.cc | 4 ++++
|
|
||||||
1 file changed, 4 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/repos/base/src/lib/base/component.cc b/repos/base/src/lib/base/component.cc
|
|
||||||
index 568be31efb..913687ea7f 100644
|
|
||||||
--- a/repos/base/src/lib/base/component.cc
|
|
||||||
+++ b/repos/base/src/lib/base/component.cc
|
|
||||||
@@ -122,6 +122,10 @@ namespace {
|
|
||||||
Affinity const &affinity) override
|
|
||||||
{
|
|
||||||
Mutex::Guard guard(_mutex);
|
|
||||||
+ if (!args.valid_string()) {
|
|
||||||
+ error("invalid args for ", name.string(), " service request");
|
|
||||||
+ throw Service_denied();
|
|
||||||
+ }
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Since we account for the backing store for session meta data on
|
|
||||||
--
|
|
||||||
2.30.0
|
|
||||||
|
|
||||||
|
|
||||||
From 53641e192bc3f9a756ae15b91640a42ac7e70918 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Emery Hemingway <ehmry@posteo.net>
|
|
||||||
Date: Thu, 11 Feb 2021 14:10:50 +0100
|
|
||||||
Subject: [PATCH 3/3] Increase session arguments buffer size to 240 bytes
|
|
||||||
|
|
||||||
---
|
|
||||||
repos/base/include/parent/parent.h | 2 +-
|
|
||||||
repos/base/include/root/root.h | 2 +-
|
|
||||||
repos/base/lib/symbols/ld | 2 ++
|
|
||||||
3 files changed, 4 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/repos/base/include/parent/parent.h b/repos/base/include/parent/parent.h
|
|
||||||
index 7379342e5b..6e94047788 100644
|
|
||||||
--- a/repos/base/include/parent/parent.h
|
|
||||||
+++ b/repos/base/include/parent/parent.h
|
|
||||||
@@ -54,7 +54,7 @@ class Genode::Parent
|
|
||||||
public:
|
|
||||||
|
|
||||||
typedef Rpc_in_buffer<64> Service_name;
|
|
||||||
- typedef Rpc_in_buffer<160> Session_args;
|
|
||||||
+ typedef Rpc_in_buffer<240> Session_args;
|
|
||||||
typedef Rpc_in_buffer<160> Upgrade_args;
|
|
||||||
|
|
||||||
struct Client : Interface { typedef Id_space<Client>::Id Id; };
|
|
||||||
diff --git a/repos/base/include/root/root.h b/repos/base/include/root/root.h
|
|
||||||
index c7e3a0c908..4fda9e341f 100644
|
|
||||||
--- a/repos/base/include/root/root.h
|
|
||||||
+++ b/repos/base/include/root/root.h
|
|
||||||
@@ -29,7 +29,7 @@ namespace Genode {
|
|
||||||
|
|
||||||
struct Genode::Root
|
|
||||||
{
|
|
||||||
- typedef Rpc_in_buffer<160> Session_args;
|
|
||||||
+ typedef Rpc_in_buffer<240> Session_args;
|
|
||||||
typedef Rpc_in_buffer<160> Upgrade_args;
|
|
||||||
|
|
||||||
virtual ~Root() { }
|
|
||||||
diff --git a/repos/base/lib/symbols/ld b/repos/base/lib/symbols/ld
|
|
||||||
index 3cfbdd7466..d7603e8ca4 100644
|
|
||||||
--- a/repos/base/lib/symbols/ld
|
|
||||||
+++ b/repos/base/lib/symbols/ld
|
|
||||||
@@ -398,6 +398,8 @@ _ZThn236_N5Timer10Connection11set_timeoutEN6Genode12MicrosecondsERNS1_15Timeout_
|
|
||||||
_ZThn236_N5Timer10Connection9curr_timeEv T
|
|
||||||
_ZThn288_N5Timer10Connection11set_timeoutEN6Genode12MicrosecondsERNS1_15Timeout_handlerE T
|
|
||||||
_ZThn288_N5Timer10Connection9curr_timeEv T
|
|
||||||
+_ZThn368_N5Timer10Connection11set_timeoutEN6Genode12MicrosecondsERNS1_15Timeout_handlerE T
|
|
||||||
+_ZThn368_N5Timer10Connection9curr_timeEv T
|
|
||||||
_ZThn8_N6Genode17Timeout_scheduler14handle_timeoutENS_8DurationE T
|
|
||||||
_ZThn8_N6Genode17Timeout_schedulerD0Ev T
|
|
||||||
_ZThn8_N6Genode17Timeout_schedulerD1Ev T
|
|
||||||
--
|
|
||||||
2.30.0
|
|
||||||
|
|
|
@ -1,90 +0,0 @@
|
||||||
From 8c4bb7d84838e8c01673caa8ad45a4c042ccdd11 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Emery Hemingway <ehmry@posteo.net>
|
|
||||||
Date: Mon, 6 Apr 2020 16:32:13 +0530
|
|
||||||
Subject: [PATCH] ld: support for loading read-only segments
|
|
||||||
|
|
||||||
---
|
|
||||||
repos/base/src/lib/ldso/include/file.h | 24 ++++++++++++++++++--
|
|
||||||
repos/base/src/lib/ldso/include/region_map.h | 10 ++++++++
|
|
||||||
2 files changed, 32 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/repos/base/src/lib/ldso/include/file.h b/repos/base/src/lib/ldso/include/file.h
|
|
||||||
index 1c9ce53ca3..6688f0edd2 100644
|
|
||||||
--- a/repos/base/src/lib/ldso/include/file.h
|
|
||||||
+++ b/repos/base/src/lib/ldso/include/file.h
|
|
||||||
@@ -34,6 +34,9 @@ namespace Linker {
|
|
||||||
|
|
||||||
static inline bool is_rw(Elf::Phdr const &ph) {
|
|
||||||
return ((ph.p_flags & PF_MASK) == (PF_R | PF_W)); }
|
|
||||||
+
|
|
||||||
+ static inline bool is_ro(Elf::Phdr const &ph) {
|
|
||||||
+ return ((ph.p_flags & PF_MASK) == PF_R); }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@@ -280,15 +283,21 @@ struct Linker::Elf_file : File
|
|
||||||
else if (is_rw(*ph))
|
|
||||||
load_segment_rw(*ph, i);
|
|
||||||
|
|
||||||
+ else if (is_ro(*ph))
|
|
||||||
+ load_segment_ro(*ph);
|
|
||||||
+
|
|
||||||
else {
|
|
||||||
- error("LD: Non-RW/RX segment");
|
|
||||||
+ auto X = ph->p_flags & PF_X ? "X" : "-";
|
|
||||||
+ auto W = ph->p_flags & PF_W ? "W" : "-";
|
|
||||||
+ auto R = ph->p_flags & PF_R ? "R" : "-";
|
|
||||||
+ error("LD: unhandled ", X,W,R, " segment at file offset ", Hex(ph->p_offset));
|
|
||||||
throw Invalid_file();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
- * Map read-only segment
|
|
||||||
+ * Map read-execute-only segment
|
|
||||||
*/
|
|
||||||
void load_segment_rx(Elf::Phdr const &p)
|
|
||||||
{
|
|
||||||
@@ -318,6 +327,17 @@ struct Linker::Elf_file : File
|
|
||||||
env.rm().detach(src);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /**
|
|
||||||
+ * Map read-only segment
|
|
||||||
+ */
|
|
||||||
+ void load_segment_ro(Elf::Phdr const &p)
|
|
||||||
+ {
|
|
||||||
+ Region_map::r()->attach_readonly(rom_cap,
|
|
||||||
+ trunc_page(p.p_vaddr) + reloc_base,
|
|
||||||
+ round_page(p.p_memsz),
|
|
||||||
+ trunc_page(p.p_offset));
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* Unmap segements, RM regions, and free allocated dataspaces
|
|
||||||
*/
|
|
||||||
diff --git a/repos/base/src/lib/ldso/include/region_map.h b/repos/base/src/lib/ldso/include/region_map.h
|
|
||||||
index cbee34c639..b30c2221da 100644
|
|
||||||
--- a/repos/base/src/lib/ldso/include/region_map.h
|
|
||||||
+++ b/repos/base/src/lib/ldso/include/region_map.h
|
|
||||||
@@ -122,6 +122,16 @@ class Linker::Region_map
|
|
||||||
[&] () { _env.upgrade(Parent::Env::pd(), "ram_quota=8K"); });
|
|
||||||
}
|
|
||||||
|
|
||||||
+ Local_addr attach_readonly(Dataspace_capability ds, addr_t local_addr,
|
|
||||||
+ size_t size = 0, off_t offset = 0)
|
|
||||||
+ {
|
|
||||||
+ return retry<Genode::Out_of_ram>(
|
|
||||||
+ [&] () {
|
|
||||||
+ return _rm.attach(ds, size, offset, true, local_addr - _base, false, false);
|
|
||||||
+ },
|
|
||||||
+ [&] () { _env.upgrade(Parent::Env::pd(), "ram_quota=8K"); });
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
void detach(Local_addr local_addr) { _rm.detach((addr_t)local_addr - _base); }
|
|
||||||
};
|
|
||||||
|
|
||||||
--
|
|
||||||
2.28.0
|
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
From 45c73b01d4609f59ca576141bc836baad8e468ed Mon Sep 17 00:00:00 2001
|
|
||||||
From: Emery Hemingway <ehmry@posteo.net>
|
|
||||||
Date: Thu, 28 Jan 2021 13:39:29 +0100
|
|
||||||
Subject: [PATCH] genode_dyn.ld: do not emit PHDR segment
|
|
||||||
|
|
||||||
Recent version of binutils check that PHDR segments are covered
|
|
||||||
by a LOAD segment. In this case the unloaded PHDR segment can be
|
|
||||||
ommited.
|
|
||||||
---
|
|
||||||
repos/base/src/ld/genode_dyn.ld | 1 -
|
|
||||||
1 file changed, 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/repos/base/src/ld/genode_dyn.ld b/repos/base/src/ld/genode_dyn.ld
|
|
||||||
index 5fa6ddc29e..57ec92f0f6 100644
|
|
||||||
--- a/repos/base/src/ld/genode_dyn.ld
|
|
||||||
+++ b/repos/base/src/ld/genode_dyn.ld
|
|
||||||
@@ -18,7 +18,6 @@
|
|
||||||
|
|
||||||
PHDRS
|
|
||||||
{
|
|
||||||
- phdr PT_PHDR PHDRS;
|
|
||||||
interp PT_INTERP;
|
|
||||||
ro PT_LOAD;
|
|
||||||
rw PT_LOAD;
|
|
||||||
--
|
|
||||||
2.29.2
|
|
||||||
|
|
|
@ -1,7 +1,98 @@
|
||||||
From 735e7af9458005092451f448ddf3dfc1cad4acbd Mon Sep 17 00:00:00 2001
|
From bf2613eb22091125c0aff894e580063dac5e2bff Mon Sep 17 00:00:00 2001
|
||||||
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
|
Date: Mon, 6 Apr 2020 16:32:13 +0530
|
||||||
|
Subject: [PATCH 01/16] ld: support for loading read-only segments
|
||||||
|
|
||||||
|
---
|
||||||
|
repos/base/src/lib/ldso/include/file.h | 24 ++++++++++++++++++--
|
||||||
|
repos/base/src/lib/ldso/include/region_map.h | 10 ++++++++
|
||||||
|
2 files changed, 32 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/repos/base/src/lib/ldso/include/file.h b/repos/base/src/lib/ldso/include/file.h
|
||||||
|
index 1c9ce53ca3..6688f0edd2 100644
|
||||||
|
--- a/repos/base/src/lib/ldso/include/file.h
|
||||||
|
+++ b/repos/base/src/lib/ldso/include/file.h
|
||||||
|
@@ -34,6 +34,9 @@ namespace Linker {
|
||||||
|
|
||||||
|
static inline bool is_rw(Elf::Phdr const &ph) {
|
||||||
|
return ((ph.p_flags & PF_MASK) == (PF_R | PF_W)); }
|
||||||
|
+
|
||||||
|
+ static inline bool is_ro(Elf::Phdr const &ph) {
|
||||||
|
+ return ((ph.p_flags & PF_MASK) == PF_R); }
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -280,15 +283,21 @@ struct Linker::Elf_file : File
|
||||||
|
else if (is_rw(*ph))
|
||||||
|
load_segment_rw(*ph, i);
|
||||||
|
|
||||||
|
+ else if (is_ro(*ph))
|
||||||
|
+ load_segment_ro(*ph);
|
||||||
|
+
|
||||||
|
else {
|
||||||
|
- error("LD: Non-RW/RX segment");
|
||||||
|
+ auto X = ph->p_flags & PF_X ? "X" : "-";
|
||||||
|
+ auto W = ph->p_flags & PF_W ? "W" : "-";
|
||||||
|
+ auto R = ph->p_flags & PF_R ? "R" : "-";
|
||||||
|
+ error("LD: unhandled ", X,W,R, " segment at file offset ", Hex(ph->p_offset));
|
||||||
|
throw Invalid_file();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
- * Map read-only segment
|
||||||
|
+ * Map read-execute-only segment
|
||||||
|
*/
|
||||||
|
void load_segment_rx(Elf::Phdr const &p)
|
||||||
|
{
|
||||||
|
@@ -318,6 +327,17 @@ struct Linker::Elf_file : File
|
||||||
|
env.rm().detach(src);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /**
|
||||||
|
+ * Map read-only segment
|
||||||
|
+ */
|
||||||
|
+ void load_segment_ro(Elf::Phdr const &p)
|
||||||
|
+ {
|
||||||
|
+ Region_map::r()->attach_readonly(rom_cap,
|
||||||
|
+ trunc_page(p.p_vaddr) + reloc_base,
|
||||||
|
+ round_page(p.p_memsz),
|
||||||
|
+ trunc_page(p.p_offset));
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* Unmap segements, RM regions, and free allocated dataspaces
|
||||||
|
*/
|
||||||
|
diff --git a/repos/base/src/lib/ldso/include/region_map.h b/repos/base/src/lib/ldso/include/region_map.h
|
||||||
|
index 78d2c7033d..f17d6dfec0 100644
|
||||||
|
--- a/repos/base/src/lib/ldso/include/region_map.h
|
||||||
|
+++ b/repos/base/src/lib/ldso/include/region_map.h
|
||||||
|
@@ -130,6 +130,16 @@ class Linker::Region_map
|
||||||
|
[&] () { _env.upgrade(Parent::Env::pd(), "ram_quota=8K"); });
|
||||||
|
}
|
||||||
|
|
||||||
|
+ Local_addr attach_readonly(Dataspace_capability ds, addr_t local_addr,
|
||||||
|
+ size_t size = 0, off_t offset = 0)
|
||||||
|
+ {
|
||||||
|
+ return retry<Genode::Out_of_ram>(
|
||||||
|
+ [&] () {
|
||||||
|
+ return _rm.attach(ds, size, offset, true, local_addr - _base, false, false);
|
||||||
|
+ },
|
||||||
|
+ [&] () { _env.upgrade(Parent::Env::pd(), "ram_quota=8K"); });
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
void detach(Local_addr local_addr) { _rm.detach((addr_t)local_addr - _base); }
|
||||||
|
};
|
||||||
|
|
||||||
|
--
|
||||||
|
2.30.0
|
||||||
|
|
||||||
|
|
||||||
|
From 525ab24c481acdf9bb784cac36e663a20084b55b Mon Sep 17 00:00:00 2001
|
||||||
From: Emery Hemingway <ehmry@posteo.net>
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
Date: Sat, 25 Apr 2020 17:10:03 +0530
|
Date: Sat, 25 Apr 2020 17:10:03 +0530
|
||||||
Subject: [PATCH 1/4] init/sandbox: <routes> support
|
Subject: [PATCH 02/16] init/sandbox: <routes> support
|
||||||
|
|
||||||
Apply routing rules to a child from a <routes> node at the top-level of
|
Apply routing rules to a child from a <routes> node at the top-level of
|
||||||
a sandbox config, unless the corresponding start node has as <route>
|
a sandbox config, unless the corresponding start node has as <route>
|
||||||
|
@ -180,14 +271,123 @@ index 7afcaebf00..36aab737f2 100644
|
||||||
if (!scoped_label)
|
if (!scoped_label)
|
||||||
return false;
|
return false;
|
||||||
--
|
--
|
||||||
2.29.2
|
2.30.0
|
||||||
|
|
||||||
|
|
||||||
From 0b65d7660784dbff4ef4fe392af686103c60a32d Mon Sep 17 00:00:00 2001
|
From 16106e96b1cf7639b050097b131b3be3cdbcf739 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
|
Date: Fri, 29 May 2020 18:42:57 +0530
|
||||||
|
Subject: [PATCH 03/16] Use 128-byte strings for session labels
|
||||||
|
|
||||||
|
Sixty-four bytes is insufficient for Nix store paths.
|
||||||
|
---
|
||||||
|
repos/base/include/base/child.h | 8 ++++----
|
||||||
|
repos/base/include/base/shared_object.h | 2 +-
|
||||||
|
repos/base/src/lib/ldso/include/file.h | 2 +-
|
||||||
|
repos/libports/src/lib/libc/internal/types.h | 2 +-
|
||||||
|
repos/libports/src/lib/libc/kernel.cc | 2 +-
|
||||||
|
repos/os/src/lib/sandbox/child.h | 1 -
|
||||||
|
6 files changed, 8 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/repos/base/include/base/child.h b/repos/base/include/base/child.h
|
||||||
|
index 8c7b33a9d9..3bd6483547 100644
|
||||||
|
--- a/repos/base/include/base/child.h
|
||||||
|
+++ b/repos/base/include/base/child.h
|
||||||
|
@@ -44,9 +44,9 @@ namespace Genode {
|
||||||
|
*/
|
||||||
|
struct Genode::Child_policy
|
||||||
|
{
|
||||||
|
- typedef String<64> Name;
|
||||||
|
- typedef String<64> Binary_name;
|
||||||
|
- typedef String<64> Linker_name;
|
||||||
|
+ typedef String<128> Name;
|
||||||
|
+ typedef String<128> Binary_name;
|
||||||
|
+ typedef String<128> Linker_name;
|
||||||
|
|
||||||
|
virtual ~Child_policy() { }
|
||||||
|
|
||||||
|
@@ -407,7 +407,7 @@ class Genode::Child : protected Rpc_object<Parent>,
|
||||||
|
|
||||||
|
Id_space<Parent::Client>::Id const _client_id;
|
||||||
|
|
||||||
|
- typedef String<64> Label;
|
||||||
|
+ typedef String<128> Label;
|
||||||
|
|
||||||
|
Args const _args;
|
||||||
|
|
||||||
|
diff --git a/repos/base/include/base/shared_object.h b/repos/base/include/base/shared_object.h
|
||||||
|
index f4dd1622fe..7ffe5fa34c 100644
|
||||||
|
--- a/repos/base/include/base/shared_object.h
|
||||||
|
+++ b/repos/base/include/base/shared_object.h
|
||||||
|
@@ -128,7 +128,7 @@ class Genode::Dynamic_linker
|
||||||
|
struct Object_info
|
||||||
|
{
|
||||||
|
/* name of shared library, or "binary" for the main program */
|
||||||
|
- typedef String<64> Name;
|
||||||
|
+ typedef String<128> Name;
|
||||||
|
Name name;
|
||||||
|
|
||||||
|
Rom_dataspace_capability ds_cap;
|
||||||
|
diff --git a/repos/base/src/lib/ldso/include/file.h b/repos/base/src/lib/ldso/include/file.h
|
||||||
|
index 6688f0edd2..e763264eee 100644
|
||||||
|
--- a/repos/base/src/lib/ldso/include/file.h
|
||||||
|
+++ b/repos/base/src/lib/ldso/include/file.h
|
||||||
|
@@ -101,7 +101,7 @@ struct Linker::Elf_file : File
|
||||||
|
Ram_dataspace_capability ram_cap[Phdr::MAX_PHDR];
|
||||||
|
bool const loaded;
|
||||||
|
|
||||||
|
- typedef String<64> Name;
|
||||||
|
+ typedef String<128> Name;
|
||||||
|
|
||||||
|
Rom_dataspace_capability _rom_dataspace(Name const &name)
|
||||||
|
{
|
||||||
|
diff --git a/repos/libports/src/lib/libc/internal/types.h b/repos/libports/src/lib/libc/internal/types.h
|
||||||
|
index 233da10b47..afaee3f8d7 100644
|
||||||
|
--- a/repos/libports/src/lib/libc/internal/types.h
|
||||||
|
+++ b/repos/libports/src/lib/libc/internal/types.h
|
||||||
|
@@ -23,7 +23,7 @@ namespace Libc {
|
||||||
|
using namespace Genode;
|
||||||
|
|
||||||
|
typedef Genode::uint64_t uint64_t;
|
||||||
|
- typedef String<64> Binary_name;
|
||||||
|
+ typedef String<128> Binary_name;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* _LIBC__INTERNAL__TYPES_H_ */
|
||||||
|
diff --git a/repos/libports/src/lib/libc/kernel.cc b/repos/libports/src/lib/libc/kernel.cc
|
||||||
|
index ac208b223e..3b81be01a9 100644
|
||||||
|
--- a/repos/libports/src/lib/libc/kernel.cc
|
||||||
|
+++ b/repos/libports/src/lib/libc/kernel.cc
|
||||||
|
@@ -364,7 +364,7 @@ void Libc::Kernel::_clone_state_from_parent()
|
||||||
|
|
||||||
|
/* clone RW segment of a shared library or the binary */
|
||||||
|
if (node.type() == "rw") {
|
||||||
|
- typedef String<64> Name;
|
||||||
|
+ typedef String<128> Name;
|
||||||
|
Name const name = node.attribute_value("name", Name());
|
||||||
|
|
||||||
|
/*
|
||||||
|
diff --git a/repos/os/src/lib/sandbox/child.h b/repos/os/src/lib/sandbox/child.h
|
||||||
|
index 81836a2045..f7b41ddd5b 100644
|
||||||
|
--- a/repos/os/src/lib/sandbox/child.h
|
||||||
|
+++ b/repos/os/src/lib/sandbox/child.h
|
||||||
|
@@ -128,7 +128,6 @@ class Sandbox::Child : Child_policy, Routed_service::Wakeup
|
||||||
|
throw Missing_name_attribute();
|
||||||
|
}
|
||||||
|
|
||||||
|
- typedef String<64> Name;
|
||||||
|
Name const _unique_name { _name_from_xml(_start_node->xml()) };
|
||||||
|
|
||||||
|
static Binary_name _binary_from_xml(Xml_node start_node,
|
||||||
|
--
|
||||||
|
2.30.0
|
||||||
|
|
||||||
|
|
||||||
|
From 3f38eacb25348a811f37ce267323253b1941cad2 Mon Sep 17 00:00:00 2001
|
||||||
From: Emery Hemingway <ehmry@posteo.net>
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
Date: Wed, 4 Nov 2020 11:03:49 +0100
|
Date: Wed, 4 Nov 2020 11:03:49 +0100
|
||||||
Subject: [PATCH 2/4] init/sandbox: do not parse <parent-provides> if <routes>
|
Subject: [PATCH 04/16] init/sandbox: do not parse <parent-provides> if
|
||||||
is present
|
<routes> is present
|
||||||
|
|
||||||
---
|
---
|
||||||
repos/os/src/lib/sandbox/library.cc | 124 +++++++++++++++++++---------
|
repos/os/src/lib/sandbox/library.cc | 124 +++++++++++++++++++---------
|
||||||
|
@ -331,13 +531,13 @@ index 30d0f2dfc1..caa9840ea6 100644
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
2.29.2
|
2.30.0
|
||||||
|
|
||||||
|
|
||||||
From 67d834c4556969e37bc050e151baeedddfb05ac9 Mon Sep 17 00:00:00 2001
|
From ef28369a1e6ba0f8910da3a6cb757f9e5ec334ad Mon Sep 17 00:00:00 2001
|
||||||
From: Emery Hemingway <ehmry@posteo.net>
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
Date: Wed, 4 Nov 2020 20:02:03 +0100
|
Date: Wed, 4 Nov 2020 20:02:03 +0100
|
||||||
Subject: [PATCH 3/4] init/sandbox: simplify routing
|
Subject: [PATCH 05/16] init/sandbox: simplify routing
|
||||||
MIME-Version: 1.0
|
MIME-Version: 1.0
|
||||||
Content-Type: text/plain; charset=UTF-8
|
Content-Type: text/plain; charset=UTF-8
|
||||||
Content-Transfer-Encoding: 8bit
|
Content-Transfer-Encoding: 8bit
|
||||||
|
@ -535,7 +735,7 @@ index d25e3d9683..46aa22411c 100644
|
||||||
_default_caps_accessor(default_caps_accessor),
|
_default_caps_accessor(default_caps_accessor),
|
||||||
_ram_limit_accessor(ram_limit_accessor),
|
_ram_limit_accessor(ram_limit_accessor),
|
||||||
diff --git a/repos/os/src/lib/sandbox/child.h b/repos/os/src/lib/sandbox/child.h
|
diff --git a/repos/os/src/lib/sandbox/child.h b/repos/os/src/lib/sandbox/child.h
|
||||||
index 81836a2045..f9d04cfdaf 100644
|
index f7b41ddd5b..fd254d7f49 100644
|
||||||
--- a/repos/os/src/lib/sandbox/child.h
|
--- a/repos/os/src/lib/sandbox/child.h
|
||||||
+++ b/repos/os/src/lib/sandbox/child.h
|
+++ b/repos/os/src/lib/sandbox/child.h
|
||||||
@@ -49,7 +49,6 @@ class Sandbox::Child : Child_policy, Routed_service::Wakeup
|
@@ -49,7 +49,6 @@ class Sandbox::Child : Child_policy, Routed_service::Wakeup
|
||||||
|
@ -554,7 +754,7 @@ index 81836a2045..f9d04cfdaf 100644
|
||||||
Routes_accessor &_routes_accessor;
|
Routes_accessor &_routes_accessor;
|
||||||
Default_caps_accessor &_default_caps_accessor;
|
Default_caps_accessor &_default_caps_accessor;
|
||||||
Ram_limit_accessor &_ram_limit_accessor;
|
Ram_limit_accessor &_ram_limit_accessor;
|
||||||
@@ -481,7 +479,6 @@ class Sandbox::Child : Child_policy, Routed_service::Wakeup
|
@@ -480,7 +478,6 @@ class Sandbox::Child : Child_policy, Routed_service::Wakeup
|
||||||
Id id,
|
Id id,
|
||||||
Report_update_trigger &report_update_trigger,
|
Report_update_trigger &report_update_trigger,
|
||||||
Xml_node start_node,
|
Xml_node start_node,
|
||||||
|
@ -697,13 +897,182 @@ index 36aab737f2..639a4be4dd 100644
|
||||||
* Find service with certain values in given registry
|
* Find service with certain values in given registry
|
||||||
*
|
*
|
||||||
--
|
--
|
||||||
2.29.2
|
2.30.0
|
||||||
|
|
||||||
|
|
||||||
From 92c1f192d432f177c681e3ab001214e66e96e0f0 Mon Sep 17 00:00:00 2001
|
From 79ae552230809f62e1717a08f5ce9a63c044abf9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
|
Date: Sat, 7 Nov 2020 08:37:29 +0100
|
||||||
|
Subject: [PATCH 06/16] core: log ROM requests with affirmative "diag" flag
|
||||||
|
|
||||||
|
---
|
||||||
|
repos/base/src/core/include/rom_session_component.h | 12 ++++++++++--
|
||||||
|
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/repos/base/src/core/include/rom_session_component.h b/repos/base/src/core/include/rom_session_component.h
|
||||||
|
index c584701f5f..2c93302e14 100644
|
||||||
|
--- a/repos/base/src/core/include/rom_session_component.h
|
||||||
|
+++ b/repos/base/src/core/include/rom_session_component.h
|
||||||
|
@@ -35,12 +35,20 @@ namespace Genode {
|
||||||
|
{
|
||||||
|
/* extract label */
|
||||||
|
Session_label const label = label_from_args(args);
|
||||||
|
+ auto const name = label.last_element();
|
||||||
|
+
|
||||||
|
+ /* extract diag flag */
|
||||||
|
+ bool diag = session_diag_from_args(args).enabled;
|
||||||
|
|
||||||
|
/* find ROM module for trailing label element */
|
||||||
|
- Rom_module const * rom = rom_fs.find(label.last_element().string());
|
||||||
|
- if (rom)
|
||||||
|
+ Rom_module const * rom = rom_fs.find(name.string());
|
||||||
|
+
|
||||||
|
+ if (rom) {
|
||||||
|
+ if (diag) log("serve ROM \"", name, "\" to \"", label, "\"");
|
||||||
|
return *rom;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
+ error("ROM not found for ", args);
|
||||||
|
throw Service_denied();
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.30.0
|
||||||
|
|
||||||
|
|
||||||
|
From 0e1ea49ea6ce4f85e2e30a01aa5ace7928b20267 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
|
Date: Sat, 7 Nov 2020 11:23:03 +0100
|
||||||
|
Subject: [PATCH 07/16] base: fail on label truncation
|
||||||
|
|
||||||
|
---
|
||||||
|
repos/base/include/base/session_label.h | 27 ++++++++++++++++++++++---
|
||||||
|
repos/base/include/util/arg_string.h | 6 ++++++
|
||||||
|
2 files changed, 30 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/repos/base/include/base/session_label.h b/repos/base/include/base/session_label.h
|
||||||
|
index d5e752d120..85034904e5 100644
|
||||||
|
--- a/repos/base/include/base/session_label.h
|
||||||
|
+++ b/repos/base/include/base/session_label.h
|
||||||
|
@@ -16,10 +16,14 @@
|
||||||
|
#define _INCLUDE__BASE__SESSION_LABEL_H_
|
||||||
|
|
||||||
|
#include <base/snprintf.h>
|
||||||
|
+#include <base/log.h>
|
||||||
|
#include <util/arg_string.h>
|
||||||
|
#include <util/string.h>
|
||||||
|
|
||||||
|
-namespace Genode { struct Session_label; }
|
||||||
|
+namespace Genode {
|
||||||
|
+ struct Session_label;
|
||||||
|
+ class Label_overflow : Exception { };
|
||||||
|
+}
|
||||||
|
|
||||||
|
struct Genode::Session_label : String<160>
|
||||||
|
{
|
||||||
|
@@ -33,6 +37,8 @@ struct Genode::Session_label : String<160>
|
||||||
|
using String = String<capacity()>;
|
||||||
|
using String::String;
|
||||||
|
|
||||||
|
+ /* TODO: String::String can still truncate and break labels */
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* Copy constructor
|
||||||
|
*
|
||||||
|
@@ -41,7 +47,13 @@ struct Genode::Session_label : String<160>
|
||||||
|
*/
|
||||||
|
template <size_t N>
|
||||||
|
Session_label(Genode::String<N> const &other)
|
||||||
|
- : Genode::String<160>(other) { }
|
||||||
|
+ : Genode::String<160>(other)
|
||||||
|
+ {
|
||||||
|
+ if (length() < other.length()) {
|
||||||
|
+ error(__func__, " overflow - «", other, "»");
|
||||||
|
+ throw Label_overflow();
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
|
||||||
|
Session_label last_element() const
|
||||||
|
{
|
||||||
|
@@ -90,8 +102,13 @@ namespace Genode {
|
||||||
|
inline Session_label label_from_args(char const *args)
|
||||||
|
{
|
||||||
|
char buf[Session_label::capacity()];
|
||||||
|
- Arg_string::find_arg(args, "label").string(buf, sizeof(buf), "");
|
||||||
|
+ auto arg = Arg_string::find_arg(args, "label");
|
||||||
|
+ if (Session_label::capacity() <= arg.length()) {
|
||||||
|
+ error(__func__, " overflow - «", (char const *)args, "»");
|
||||||
|
+ throw Label_overflow();
|
||||||
|
+ }
|
||||||
|
|
||||||
|
+ arg.string(buf, sizeof(buf), "");
|
||||||
|
return Session_label(Cstring(buf));
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -103,6 +120,10 @@ namespace Genode {
|
||||||
|
String<N2> const &label)
|
||||||
|
{
|
||||||
|
String<N1 + N2 + 4> const prefixed_label(prefix, " -> ", label);
|
||||||
|
+ if (Session_label::capacity() <= prefixed_label.length()) {
|
||||||
|
+ error(__func__, " overflow - «", prefix, "» - «", label, "»");
|
||||||
|
+ throw Label_overflow();
|
||||||
|
+ }
|
||||||
|
return Session_label(prefixed_label);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/repos/base/include/util/arg_string.h b/repos/base/include/util/arg_string.h
|
||||||
|
index 610fbb16b3..48777e0c2a 100644
|
||||||
|
--- a/repos/base/include/util/arg_string.h
|
||||||
|
+++ b/repos/base/include/util/arg_string.h
|
||||||
|
@@ -114,6 +114,12 @@ class Genode::Arg
|
||||||
|
|
||||||
|
inline bool valid() const { return _key; }
|
||||||
|
|
||||||
|
+ size_t length() const
|
||||||
|
+ {
|
||||||
|
+ return _value.type() == Token::STRING
|
||||||
|
+ ? _value.len() - 2 : _value.len();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
unsigned long ulong_value(unsigned long default_value) const
|
||||||
|
{
|
||||||
|
unsigned long value = 0;
|
||||||
|
--
|
||||||
|
2.30.0
|
||||||
|
|
||||||
|
|
||||||
|
From 2c193324a6702e123c8cafabda45c30c7ca09257 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
|
Date: Sat, 7 Nov 2020 13:49:41 +0100
|
||||||
|
Subject: [PATCH 08/16] init: log error when configuration cannot be parsed
|
||||||
|
|
||||||
|
---
|
||||||
|
repos/os/src/init/main.cc | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/repos/os/src/init/main.cc b/repos/os/src/init/main.cc
|
||||||
|
index 7b69c95721..f1c1a1435a 100644
|
||||||
|
--- a/repos/os/src/init/main.cc
|
||||||
|
+++ b/repos/os/src/init/main.cc
|
||||||
|
@@ -47,6 +47,10 @@ struct Init::Main : Sandbox::State_handler
|
||||||
|
_config.update();
|
||||||
|
|
||||||
|
Xml_node const config = _config.xml();
|
||||||
|
+ if (config.has_type("empty")) {
|
||||||
|
+ error("failed to parse config ROM");
|
||||||
|
+ return;
|
||||||
|
+ };
|
||||||
|
|
||||||
|
bool reporter_enabled = false;
|
||||||
|
config.with_sub_node("report", [&] (Xml_node report) {
|
||||||
|
--
|
||||||
|
2.30.0
|
||||||
|
|
||||||
|
|
||||||
|
From 5d07e900e3c7f0fe507844bccc5f168bad046a3c Mon Sep 17 00:00:00 2001
|
||||||
From: Emery Hemingway <ehmry@posteo.net>
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
Date: Sat, 28 Nov 2020 14:00:49 +0100
|
Date: Sat, 28 Nov 2020 14:00:49 +0100
|
||||||
Subject: [PATCH 4/4] Do not default Child::binary_name() to Child::name()
|
Subject: [PATCH 09/16] Do not default Child::binary_name() to Child::name()
|
||||||
|
|
||||||
---
|
---
|
||||||
repos/base/include/base/child.h | 2 +-
|
repos/base/include/base/child.h | 2 +-
|
||||||
|
@ -712,7 +1081,7 @@ Subject: [PATCH 4/4] Do not default Child::binary_name() to Child::name()
|
||||||
3 files changed, 4 insertions(+), 1 deletion(-)
|
3 files changed, 4 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
diff --git a/repos/base/include/base/child.h b/repos/base/include/base/child.h
|
diff --git a/repos/base/include/base/child.h b/repos/base/include/base/child.h
|
||||||
index 8c7b33a9d9..bca0d566f2 100644
|
index 3bd6483547..a00e59e3a4 100644
|
||||||
--- a/repos/base/include/base/child.h
|
--- a/repos/base/include/base/child.h
|
||||||
+++ b/repos/base/include/base/child.h
|
+++ b/repos/base/include/base/child.h
|
||||||
@@ -58,7 +58,7 @@ struct Genode::Child_policy
|
@@ -58,7 +58,7 @@ struct Genode::Child_policy
|
||||||
|
@ -738,10 +1107,10 @@ index d480585221..7acacf0ffd 100644
|
||||||
Session_label const &label) override
|
Session_label const &label) override
|
||||||
{
|
{
|
||||||
diff --git a/repos/os/src/lib/sandbox/child.h b/repos/os/src/lib/sandbox/child.h
|
diff --git a/repos/os/src/lib/sandbox/child.h b/repos/os/src/lib/sandbox/child.h
|
||||||
index f9d04cfdaf..a1e45dab0d 100644
|
index fd254d7f49..036e7f8fc2 100644
|
||||||
--- a/repos/os/src/lib/sandbox/child.h
|
--- a/repos/os/src/lib/sandbox/child.h
|
||||||
+++ b/repos/os/src/lib/sandbox/child.h
|
+++ b/repos/os/src/lib/sandbox/child.h
|
||||||
@@ -595,6 +595,7 @@ class Sandbox::Child : Child_policy, Routed_service::Wakeup
|
@@ -594,6 +594,7 @@ class Sandbox::Child : Child_policy, Routed_service::Wakeup
|
||||||
****************************/
|
****************************/
|
||||||
|
|
||||||
Child_policy::Name name() const override { return _unique_name; }
|
Child_policy::Name name() const override { return _unique_name; }
|
||||||
|
@ -750,5 +1119,320 @@ index f9d04cfdaf..a1e45dab0d 100644
|
||||||
Pd_session &ref_pd() override { return _env.pd(); }
|
Pd_session &ref_pd() override { return _env.pd(); }
|
||||||
Pd_session_capability ref_pd_cap() const override { return _env.pd_session_cap(); }
|
Pd_session_capability ref_pd_cap() const override { return _env.pd_session_cap(); }
|
||||||
--
|
--
|
||||||
2.29.2
|
2.30.0
|
||||||
|
|
||||||
|
|
||||||
|
From 0ac7fd14676b451e11b74c9e66f7de265b3ee4e6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
|
Date: Thu, 3 Dec 2020 12:19:10 +0100
|
||||||
|
Subject: [PATCH 10/16] vfs: create missing root directories for writeable
|
||||||
|
sessions
|
||||||
|
|
||||||
|
This is the expected behavior.
|
||||||
|
---
|
||||||
|
repos/os/src/server/vfs/main.cc | 47 ++++++++++++++++++++++++++++++---
|
||||||
|
1 file changed, 43 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/repos/os/src/server/vfs/main.cc b/repos/os/src/server/vfs/main.cc
|
||||||
|
index b780b1fdd7..358afd28a9 100644
|
||||||
|
--- a/repos/os/src/server/vfs/main.cc
|
||||||
|
+++ b/repos/os/src/server/vfs/main.cc
|
||||||
|
@@ -841,6 +841,41 @@ class Vfs_server::Root : public Genode::Root_component<Session_component>,
|
||||||
|
Genode::Signal_transmitter(_reactivate_handler).submit();
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /**
|
||||||
|
+ * Open a directory, ensuring all parent directories exists.
|
||||||
|
+ */
|
||||||
|
+ void _create_session_dir(Path const &path)
|
||||||
|
+ {
|
||||||
|
+ using namespace Genode;
|
||||||
|
+ typedef Vfs::Directory_service::Opendir_result Result;
|
||||||
|
+
|
||||||
|
+ Vfs_handle *handle { nullptr };
|
||||||
|
+ Vfs::File_system &vfs = _vfs_env.root_dir();
|
||||||
|
+
|
||||||
|
+ switch (vfs.opendir(path.string(), true, &handle, _vfs_heap)) {
|
||||||
|
+ case Result::OPENDIR_OK:
|
||||||
|
+ handle->close();
|
||||||
|
+ return;
|
||||||
|
+ case Result::OPENDIR_ERR_NODE_ALREADY_EXISTS:
|
||||||
|
+ if (vfs.directory(path.string())) return;
|
||||||
|
+ break;
|
||||||
|
+ case Result::OPENDIR_ERR_LOOKUP_FAILED: {
|
||||||
|
+ Path parent = path;
|
||||||
|
+ parent.strip_last_element();
|
||||||
|
+ _create_session_dir(parent.string());
|
||||||
|
+ auto res = vfs.opendir(path.string(), true, &handle, _vfs_heap);
|
||||||
|
+ if (res == Result::OPENDIR_OK) {
|
||||||
|
+ handle->close();
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ default: break;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ error("cannot create session root at ", path);
|
||||||
|
+ throw Service_denied();
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
protected:
|
||||||
|
|
||||||
|
Session_component *_create_session(const char *args) override
|
||||||
|
@@ -916,10 +951,14 @@ class Vfs_server::Root : public Genode::Root_component<Session_component>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/* check if the session root exists */
|
||||||
|
- if (!((session_root == "/")
|
||||||
|
- || _vfs_env.root_dir().directory(session_root.base()))) {
|
||||||
|
- error("session root '", session_root, "' not found for '", label, "'");
|
||||||
|
- throw Service_denied();
|
||||||
|
+ if (session_root != "/") {
|
||||||
|
+ if (!_vfs_env.root_dir().directory(session_root.base())) {
|
||||||
|
+ if (writeable) { _create_session_dir(session_root); }
|
||||||
|
+ else {
|
||||||
|
+ error("session root '", session_root, "' not found for '", label, "'");
|
||||||
|
+ throw Service_denied();
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
Session_component *session = new (md_alloc())
|
||||||
|
--
|
||||||
|
2.30.0
|
||||||
|
|
||||||
|
|
||||||
|
From 6842e2d0c2c784d224a9d7bc100e491545b8e5e6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
|
Date: Thu, 28 Jan 2021 13:39:29 +0100
|
||||||
|
Subject: [PATCH 11/16] genode_dyn.ld: do not emit PHDR segment
|
||||||
|
|
||||||
|
Recent version of binutils check that PHDR segments are covered
|
||||||
|
by a LOAD segment. In this case the unloaded PHDR segment can be
|
||||||
|
ommited.
|
||||||
|
---
|
||||||
|
repos/base/src/ld/genode_dyn.ld | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/repos/base/src/ld/genode_dyn.ld b/repos/base/src/ld/genode_dyn.ld
|
||||||
|
index 5fa6ddc29e..57ec92f0f6 100644
|
||||||
|
--- a/repos/base/src/ld/genode_dyn.ld
|
||||||
|
+++ b/repos/base/src/ld/genode_dyn.ld
|
||||||
|
@@ -18,7 +18,6 @@
|
||||||
|
|
||||||
|
PHDRS
|
||||||
|
{
|
||||||
|
- phdr PT_PHDR PHDRS;
|
||||||
|
interp PT_INTERP;
|
||||||
|
ro PT_LOAD;
|
||||||
|
rw PT_LOAD;
|
||||||
|
--
|
||||||
|
2.30.0
|
||||||
|
|
||||||
|
|
||||||
|
From ff8ffb77ccf4238001abd7253c45dece86fe8983 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
|
Date: Wed, 3 Feb 2021 15:20:39 +0100
|
||||||
|
Subject: [PATCH 12/16] vfs: support for loading plugins by label
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Make the VFS plugin recognize <plugin label="…"/> nodes.
|
||||||
|
---
|
||||||
|
repos/os/src/lib/vfs/file_system_factory.cc | 33 ++++++++++++++++-----
|
||||||
|
1 file changed, 26 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/repos/os/src/lib/vfs/file_system_factory.cc b/repos/os/src/lib/vfs/file_system_factory.cc
|
||||||
|
index 5cdf20e8e3..1cf5d587ea 100644
|
||||||
|
--- a/repos/os/src/lib/vfs/file_system_factory.cc
|
||||||
|
+++ b/repos/os/src/lib/vfs/file_system_factory.cc
|
||||||
|
@@ -56,8 +56,16 @@ struct Vfs::Global_file_system_factory::Entry_base : Vfs::File_system_factory,
|
||||||
|
|
||||||
|
Entry_base(Fs_type_name const &name) : name(name) { }
|
||||||
|
|
||||||
|
- bool matches(Genode::Xml_node node) const {
|
||||||
|
- return node.has_type(name.string()); }
|
||||||
|
+ bool matches(Genode::Xml_node node) const
|
||||||
|
+ {
|
||||||
|
+ if (node.has_type(name.string()))
|
||||||
|
+ return true;
|
||||||
|
+
|
||||||
|
+ if (node.has_type("plugin") && node.has_attribute("load"))
|
||||||
|
+ return node.attribute("load").has_value(name.string());
|
||||||
|
+
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@@ -165,14 +173,25 @@ Vfs::File_system_factory &Vfs::Global_file_system_factory::_load_factory(Vfs::En
|
||||||
|
bool Vfs::Global_file_system_factory::_probe_external_factory(Vfs::Env &env,
|
||||||
|
Genode::Xml_node node)
|
||||||
|
{
|
||||||
|
- Library_name const lib_name = _library_name(node.type());
|
||||||
|
-
|
||||||
|
try {
|
||||||
|
- _list.insert(new (env.alloc())
|
||||||
|
- External_entry(node.type().string(), _load_factory(env, lib_name)));
|
||||||
|
- return true;
|
||||||
|
+ if (node.has_type("plugin")) {
|
||||||
|
+ Library_name const lib_name = node.attribute_value("load", Library_name(""));
|
||||||
|
+
|
||||||
|
+ if (lib_name == "") {
|
||||||
|
+ error("missing \"load\" attribute at ", node);
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
+ _list.insert(new (env.alloc())
|
||||||
|
+ External_entry(lib_name.string(), _load_factory(env, lib_name)));
|
||||||
|
+ } else {
|
||||||
|
+ Library_name const lib_name = _library_name(node.type());
|
||||||
|
+
|
||||||
|
+ _list.insert(new (env.alloc())
|
||||||
|
+ External_entry(node.type().string(), _load_factory(env, lib_name)));
|
||||||
|
+ }
|
||||||
|
} catch (Factory_not_available) { return false; }
|
||||||
|
+ return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
2.30.0
|
||||||
|
|
||||||
|
|
||||||
|
From 490fb611ceaad9ae67af35c22ac40dd65ddd7a42 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
|
Date: Wed, 3 Feb 2021 17:33:24 +0100
|
||||||
|
Subject: [PATCH 13/16] vfs: increase the capacity of tar ROM labels to 128
|
||||||
|
|
||||||
|
---
|
||||||
|
repos/os/src/lib/vfs/tar_file_system.h | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/repos/os/src/lib/vfs/tar_file_system.h b/repos/os/src/lib/vfs/tar_file_system.h
|
||||||
|
index d9941deb5f..fcb06a1459 100644
|
||||||
|
--- a/repos/os/src/lib/vfs/tar_file_system.h
|
||||||
|
+++ b/repos/os/src/lib/vfs/tar_file_system.h
|
||||||
|
@@ -27,7 +27,7 @@ class Vfs::Tar_file_system : public File_system
|
||||||
|
Genode::Env &_env;
|
||||||
|
Genode::Allocator &_alloc;
|
||||||
|
|
||||||
|
- typedef Genode::String<64> Rom_name;
|
||||||
|
+ typedef Genode::String<128> Rom_name;
|
||||||
|
Rom_name _rom_name;
|
||||||
|
|
||||||
|
Genode::Attached_rom_dataspace _tar_ds { _env, _rom_name.string() };
|
||||||
|
--
|
||||||
|
2.30.0
|
||||||
|
|
||||||
|
|
||||||
|
From a9900477faf8d9d41dbe3fa59a0b40ce5cab037f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
|
Date: Wed, 10 Feb 2021 13:32:42 +0100
|
||||||
|
Subject: [PATCH 14/16] Detect destroyed argument buffers at Env::session
|
||||||
|
|
||||||
|
Session request arguments are silently zeroed when their length
|
||||||
|
exceedes some buffer size.
|
||||||
|
---
|
||||||
|
repos/base/src/lib/base/component.cc | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/repos/base/src/lib/base/component.cc b/repos/base/src/lib/base/component.cc
|
||||||
|
index 568be31efb..913687ea7f 100644
|
||||||
|
--- a/repos/base/src/lib/base/component.cc
|
||||||
|
+++ b/repos/base/src/lib/base/component.cc
|
||||||
|
@@ -122,6 +122,10 @@ namespace {
|
||||||
|
Affinity const &affinity) override
|
||||||
|
{
|
||||||
|
Mutex::Guard guard(_mutex);
|
||||||
|
+ if (!args.valid_string()) {
|
||||||
|
+ error("invalid args for ", name.string(), " service request");
|
||||||
|
+ throw Service_denied();
|
||||||
|
+ }
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Since we account for the backing store for session meta data on
|
||||||
|
--
|
||||||
|
2.30.0
|
||||||
|
|
||||||
|
|
||||||
|
From d2da7f94d328336ab6ac618ff5779ae8093c5e9d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
|
Date: Thu, 11 Feb 2021 14:10:50 +0100
|
||||||
|
Subject: [PATCH 15/16] Increase session arguments buffer size to 240 bytes
|
||||||
|
|
||||||
|
---
|
||||||
|
repos/base/include/parent/parent.h | 2 +-
|
||||||
|
repos/base/include/root/root.h | 2 +-
|
||||||
|
repos/base/lib/symbols/ld | 2 ++
|
||||||
|
3 files changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/repos/base/include/parent/parent.h b/repos/base/include/parent/parent.h
|
||||||
|
index 7379342e5b..6e94047788 100644
|
||||||
|
--- a/repos/base/include/parent/parent.h
|
||||||
|
+++ b/repos/base/include/parent/parent.h
|
||||||
|
@@ -54,7 +54,7 @@ class Genode::Parent
|
||||||
|
public:
|
||||||
|
|
||||||
|
typedef Rpc_in_buffer<64> Service_name;
|
||||||
|
- typedef Rpc_in_buffer<160> Session_args;
|
||||||
|
+ typedef Rpc_in_buffer<240> Session_args;
|
||||||
|
typedef Rpc_in_buffer<160> Upgrade_args;
|
||||||
|
|
||||||
|
struct Client : Interface { typedef Id_space<Client>::Id Id; };
|
||||||
|
diff --git a/repos/base/include/root/root.h b/repos/base/include/root/root.h
|
||||||
|
index c7e3a0c908..4fda9e341f 100644
|
||||||
|
--- a/repos/base/include/root/root.h
|
||||||
|
+++ b/repos/base/include/root/root.h
|
||||||
|
@@ -29,7 +29,7 @@ namespace Genode {
|
||||||
|
|
||||||
|
struct Genode::Root
|
||||||
|
{
|
||||||
|
- typedef Rpc_in_buffer<160> Session_args;
|
||||||
|
+ typedef Rpc_in_buffer<240> Session_args;
|
||||||
|
typedef Rpc_in_buffer<160> Upgrade_args;
|
||||||
|
|
||||||
|
virtual ~Root() { }
|
||||||
|
diff --git a/repos/base/lib/symbols/ld b/repos/base/lib/symbols/ld
|
||||||
|
index 3cfbdd7466..d7603e8ca4 100644
|
||||||
|
--- a/repos/base/lib/symbols/ld
|
||||||
|
+++ b/repos/base/lib/symbols/ld
|
||||||
|
@@ -398,6 +398,8 @@ _ZThn236_N5Timer10Connection11set_timeoutEN6Genode12MicrosecondsERNS1_15Timeout_
|
||||||
|
_ZThn236_N5Timer10Connection9curr_timeEv T
|
||||||
|
_ZThn288_N5Timer10Connection11set_timeoutEN6Genode12MicrosecondsERNS1_15Timeout_handlerE T
|
||||||
|
_ZThn288_N5Timer10Connection9curr_timeEv T
|
||||||
|
+_ZThn368_N5Timer10Connection11set_timeoutEN6Genode12MicrosecondsERNS1_15Timeout_handlerE T
|
||||||
|
+_ZThn368_N5Timer10Connection9curr_timeEv T
|
||||||
|
_ZThn8_N6Genode17Timeout_scheduler14handle_timeoutENS_8DurationE T
|
||||||
|
_ZThn8_N6Genode17Timeout_schedulerD0Ev T
|
||||||
|
_ZThn8_N6Genode17Timeout_schedulerD1Ev T
|
||||||
|
--
|
||||||
|
2.30.0
|
||||||
|
|
||||||
|
|
||||||
|
From 9b1a5e00ba1fc7fccfec5ba6671c6e80e428f129 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Emery Hemingway <ehmry@posteo.net>
|
||||||
|
Date: Fri, 19 Feb 2021 16:09:23 +0100
|
||||||
|
Subject: [PATCH 16/16] ldso: increase size of library names
|
||||||
|
|
||||||
|
---
|
||||||
|
repos/base/src/lib/ldso/include/config.h | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/repos/base/src/lib/ldso/include/config.h b/repos/base/src/lib/ldso/include/config.h
|
||||||
|
index 5708df0930..db9014a95b 100644
|
||||||
|
--- a/repos/base/src/lib/ldso/include/config.h
|
||||||
|
+++ b/repos/base/src/lib/ldso/include/config.h
|
||||||
|
@@ -58,7 +58,7 @@ class Linker::Config : Noncopyable
|
||||||
|
bool verbose() const { return _verbose; }
|
||||||
|
bool check_ctors() const { return _check_ctors; }
|
||||||
|
|
||||||
|
- typedef String<100> Rom_name;
|
||||||
|
+ typedef String<128> Rom_name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Call fn for each library specified in the configuration
|
||||||
|
--
|
||||||
|
2.30.0
|
||||||
|
|
|
@ -1,176 +0,0 @@
|
||||||
From a3063497d9aaf6bf06a3797804135105ad5f3bad Mon Sep 17 00:00:00 2001
|
|
||||||
From: Emery Hemingway <ehmry@posteo.net>
|
|
||||||
Date: Thu, 3 Dec 2020 12:19:10 +0100
|
|
||||||
Subject: [PATCH 1/3] vfs: create missing root directories for writeable
|
|
||||||
sessions
|
|
||||||
|
|
||||||
This is the expected behavior.
|
|
||||||
---
|
|
||||||
repos/os/src/server/vfs/main.cc | 47 ++++++++++++++++++++++++++++++---
|
|
||||||
1 file changed, 43 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/repos/os/src/server/vfs/main.cc b/repos/os/src/server/vfs/main.cc
|
|
||||||
index b780b1fdd7..358afd28a9 100644
|
|
||||||
--- a/repos/os/src/server/vfs/main.cc
|
|
||||||
+++ b/repos/os/src/server/vfs/main.cc
|
|
||||||
@@ -841,6 +841,41 @@ class Vfs_server::Root : public Genode::Root_component<Session_component>,
|
|
||||||
Genode::Signal_transmitter(_reactivate_handler).submit();
|
|
||||||
}
|
|
||||||
|
|
||||||
+ /**
|
|
||||||
+ * Open a directory, ensuring all parent directories exists.
|
|
||||||
+ */
|
|
||||||
+ void _create_session_dir(Path const &path)
|
|
||||||
+ {
|
|
||||||
+ using namespace Genode;
|
|
||||||
+ typedef Vfs::Directory_service::Opendir_result Result;
|
|
||||||
+
|
|
||||||
+ Vfs_handle *handle { nullptr };
|
|
||||||
+ Vfs::File_system &vfs = _vfs_env.root_dir();
|
|
||||||
+
|
|
||||||
+ switch (vfs.opendir(path.string(), true, &handle, _vfs_heap)) {
|
|
||||||
+ case Result::OPENDIR_OK:
|
|
||||||
+ handle->close();
|
|
||||||
+ return;
|
|
||||||
+ case Result::OPENDIR_ERR_NODE_ALREADY_EXISTS:
|
|
||||||
+ if (vfs.directory(path.string())) return;
|
|
||||||
+ break;
|
|
||||||
+ case Result::OPENDIR_ERR_LOOKUP_FAILED: {
|
|
||||||
+ Path parent = path;
|
|
||||||
+ parent.strip_last_element();
|
|
||||||
+ _create_session_dir(parent.string());
|
|
||||||
+ auto res = vfs.opendir(path.string(), true, &handle, _vfs_heap);
|
|
||||||
+ if (res == Result::OPENDIR_OK) {
|
|
||||||
+ handle->close();
|
|
||||||
+ return;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ default: break;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ error("cannot create session root at ", path);
|
|
||||||
+ throw Service_denied();
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
protected:
|
|
||||||
|
|
||||||
Session_component *_create_session(const char *args) override
|
|
||||||
@@ -916,10 +951,14 @@ class Vfs_server::Root : public Genode::Root_component<Session_component>,
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check if the session root exists */
|
|
||||||
- if (!((session_root == "/")
|
|
||||||
- || _vfs_env.root_dir().directory(session_root.base()))) {
|
|
||||||
- error("session root '", session_root, "' not found for '", label, "'");
|
|
||||||
- throw Service_denied();
|
|
||||||
+ if (session_root != "/") {
|
|
||||||
+ if (!_vfs_env.root_dir().directory(session_root.base())) {
|
|
||||||
+ if (writeable) { _create_session_dir(session_root); }
|
|
||||||
+ else {
|
|
||||||
+ error("session root '", session_root, "' not found for '", label, "'");
|
|
||||||
+ throw Service_denied();
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
Session_component *session = new (md_alloc())
|
|
||||||
--
|
|
||||||
2.30.0
|
|
||||||
|
|
||||||
|
|
||||||
From 0c91101db93422a4ff0aa2407b0ac7610abcf14f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Emery Hemingway <ehmry@posteo.net>
|
|
||||||
Date: Wed, 3 Feb 2021 15:20:39 +0100
|
|
||||||
Subject: [PATCH 2/3] vfs: support for loading plugins by label
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
Make the VFS plugin recognize <plugin label="…"/> nodes.
|
|
||||||
---
|
|
||||||
repos/os/src/lib/vfs/file_system_factory.cc | 33 ++++++++++++++++-----
|
|
||||||
1 file changed, 26 insertions(+), 7 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/repos/os/src/lib/vfs/file_system_factory.cc b/repos/os/src/lib/vfs/file_system_factory.cc
|
|
||||||
index 5cdf20e8e3..1cf5d587ea 100644
|
|
||||||
--- a/repos/os/src/lib/vfs/file_system_factory.cc
|
|
||||||
+++ b/repos/os/src/lib/vfs/file_system_factory.cc
|
|
||||||
@@ -56,8 +56,16 @@ struct Vfs::Global_file_system_factory::Entry_base : Vfs::File_system_factory,
|
|
||||||
|
|
||||||
Entry_base(Fs_type_name const &name) : name(name) { }
|
|
||||||
|
|
||||||
- bool matches(Genode::Xml_node node) const {
|
|
||||||
- return node.has_type(name.string()); }
|
|
||||||
+ bool matches(Genode::Xml_node node) const
|
|
||||||
+ {
|
|
||||||
+ if (node.has_type(name.string()))
|
|
||||||
+ return true;
|
|
||||||
+
|
|
||||||
+ if (node.has_type("plugin") && node.has_attribute("load"))
|
|
||||||
+ return node.attribute("load").has_value(name.string());
|
|
||||||
+
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
@@ -165,14 +173,25 @@ Vfs::File_system_factory &Vfs::Global_file_system_factory::_load_factory(Vfs::En
|
|
||||||
bool Vfs::Global_file_system_factory::_probe_external_factory(Vfs::Env &env,
|
|
||||||
Genode::Xml_node node)
|
|
||||||
{
|
|
||||||
- Library_name const lib_name = _library_name(node.type());
|
|
||||||
-
|
|
||||||
try {
|
|
||||||
- _list.insert(new (env.alloc())
|
|
||||||
- External_entry(node.type().string(), _load_factory(env, lib_name)));
|
|
||||||
- return true;
|
|
||||||
+ if (node.has_type("plugin")) {
|
|
||||||
+ Library_name const lib_name = node.attribute_value("load", Library_name(""));
|
|
||||||
+
|
|
||||||
+ if (lib_name == "") {
|
|
||||||
+ error("missing \"load\" attribute at ", node);
|
|
||||||
+ return false;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
+ _list.insert(new (env.alloc())
|
|
||||||
+ External_entry(lib_name.string(), _load_factory(env, lib_name)));
|
|
||||||
+ } else {
|
|
||||||
+ Library_name const lib_name = _library_name(node.type());
|
|
||||||
+
|
|
||||||
+ _list.insert(new (env.alloc())
|
|
||||||
+ External_entry(node.type().string(), _load_factory(env, lib_name)));
|
|
||||||
+ }
|
|
||||||
} catch (Factory_not_available) { return false; }
|
|
||||||
+ return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
2.30.0
|
|
||||||
|
|
||||||
|
|
||||||
From d2b15cb52415d18b9611862d9d184effc596bba6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Emery Hemingway <ehmry@posteo.net>
|
|
||||||
Date: Wed, 3 Feb 2021 17:33:24 +0100
|
|
||||||
Subject: [PATCH 3/3] vfs: increase the capacity of tar ROM labels to 128
|
|
||||||
|
|
||||||
---
|
|
||||||
repos/os/src/lib/vfs/tar_file_system.h | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/repos/os/src/lib/vfs/tar_file_system.h b/repos/os/src/lib/vfs/tar_file_system.h
|
|
||||||
index d9941deb5f..fcb06a1459 100644
|
|
||||||
--- a/repos/os/src/lib/vfs/tar_file_system.h
|
|
||||||
+++ b/repos/os/src/lib/vfs/tar_file_system.h
|
|
||||||
@@ -27,7 +27,7 @@ class Vfs::Tar_file_system : public File_system
|
|
||||||
Genode::Env &_env;
|
|
||||||
Genode::Allocator &_alloc;
|
|
||||||
|
|
||||||
- typedef Genode::String<64> Rom_name;
|
|
||||||
+ typedef Genode::String<128> Rom_name;
|
|
||||||
Rom_name _rom_name;
|
|
||||||
|
|
||||||
Genode::Attached_rom_dataspace _tar_ds { _env, _rom_name.string() };
|
|
||||||
--
|
|
||||||
2.30.0
|
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
From 3898cf557ada28312731292074a8a09621d45abb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Emery Hemingway <ehmry@posteo.net>
|
|
||||||
Date: Sat, 7 Nov 2020 13:49:41 +0100
|
|
||||||
Subject: [PATCH] init: log error when configuration cannot be parsed
|
|
||||||
|
|
||||||
---
|
|
||||||
repos/os/src/init/main.cc | 4 ++++
|
|
||||||
1 file changed, 4 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/repos/os/src/init/main.cc b/repos/os/src/init/main.cc
|
|
||||||
index 7b69c95721..f1c1a1435a 100644
|
|
||||||
--- a/repos/os/src/init/main.cc
|
|
||||||
+++ b/repos/os/src/init/main.cc
|
|
||||||
@@ -47,6 +47,10 @@ struct Init::Main : Sandbox::State_handler
|
|
||||||
_config.update();
|
|
||||||
|
|
||||||
Xml_node const config = _config.xml();
|
|
||||||
+ if (config.has_type("empty")) {
|
|
||||||
+ error("failed to parse config ROM");
|
|
||||||
+ return;
|
|
||||||
+ };
|
|
||||||
|
|
||||||
bool reporter_enabled = false;
|
|
||||||
config.with_sub_node("report", [&] (Xml_node report) {
|
|
||||||
--
|
|
||||||
2.28.0
|
|
||||||
|
|
Loading…
Reference in New Issue