Whats in this vaddr segment 0xffffe000-0xfffff000 ---p ?
Hello All, Sorry to interrupt you. I have been facing a wierd problem on same kernel version (2.6.5-7.97.smp) but running on different machines 32-bit and 64-bit (which can run 32-bit also). I found that every process running in this kernel version has a virtual address mapping in /proc/<pid>/maps file as follows <--------------------------------------------------------------------------------------------------> ffffe000-ffff000 ---p 00000000 00:00 0 <--------------------------------------------------------------------------------------------------> You can find this vaddr mapping at end of maps file. on a 64-bit(uname --all == 'Linux host 2.6.5-7.97.smp #1 <time stamp> x86_64 x86_64 x86_64 GNU/Linux) machine which is running the same kernel, I try to write the contents of the virtual address on to file with (r = write(fd,0xffffe000,4096) ). The write on this machine is successful. But if I try to write the same segment on 32-bit machine (uname --all == Linux host 2.6.5-7.97-smp #1 <timestamp> i686 i686 i386 GNU/Linux). The write on this 32-bit machine fails with EFAULT(14), but if memcpy to a buffer from this virtual address seems to work fine i.e if I do 'memcpy(buf1,0xffffe000,4096)' it write perfectly the contents of this virtual address segment into the buf1. I had a hard time googling about this I could'nt find any information on why this happens. May be some mm hackers may share some of their thoughts. Really appreciate your inputs on this. Sincerely, Vamsi kundeti PS: BTW I'am running suse distribution and will glibc will have any effect on write behaviour ? (I though that since write is a syscall the issue might be with the kernel the thus skipping the glibc details)
participants (1)
-
vamsi krishna