--- busybox-1.21.0/archival/tar.c	2013-01-14 01:32:12.000000000 +0100
+++ src/archival/tar.c	2023-07-11 12:58:29.925237281 +0200
@@ -761,7 +761,7 @@
 //)
 
 enum {
-	OPTBIT_KEEP_OLD = 8,
+	OPTBIT_KEEP_OLD = 9,
 	IF_FEATURE_TAR_CREATE(   OPTBIT_CREATE      ,)
 	IF_FEATURE_TAR_CREATE(   OPTBIT_DEREFERENCE ,)
 	IF_FEATURE_SEAMLESS_BZ2( OPTBIT_BZIP2       ,)
@@ -788,6 +788,7 @@
 	OPT_P            = 1 << 6, // p
 	OPT_VERBOSE      = 1 << 7, // v
 	OPT_KEEP_OLD     = 1 << 8, // k
+	OPT_CHROOT       = 1 << 9, // S
 	OPT_CREATE       = IF_FEATURE_TAR_CREATE(   (1 << OPTBIT_CREATE      )) + 0, // c
 	OPT_DEREFERENCE  = IF_FEATURE_TAR_CREATE(   (1 << OPTBIT_DEREFERENCE )) + 0, // h
 	OPT_BZIP2        = IF_FEATURE_SEAMLESS_BZ2( (1 << OPTBIT_BZIP2       )) + 0, // j
@@ -820,6 +821,7 @@
 	"same-permissions\0"    No_argument       "p"
 	"verbose\0"             No_argument       "v"
 	"keep-old\0"            No_argument       "k"
+	"chroot\0"            Required_argument       "S"
 # if ENABLE_FEATURE_TAR_CREATE
 	"create\0"              No_argument       "c"
 	"dereference\0"         No_argument       "h"
@@ -869,6 +871,7 @@
 {
 	archive_handle_t *tar_handle;
 	char *base_dir = NULL;
+	char *chroot_dir = NULL;
 	const char *tar_filename = "-";
 	unsigned opt;
 	int verboseFlag = 0;
@@ -927,7 +930,7 @@
 	}
 #endif
 	opt = getopt32(argv,
-		"txC:f:Oopvk"
+		"txC:f:OopvkS:"
 		IF_FEATURE_TAR_CREATE(   "ch"  )
 		IF_FEATURE_SEAMLESS_BZ2( "j"   )
 		IF_FEATURE_SEAMLESS_LZMA("a"   )
@@ -938,6 +941,7 @@
 		IF_FEATURE_TAR_NOPRESERVE_TIME("m")
 		, &base_dir // -C dir
 		, &tar_filename // -f filename
+		, &chroot_dir // -S dir
 		IF_FEATURE_TAR_FROM(, &(tar_handle->accept)) // T
 		IF_FEATURE_TAR_FROM(, &(tar_handle->reject)) // X
 		IF_FEATURE_TAR_TO_COMMAND(, &(tar_handle->tar__to_command)) // --to-command
@@ -1014,6 +1018,9 @@
 	if (tar_handle->accept || tar_handle->reject)
 		tar_handle->filter = filter_accept_reject_list;
 
+	if (chroot_dir)
+		xchroot(chroot_dir);
+
 	/* Open the tar file */
 	{
 		int tar_fd = STDIN_FILENO;
