Index: uspace/drv/bus/isa/isa.c
===================================================================
--- uspace/drv/bus/isa/isa.c	(revision 43523b12cc153bc2d0d953499c024074894156b1)
+++ uspace/drv/bus/isa/isa.c	(revision c0393dbcc040eb89952593433df3e021f9e0c323)
@@ -245,5 +245,7 @@
 	bool opened = false;
 	int fd;
-	size_t len = 0;
+	size_t file_len;
+	size_t total_read = 0;
+	ssize_t r;
 
 	fd = open(conf_path, O_RDONLY);
@@ -255,7 +257,7 @@
 	opened = true;
 
-	len = lseek(fd, 0, SEEK_END);
+	file_len = lseek(fd, 0, SEEK_END);
 	lseek(fd, 0, SEEK_SET);
-	if (len == 0) {
+	if (file_len == 0) {
 		ddf_msg(LVL_ERROR, "Configuration file '%s' is empty.",
 		    conf_path);
@@ -263,5 +265,5 @@
 	}
 
-	buf = malloc(len + 1);
+	buf = malloc(file_len + 1);
 	if (buf == NULL) {
 		ddf_msg(LVL_ERROR, "Memory allocation failed.");
@@ -269,10 +271,15 @@
 	}
 
-	if (0 >= read(fd, buf, len)) {
-		ddf_msg(LVL_ERROR, "Unable to read file '%s'.", conf_path);
-		goto cleanup;
-	}
-
-	buf[len] = 0;
+	do {
+		r = read(fd, &buf[total_read], file_len - total_read);
+		if (r < 0) {
+			ddf_msg(LVL_ERROR, "Unable to read file '%s'.", conf_path);
+			goto cleanup;
+		}
+
+		total_read += r;
+	} while (total_read < file_len);
+
+	buf[file_len] = 0;
 
 	suc = true;
