From c3145c1a5de22212e7d771361b23b71235cef4a7 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Tue, 29 May 2012 10:15:42 +0200 Subject: [PATCH] Fiasco.OC: fix l4_caps_equal kernel patch A kernel capability that is invalid has no kobject pointer, so check whether it's valid beforehand --- base-foc/patches/foc_caps_equal.patch | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/base-foc/patches/foc_caps_equal.patch b/base-foc/patches/foc_caps_equal.patch index fa4da4e43..3ff01e056 100644 --- a/base-foc/patches/foc_caps_equal.patch +++ b/base-foc/patches/foc_caps_equal.patch @@ -2,12 +2,19 @@ Index: kernel/fiasco/src/kern/task.cpp =================================================================== --- kernel/fiasco/src/kern/task.cpp (revision 38) +++ kernel/fiasco/src/kern/task.cpp (working copy) -@@ -511,7 +511,7 @@ - Obj_space::Capability c_a = obj_space()->lookup(obj_a.cap()); - Obj_space::Capability c_b = obj_space()->lookup(obj_b.cap()); +@@ -508,10 +508,12 @@ + if (obj_a.special() || obj_b.special()) + return commit_result(obj_a.special_cap() == obj_b.special_cap()); + +- Obj_space::Capability c_a = obj_space()->lookup(obj_a.cap()); +- Obj_space::Capability c_b = obj_space()->lookup(obj_b.cap()); ++ Kobject_iface* ki_a = obj_space()->lookup(obj_a.cap()).obj(); ++ Kobject_iface* ki_b = obj_space()->lookup(obj_b.cap()).obj(); ++ Address a_a = ki_a ? ki_a->kobject_start_addr() : 0; ++ Address a_b = ki_b ? ki_b->kobject_start_addr() : 0; - return commit_result(c_a == c_b); -+ return commit_result(c_a.obj()->kobject_start_addr() == c_b.obj()->kobject_start_addr()); ++ return commit_result(a_a == a_b); } PRIVATE inline NOEXPORT