diff -rpuN crash-4.0-3.13.org/netdump.c crash-4.0-3.13/netdump.c
--- crash-4.0-3.13.org/netdump.c	2006-11-28 03:41:27.000000000 +0900
+++ crash-4.0-3.13/netdump.c	2006-11-28 17:46:30.000000000 +0900
@@ -296,6 +296,7 @@ read_netdump(int fd, void *bufptr, int c
 	off_t offset;
 	struct pt_load_segment *pls;
 	int i;
+	long long size_file, size_bss;
 
 	/*
 	 *  The Elf32_Phdr has 32-bit fields for p_paddr, p_filesz and
@@ -324,6 +325,18 @@ read_netdump(int fd, void *bufptr, int c
 			    (paddr < pls->phys_end)) {
 				offset = (off_t)(paddr - pls->phys_start) +
 					pls->file_offset;
+
+				size_file = pls->filesz -
+					(paddr - pls->phys_start);
+				if (cnt < size_file) {
+					size_file = cnt;
+					size_bss  = 0;
+				} else if (0 < size_file){
+					size_bss  = cnt - size_file;
+				} else {
+					size_file = 0;
+					size_bss  = cnt;
+				}
 				break;
 			}
 		}
@@ -333,13 +346,16 @@ read_netdump(int fd, void *bufptr, int c
 		
 		break;
 	}	
+	if (size_file) {
+		if (lseek(nd->ndfd, offset, SEEK_SET) == -1)
+			return SEEK_ERROR;
 
-        if (lseek(nd->ndfd, offset, SEEK_SET) == -1)
-                return SEEK_ERROR;
-
-        if (read(nd->ndfd, bufptr, cnt) != cnt)
-                return READ_ERROR;
-
+		if (read(nd->ndfd, bufptr, size_file) != size_file)
+			return READ_ERROR;
+	}
+	if (size_bss) {
+		memset(bufptr + size_file, 0, size_bss);
+	}
         return cnt;
 }
 
@@ -1135,8 +1151,10 @@ dump_Elf32_Phdr(Elf32_Phdr *prog, int st
 		pls->phys_start = prog->p_paddr; 
 	netdump_print("               p_filesz: %lu (%lx)\n", prog->p_filesz, 
 		prog->p_filesz);
-	if (store_pt_load_data)
-		pls->phys_end = pls->phys_start + prog->p_filesz;
+	if (store_pt_load_data) {
+		pls->phys_end = pls->phys_start + prog->p_memsz;
+		pls->filesz   = prog->p_filesz;
+	}
 	netdump_print("                p_memsz: %lu (%lx)\n", prog->p_memsz,
 		prog->p_memsz);
 	netdump_print("                p_flags: %lx (", prog->p_flags);
@@ -1214,8 +1232,10 @@ dump_Elf64_Phdr(Elf64_Phdr *prog, int st
 		pls->phys_start = prog->p_paddr; 
 	netdump_print("               p_filesz: %lu (%lx)\n", prog->p_filesz, 
 		prog->p_filesz);
-	if (store_pt_load_data)
-		pls->phys_end = pls->phys_start + prog->p_filesz;
+	if (store_pt_load_data) {
+		pls->phys_end = pls->phys_start + prog->p_memsz;
+		pls->filesz   = prog->p_filesz;
+	}
 	netdump_print("                p_memsz: %lu (%lx)\n", prog->p_memsz,
 		prog->p_memsz);
 	netdump_print("                p_flags: %lx (", prog->p_flags);
diff -rpuN crash-4.0-3.13.org/netdump.h crash-4.0-3.13/netdump.h
--- crash-4.0-3.13.org/netdump.h	2006-11-28 03:41:27.000000000 +0900
+++ crash-4.0-3.13/netdump.h	2006-11-28 17:46:31.000000000 +0900
@@ -38,6 +38,7 @@
 
 struct pt_load_segment {
 	off_t file_offset;
+	size_t filesz;
 	physaddr_t phys_start;
 	physaddr_t phys_end;
 };
