Merge pull request #10758 from obsidiansystems/fix-10747

Fix #10747
This commit is contained in:
John Ericson 2024-05-22 16:59:39 -04:00 committed by GitHub
commit 859e55d1e8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 13 additions and 6 deletions

View file

@ -580,7 +580,12 @@ struct curlFileTransfer : public FileTransfer
#endif #endif
#if __linux__ #if __linux__
unshareFilesystem(); try {
tryUnshareFilesystem();
} catch (nix::Error & e) {
e.addTrace({}, "in download thread");
throw;
}
#endif #endif
std::map<CURL *, std::shared_ptr<TransferItem>> items; std::map<CURL *, std::shared_ptr<TransferItem>> items;

View file

@ -137,10 +137,10 @@ 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 in download thread"); throw SysError("unsharing filesystem state");
} }
} }

View file

@ -20,11 +20,13 @@ void saveMountNamespace();
void restoreMountNamespace(); 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 * thread, because this causes setns() in restoreMountNamespace() to
* fail. * fail.
*
* This is best effort -- EPERM and ENOSYS failures are just ignored.
*/ */
void unshareFilesystem(); void tryUnshareFilesystem();
bool userNamespacesSupported(); bool userNamespacesSupported();