NOVA: Capability selectors cause call of invalid portal

Alexander Boettcher alexander.boettcher at ...1...
Tue Jul 31 09:33:33 CEST 2012


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Hello,

some more comments.

On 30.07.2012 19:19, Markus Partheymueller wrote:
> for RPC reach numbers >= 0x100000, RPC calls fail because of calls
> to

the kernel does only support cap selectors up to 1 << 24 (which is
0x1000000), however selectors only up to 1 << 20 (which is 0x100000)
as base can be mapped/delegated. (There are only 20 bit available for
the base of the capability range descripter, see also the NOVA kernel
specification, section - 4.3.4 Object Capability Range Descriptor).

Effectively that means that every cap created at indexes above 1 << 20
can't be delegated. For me it looks like that you create (and close)
timer sessions often enough that you may run into the problem you
described. (As described by issue 247 no caps are ever freed or
reused, which is the actually the root problem.)

> In base/include/base/rpc_client.h, I inserted a debug statement 
> showing that the "internal" portal being called is 0x82260. I
> think this is due to the translation between global capability
> selectors and NOVA portals, is that correct?

In Genode at ...127... indeed global ids are used, however they are not
called at all. The global ids are only used to lookup objects inside
services.

To be more specific: In the Genode in the
base/include/base/native_capability.h there exists the Dst and
local_name member. Dst is used in base-nova actual as portal selector,
whereas local_name is used to held the global id.

> When the internal IDs hit 0x100000, what happens is this:
> 
> [ 0] EC:0xc0019f00 SYS_CREATE PT:0x30e6 EC:0xa7 EIP:0x139950 [ 0]
> EC:0xc0019f00 SYS_CREATE PT:0x30e7 EC:0xa7 EIP:0x1398d0 [ 0]
> EC:0xc0019f00 SYS_CREATE PT:0x30e8 EC:0xa7 EIP:0x139950 [ 0]
> EC:0xc0019f00 SYS_CREATE PT:0x30e9 EC:0xa7 EIP:0x1398d0

This looks strange, at least the creation of portals at indexes above
0x100000 should be no problem. I created caps above 0x100000 here in a
test case at Genode at ...127... and I don't see this behavior. For creation
of portals you should be able to specify up to indexes up to 1 << 24.

> Right now I'm quite lost in all that RPC and Capability wrangling. 
> Maybe someone can shed some light on this? How is that translation 
> between internal IDs and NOVA portals done, anyway?

The global ids are scheduled for removal from Genode soon.

In issue 268 [0] they are already gone. Additionally unused cap
selectors are actually really freed if used together with the solution
from issue 247.

For me your described problem didn't occur anymore when using [0] and
[1].

Cheers,

Alex.

[0] https://github.com/genodelabs/genode/issues/268
[1] https://github.com/genodelabs/genode/issues/247
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAlAXikwACgkQqjRK9KYzJbNq4gCg40kErZ3ytatU8pxgqViVqMit
XXYAoLmloZrcSwngyVfazP10hMGFsNis
=05zF
-----END PGP SIGNATURE-----




More information about the users mailing list