tryUnshareFilesystem: Ignore ENOSYS too

Fixes #10747
This commit is contained in:
John Ericson 2024-05-22 16:04:40 -04:00
parent d5fdfdc592
commit dc7615dbbb
3 changed files with 7 additions and 5 deletions

View file

@ -581,7 +581,7 @@ struct curlFileTransfer : public FileTransfer
#if __linux__
try {
unshareFilesystem();
tryUnshareFilesystem();
} catch (nix::Error & e) {
e.addTrace({}, "in download thread");
throw;

View file

@ -137,9 +137,9 @@ void restoreMountNamespace()
}
}
void unshareFilesystem()
void tryUnshareFilesystem()
{
if (unshare(CLONE_FS) != 0 && errno != EPERM)
if (unshare(CLONE_FS) != 0 && errno != EPERM && errno != ENOSYS)
throw SysError("unsharing filesystem state");
}

View file

@ -20,11 +20,13 @@ void saveMountNamespace();
void restoreMountNamespace();
/**
* Cause this thread to not share any FS attributes with the main
* Cause this thread to try to not share any FS attributes with the main
* thread, because this causes setns() in restoreMountNamespace() to
* fail.
*
* This is best effort -- EPERM and ENOSYS failures are just ignored.
*/
void unshareFilesystem();
void tryUnshareFilesystem();
bool userNamespacesSupported();