--- util-linux/mount.c
+++ util-linux/mount.c
@@ -153,6 +153,7 @@
 //usage:     "\n-o OPT:"
 //usage:	IF_FEATURE_MOUNT_LOOP(
 //usage:     "\n	loop		Ignored (loop devices are autodetected)"
+//usage:     "\n	offset=OFS	The data start is moved OFS bytes into the specified file or device"
 //usage:	)
 //usage:	IF_FEATURE_MOUNT_FLAGS(
 //usage:     "\n	[a]sync		Writes are [a]synchronous"
@@ -328,6 +329,7 @@
 
 	IF_FEATURE_MOUNT_LOOP(
 		/* "loop" */ 0,
+		/* "offset=" */ 0,
 	)
 
 	IF_FEATURE_MOUNT_FSTAB(
@@ -389,6 +391,7 @@
 static const char mount_option_str[] ALIGN1 =
 	IF_FEATURE_MOUNT_LOOP(
 		"loop\0"
+		"offset=\0"
 	)
 	IF_FEATURE_MOUNT_FSTAB(
 		"defaults\0"
@@ -577,7 +580,7 @@
 
 // Use the mount_options list to parse options into flags.
 // Also update list of unrecognized options if unrecognized != NULL
-static unsigned long parse_mount_options(char *options, char **unrecognized)
+static unsigned long parse_mount_options(char *options, char **unrecognized, unsigned long long *loopOffset)
 {
 	unsigned long flags = MS_SILENT;
 
@@ -596,8 +599,8 @@
 
 			if (strncasecmp(option_str, options, opt_len) == 0
 			 && (options[opt_len] == '\0'
-			    /* or is it "comment=" thingy in fstab? */
-			    IF_FEATURE_MOUNT_FSTAB(IF_DESKTOP( || option_str[opt_len-1] == '=' ))
+			    /* or is it "comment=" thingy in fstab? or "offset=" loop option? */
+			    || ( ((ENABLE_FEATURE_MOUNT_FSTAB && ENABLE_DESKTOP) || ENABLE_FEATURE_MOUNT_LOOP) && option_str[opt_len-1] == '=' )
 			    )
 			) {
 				unsigned long fl = mount_options[i];
@@ -605,6 +608,12 @@
 					flags &= fl;
 				else
 					flags |= fl;
+
+				if (ENABLE_FEATURE_MOUNT_LOOP && loopOffset) {
+					if (strncasecmp(options, "offset=", 7) == 0)
+						*loopOffset = xatoull(options+7);
+				}
+
 				goto found;
 			}
 			option_str += opt_len + 1;
@@ -1892,12 +1901,13 @@
 	int rc = -1;
 	unsigned long vfsflags;
 	char *loopFile = NULL, *filteropts = NULL;
+	unsigned long long loopOffset = 0;
 	llist_t *fl = NULL;
 	struct stat st;
 
 	errno = 0;
 
-	vfsflags = parse_mount_options(mp->mnt_opts, &filteropts);
+	vfsflags = parse_mount_options(mp->mnt_opts, &filteropts, &loopOffset);
 
 	// Treat fstype "auto" as unspecified
 	if (mp->mnt_type && strcmp(mp->mnt_type, "auto") == 0)
@@ -1971,7 +1981,7 @@
 				len, share,
 				share + len + 1  /* "dir1/dir2" */
 			);
-			parse_mount_options(unc, &filteropts);
+			parse_mount_options(unc, &filteropts, NULL);
 			if (ENABLE_FEATURE_CLEAN_UP) free(unc);
 		}
 
@@ -1997,7 +2007,7 @@
 // (instead of _numeric_ iface_id) with glibc.
 // This probably should be fixed in glibc, not here.
 // The workaround is to manually specify correct "ip=ADDR%n" option.
-			parse_mount_options(ip, &filteropts);
+			parse_mount_options(ip, &filteropts, NULL);
 			if (ENABLE_FEATURE_CLEAN_UP) free(ip);
 		}
 
@@ -2037,7 +2047,7 @@
 			// Subject: Allow auto-destruction of loop devices
 			loopfd = set_loop(&mp->mnt_fsname,
 					loopFile,
-					0,
+					loopOffset,
 					((vfsflags & MS_RDONLY) ? BB_LO_FLAGS_READ_ONLY : 0)
 						| BB_LO_FLAGS_AUTOCLEAR
 			);
@@ -2262,7 +2272,7 @@
 	// Past this point, we are handling either "mount -a [opts]"
 	// or "mount [opts] single_param"
 
-	cmdopt_flags = parse_mount_options(cmdopts, NULL);
+	cmdopt_flags = parse_mount_options(cmdopts, NULL, NULL);
 	if (nonroot && (cmdopt_flags & ~MS_SILENT)) // Non-root users cannot specify flags
 		bb_error_msg_and_die(bb_msg_you_must_be_root);
 
@@ -2336,7 +2346,7 @@
 				continue;
 
 			// Skip noauto and swap anyway
-			if ((parse_mount_options(mtcur->mnt_opts, NULL) & (MOUNT_NOAUTO | MOUNT_SWAP))
+			if ((parse_mount_options(mtcur->mnt_opts, NULL, NULL) & (MOUNT_NOAUTO | MOUNT_SWAP))
 			// swap is bogus "fstype", parse_mount_options can't check fstypes
 			 || strcasecmp(mtcur->mnt_type, "swap") == 0
 			) {
@@ -2397,7 +2407,7 @@
 		// exit_group(32)                          = ?
 #if 0
 		// In case we want to simply skip swap partitions:
-		l = parse_mount_options(mtcur->mnt_opts, NULL);
+		l = parse_mount_options(mtcur->mnt_opts, NULL, NULL);
 		if ((l & MOUNT_SWAP)
 		// swap is bogus "fstype", parse_mount_options can't check fstypes
 		 || strcasecmp(mtcur->mnt_type, "swap") == 0
@@ -2407,7 +2417,7 @@
 #endif
 		if (nonroot) {
 			// fstab must have "users" or "user"
-			l = parse_mount_options(mtcur->mnt_opts, NULL);
+			l = parse_mount_options(mtcur->mnt_opts, NULL, NULL);
 			if (!(l & MOUNT_USERS))
 				bb_error_msg_and_die(bb_msg_you_must_be_root);
 		}
