Caps: fix l4_task_cap_equal semantic.

The syscall l4_task_cap_equal almost returns false although the referenced
kernel-objects are equal. This patch changes the semantic of the syscall so that
whenever two capabilities refering the same kernel-object are compared it will
return true. Please refer to the discussion of the following mail thread:
http://www.mail-archive.com/l4-hackers@os.inf.tu-dresden.de/msg05162.html

Was 'foc_caps_equal.patch'
This commit is contained in:
Sebastian Sumpf
2013-01-11 17:14:26 +01:00
parent 0b7d91f663
commit d6ec37874b

View File

@@ -494,10 +494,12 @@ Task::sys_caps_equal(Syscall_frame *, Utcb *utcb)
if (obj_a.special() || obj_b.special())
return commit_result(obj_a.special_cap() == obj_b.special_cap());
Obj_space::Capability c_a = lookup(obj_a.cap());
Obj_space::Capability c_b = lookup(obj_b.cap());
Kobject_iface* ki_a = lookup(obj_a.cap()).obj();
Kobject_iface* ki_b = 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(a_a == a_b);
}
PRIVATE inline NOEXPORT