Index: uspace/srv/bd/hr/hr.c
===================================================================
--- uspace/srv/bd/hr/hr.c	(revision 1162b6c8ace3bf1d17e6ff1a6f574ecb997ee817)
+++ uspace/srv/bd/hr/hr.c	(revision 15e51b05f97c4d8273ff4f17df1733fd4adffe26)
@@ -110,4 +110,12 @@
 		async_answer_0(&call, rc);
 		async_answer_0(icall, rc);
+		return;
+	}
+
+	if (cfg->dev_no > HR_MAX_EXTENTS) {
+		HR_ERROR("provided %u devices (max = %u)",
+		    (unsigned)cfg->dev_no, HR_MAX_EXTENTS);
+		free(cfg);
+		async_answer_0(icall, ELIMIT);
 		return;
 	}
Index: uspace/srv/bd/hr/metadata/foreign/geom/hr_g_stripe.c
===================================================================
--- uspace/srv/bd/hr/metadata/foreign/geom/hr_g_stripe.c	(revision 1162b6c8ace3bf1d17e6ff1a6f574ecb997ee817)
+++ uspace/srv/bd/hr/metadata/foreign/geom/hr_g_stripe.c	(revision 15e51b05f97c4d8273ff4f17df1733fd4adffe26)
@@ -168,5 +168,5 @@
 	vol->data_offset = 0;
 
-	if (main_meta->md_all > HR_MAX_EXTENTS) {
+	if (vol->extent_no > HR_MAX_EXTENTS) {
 		HR_DEBUG("Assembled volume has %u extents (max = %u)",
 		    (unsigned)main_meta->md_all, HR_MAX_EXTENTS);
Index: uspace/srv/bd/hr/metadata/native.c
===================================================================
--- uspace/srv/bd/hr/metadata/native.c	(revision 1162b6c8ace3bf1d17e6ff1a6f574ecb997ee817)
+++ uspace/srv/bd/hr/metadata/native.c	(revision 15e51b05f97c4d8273ff4f17df1733fd4adffe26)
@@ -189,4 +189,10 @@
 	/* memcpy(vol->devname, main_meta->devname, HR_DEVNAME_LEN); */
 
+	if (vol->extent_no > HR_MAX_EXTENTS) {
+		HR_DEBUG("Assembled volume has %u extents (max = %u)",
+		    (unsigned)vol->extent_no, HR_MAX_EXTENTS);
+		return EINVAL;
+	}
+
 	vol->in_mem_md = calloc(1, sizeof(hr_metadata_t));
 	if (vol->in_mem_md == NULL)
