bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

settrans: (os/kern) invalid right


From: Sergey Bugaev
Subject: settrans: (os/kern) invalid right
Date: Fri, 7 May 2021 15:41:17 +0300

Hello yet again,

I'm hitting the following issue when trying to re-set a translator on
a node whose translator has previously died:

$ settrans -acP /tmp/yes ~/dev-yes/hurd/yes
Translator pid: 1039
Pausing...
$ kill 1039
$ settrans -ag /tmp/yes ~/dev-yes/hurd/yes
settrans: /tmp/yes: (os/kern) invalid right

I've traced it to fshelp_fetch_control () returning KERN_INVALID_RIGHT
when the control right of the previously set translator turns out to
be a dead name. fshelp_fetch_control () actually handles this case
with a specific code path which resets the stored port to
MACH_PORT_NULL, but it returns an error nevertheless.

Digging up git history, the two relevant commits are [0] and [1].
Commit [0] introduces this special handling for dead names, and
actually tries to deallocate the dead name and return 0 +
MACH_PORT_NULL from the fshelp_fetch_control () call. Commit [1]
reverts a part of this logic: fshelp_fetch_control () no longer tries
to deallocate the dead name (so the task keeps it forever?..), and no
longer returns 0 to the caller, propagating KERN_INVALID_RIGHT
instead. Which is the source of the error I'm seeing.

Indeed, reverting [1] seems to fix my issue.

I don't think I understand the reasoning behind [1]. Perhaps I'm
missing something?

Sergey

[0]: 
http://git.savannah.gnu.org/cgit/hurd/hurd.git/commit/?id=3319f7f6a238cf88b9f46849e7be84d3c96376d6
[1]: 
http://git.savannah.gnu.org/cgit/hurd/hurd.git/commit/?id=7b9011628ec0dea3e01b19b75013ce5cf5b9c841



reply via email to

[Prev in Thread] Current Thread [Next in Thread]