mirror of
https://github.com/privatevoid-net/nix-super.git
synced 2024-11-25 23:36:16 +02:00
commit
859e55d1e8
3 changed files with 13 additions and 6 deletions
|
@ -580,7 +580,12 @@ struct curlFileTransfer : public FileTransfer
|
|||
#endif
|
||||
|
||||
#if __linux__
|
||||
unshareFilesystem();
|
||||
try {
|
||||
tryUnshareFilesystem();
|
||||
} catch (nix::Error & e) {
|
||||
e.addTrace({}, "in download thread");
|
||||
throw;
|
||||
}
|
||||
#endif
|
||||
|
||||
std::map<CURL *, std::shared_ptr<TransferItem>> items;
|
||||
|
|
|
@ -137,10 +137,10 @@ void restoreMountNamespace()
|
|||
}
|
||||
}
|
||||
|
||||
void unshareFilesystem()
|
||||
void tryUnshareFilesystem()
|
||||
{
|
||||
if (unshare(CLONE_FS) != 0 && errno != EPERM)
|
||||
throw SysError("unsharing filesystem state in download thread");
|
||||
if (unshare(CLONE_FS) != 0 && errno != EPERM && errno != ENOSYS)
|
||||
throw SysError("unsharing filesystem state");
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
||||
|
|
Loading…
Reference in a new issue