[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
- settrans: (os/kern) invalid right,
Sergey Bugaev <=