commit 8893c358ed7e594355d4d82ea51196b4169e77a2 Author: Jacob Welsh AuthorDate: Tue Apr 23 18:53:33 2024 +0000 Commit: Jacob Welsh CommitDate: Tue Apr 23 18:53:33 2024 +0000 busybox/archival: hopefully fix SELinux context restoration (untested) Defer setfscreatecon() until after creating parent directories, as we probably don't want to give them the context intended for the leaf file. diff --git a/base/busybox/archival/libarchive/data_extract_all.c b/base/busybox/archival/libarchive/data_extract_all.c index 0dde95f..9e5cd45 100644 --- a/base/busybox/archival/libarchive/data_extract_all.c +++ b/base/busybox/archival/libarchive/data_extract_all.c @@ -18,11 +18,6 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) char *sctx = archive_handle->tar__sctx[PAX_NEXT_FILE]; if (!sctx) sctx = archive_handle->tar__sctx[PAX_GLOBAL]; - if (sctx) { /* setfscreatecon is 4 syscalls, avoid if possible */ - setfscreatecon(sctx); - free(archive_handle->tar__sctx[PAX_NEXT_FILE]); - archive_handle->tar__sctx[PAX_NEXT_FILE] = NULL; - } #endif /* Walk the path, validating and creating dirs as needed. */ @@ -144,6 +139,14 @@ void FAST_FUNC data_extract_all(archive_handle_t *archive_handle) } } +#if ENABLE_FEATURE_TAR_SELINUX + if (sctx) { /* setfscreatecon is 4 syscalls, avoid if possible */ + setfscreatecon(sctx); + free(archive_handle->tar__sctx[PAX_NEXT_FILE]); + archive_handle->tar__sctx[PAX_NEXT_FILE] = NULL; + } +#endif + /* Create the filesystem entry */ switch (file_header->mode & S_IFMT) { case S_IFREG: {