diff --git a/platform/linux-generic/_ishm.c b/platform/linux-generic/_ishm.c
index 449e357..8b32709 100644
--- a/platform/linux-generic/_ishm.c
+++ b/platform/linux-generic/_ishm.c
@@ -124,7 +124,9 @@
 #define EXPORT_FILE_LINE3_FMT "file: %s"
 #define EXPORT_FILE_LINE4_FMT "length: %" PRIu64
 #define EXPORT_FILE_LINE5_FMT "flags: %" PRIu32
-#define EXPORT_FILE_LINE6_FMT "align: %" PRIu32
+#define EXPORT_FILE_LINE6_FMT "user_length: %" PRIu64
+#define EXPORT_FILE_LINE7_FMT "user_flags: %" PRIu32
+#define EXPORT_FILE_LINE8_FMT "align: %" PRIu32
 /*
  * A fragment describes a piece of the shared virtual address space,
  * and is allocated only when allocation is done with the _ODP_ISHM_SINGLE_VA
@@ -477,7 +479,11 @@ static int create_file(int block_index, huge_flag_t huge, uint64_t len,
 				new_block->filename);
 			fprintf(export_file, EXPORT_FILE_LINE4_FMT "\n", len);
 			fprintf(export_file, EXPORT_FILE_LINE5_FMT "\n", flags);
-			fprintf(export_file, EXPORT_FILE_LINE6_FMT "\n", align);
+			fprintf(export_file, EXPORT_FILE_LINE6_FMT "\n",
+				new_block->user_len);
+			fprintf(export_file, EXPORT_FILE_LINE7_FMT "\n",
+				new_block->user_flags);
+			fprintf(export_file, EXPORT_FILE_LINE8_FMT "\n", align);
 
 			fclose(export_file);
 		}
@@ -800,6 +806,10 @@ int _odp_ishm_reserve(const char *name, uint64_t size, int fd,
 	else
 		new_block->name[0] = 0;
 
+	/* save user data: */
+	new_block->user_flags = user_flags;
+	new_block->user_len = size;
+
 	/* If a file descriptor is provided, get the real size and map: */
 	if (fd >= 0) {
 		fstat(fd, &statbuf);
@@ -911,9 +921,11 @@ int _odp_ishm_find_exported(const char *remote_name, pid_t external_odp_pid,
 	FILE *export_file;
 	uint64_t len;
 	uint32_t flags;
+	uint64_t user_len;
+	uint32_t user_flags;
 	uint32_t align;
 	int fd;
-	int ret;
+	int block_index;
 
 	/* try to read the block description file: */
 	snprintf(export_filename, ISHM_FILENAME_MAXLEN,
@@ -943,7 +955,13 @@ int _odp_ishm_find_exported(const char *remote_name, pid_t external_odp_pid,
 	if (fscanf(export_file, EXPORT_FILE_LINE5_FMT " ", &flags) != 1)
 		goto error_exp_file;
 
-	if (fscanf(export_file, EXPORT_FILE_LINE6_FMT " ", &align) != 1)
+	if (fscanf(export_file, EXPORT_FILE_LINE6_FMT " ", &user_len) != 1)
+		goto error_exp_file;
+
+	if (fscanf(export_file, EXPORT_FILE_LINE7_FMT " ", &user_flags) != 1)
+		goto error_exp_file;
+
+	if (fscanf(export_file, EXPORT_FILE_LINE8_FMT " ", &align) != 1)
 		goto error_exp_file;
 
 	fclose(export_file);
@@ -960,13 +978,17 @@ int _odp_ishm_find_exported(const char *remote_name, pid_t external_odp_pid,
 	flags &= ~(uint32_t)_ODP_ISHM_EXPORT;
 
 	/* reserve the memory, providing the opened file descriptor: */
-	ret = _odp_ishm_reserve(local_name, 0, fd, align, flags, 0);
-	if (ret < 0) {
+	block_index = _odp_ishm_reserve(local_name, 0, fd, align, flags, 0);
+	if (block_index < 0) {
 		close(fd);
-		return ret;
+		return block_index;
 	}
 
-	return ret;
+	/* set inherited info: */
+	ishm_tbl->block[block_index].user_flags = user_flags;
+	ishm_tbl->block[block_index].user_len = user_len;
+
+	return block_index;
 
 error_exp_file:
 	fclose(export_file);
diff --git a/test/linux-generic/validation/api/shmem/shmem_linux.c b/test/linux-generic/validation/api/shmem/shmem_linux.c
index 39473f3..2f4c762 100644
--- a/test/linux-generic/validation/api/shmem/shmem_linux.c
+++ b/test/linux-generic/validation/api/shmem/shmem_linux.c
@@ -102,7 +102,8 @@
  */
 static int read_shmem_attribues(uint64_t ext_odp_pid, const char *blockname,
 				char *filename, uint64_t *len,
-				uint32_t *flags, uint32_t *align)
+				uint32_t *flags, uint64_t *user_len,
+				uint32_t *user_flags, uint32_t *align)
 {
 	char shm_attr_filename[PATH_MAX];
 	FILE *export_file;
@@ -130,6 +131,12 @@ static int read_shmem_attribues(uint64_t ext_odp_pid, const char *blockname,
 	if (fscanf(export_file, "flags: %" PRIu32 " ", flags) != 1)
 		goto export_file_read_err;
 
+	if (fscanf(export_file, "user_length: %" PRIu64 " ", user_len) != 1)
+		goto export_file_read_err;
+
+	if (fscanf(export_file, "user_flags: %" PRIu32 " ", user_flags) != 1)
+		goto export_file_read_err;
+
 	if (fscanf(export_file, "align: %" PRIu32 " ", align) != 1)
 		goto export_file_read_err;
 
@@ -192,6 +199,8 @@ int main(int argc __attribute__((unused)), char *argv[])
 	char shm_filename[PATH_MAX];/* shared mem device name, under /dev/shm */
 	uint64_t len;
 	uint32_t flags;
+	uint64_t user_len;
+	uint32_t user_flags;
 	uint32_t align;
 	int shm_fd;
 	test_shared_linux_data_t *addr;
@@ -231,7 +240,8 @@ int main(int argc __attribute__((unused)), char *argv[])
 
 	/* read the shared memory attributes (includes the shm filename): */
 	if (read_shmem_attribues(odp_app1, ODP_SHM_NAME,
-				 shm_filename, &len, &flags, &align) != 0)
+				 shm_filename, &len, &flags,
+				 &user_len, &user_flags, &align) != 0)
 		test_failure(fifo_name, fifo_fd, odp_app1);
 
 	/* open the shm filename (which is either on /tmp or on hugetlbfs)
