Index: uspace/srv/loader/elf_load.c
===================================================================
--- uspace/srv/loader/elf_load.c	(revision 68086146d8354950f308b896983de82d31f260b3)
+++ uspace/srv/loader/elf_load.c	(revision 874a0e81f587d2231688bdf5a15ca3f3306c176a)
@@ -72,4 +72,17 @@
 static int load_segment(elf_ld_t *elf, elf_segment_header_t *entry);
 
+/** Read until the buffer is read in its entirety. */
+static int my_read(int fd, char *buf, size_t len)
+{
+	int cnt = 0;
+	do {
+		buf += cnt;
+		len -= cnt;
+		cnt = read(fd, buf, len);
+	} while ((cnt > 0) && ((len - cnt) > 0));
+
+	return cnt;
+}
+
 /** Load ELF binary from a file.
  *
@@ -157,5 +170,5 @@
 	int i, rc;
 
-	rc = read(elf->fd, header, sizeof(elf_header_t));
+	rc = my_read(elf->fd, header, sizeof(elf_header_t));
 	if (rc < 0) {
 		printf("read error\n"); 
@@ -224,5 +237,6 @@
 		        + i * sizeof(elf_segment_header_t), SEEK_SET);
 
-		rc = read(elf->fd, &segment_hdr, sizeof(elf_segment_header_t));
+		rc = my_read(elf->fd, &segment_hdr,
+		    sizeof(elf_segment_header_t));
 		if (rc < 0) {
 			printf("read error\n");
@@ -245,5 +259,6 @@
 		    + i * sizeof(elf_section_header_t), SEEK_SET);
 
-		rc = read(elf->fd, &section_hdr, sizeof(elf_section_header_t));
+		rc = my_read(elf->fd, &section_hdr,
+		    sizeof(elf_section_header_t));
 		if (rc < 0) {
 			printf("read error\n");
@@ -362,6 +377,6 @@
 	 * and writeable.
 	 */
-	a = as_area_create((uint8_t *)base + bias,
-		mem_sz, AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE);
+	a = as_area_create((uint8_t *)base + bias, mem_sz,
+	    AS_AREA_READ | AS_AREA_WRITE | AS_AREA_CACHEABLE);
 	if (a == (void *)(-1)) {
 		printf("memory mapping failed\n");
@@ -399,5 +414,5 @@
 
 //		printf("read %d...", now);
-		rc = read(elf->fd, dp, now);
+		rc = my_read(elf->fd, dp, now);
 //		printf("->%d\n", rc);
 
