Error reading /dev/mem

Mulyadi Santosa mulyadi.santosa at gmail.com
Mon Oct 10 02:55:44 EDT 2016


On Mon, Oct 3, 2016 at 5:00 PM, Paddie O'Brien <paddieobrien at gmail.com>
wrote:

> It is a 32-bit system.
>
> I have a C program that puts a number in a variable. I then retrieve
> the physical address of that variable using a system call I added to
> the kernel. I next seek to that address in /dev/mem and verify that
> what I find there matches the contents of the variable in my program.
> All works fine i.e. the values match up except when the physical
> address returned by the syscall is greater than 935321597. For lower
> physical addresses there is no error. Once above the threshold I get a
> "bad address" error when attempting the read from /dev/mem after
> seeking to the appropriate location.
>
> If I specify 512MB of physical memory on the VM then the problem goes
> away since the physical address returned never exceeds the threshold.
>
> So what you are suggesting is that there is a subrange of physical
> addresses from which it is illegal to read in /dev/mem?
>
> Thanks.
>
> On 1 October 2016 at 18:45, Mulyadi Santosa <mulyadi.santosa at gmail.com>
> wrote:
> >
> >
> > On Wed, Sep 28, 2016 at 2:49 AM, Paddie O'Brien <paddieobrien at gmail.com>
> > wrote:
> >>
> >> Hi,
> >>
> >> I have a system call that maps virtual to physical addresses. I have
> >> disabled CONFIG_STRICT_DEVMEM and am reading from /dev/mem to verify
> >> that the contents of the syscall-returned physical address match the
> >> contents of the virtual address. It works fine up to a point. Reading
> >> beyond byte 935321597 in /dev/mem throws a "bad address" error. Not
> >> sure it's relevant but I'm running on virtual box and specifying 1GB
> >> of RAM. Tried with 2GB of RAM and hit the same problem.
> >>
> >> Any idea why I can't read beyond the above point?
> >>
> >> Thanks.
> >>
> >
> > Hi paddie
> >
> > Is it 32 bit system?
> >
> > If yes, it seems you are about to exceed boundary of kernel linear addres
> > range, which is 0-896 MiB. The upper 896-1024 MiB (1 GiB) is reserved for
> > dynamic mapping
> >
> > CMIIW people.
> >
> > --
> > regards,
> >
> > Mulyadi Santosa
> > Freelance Linux trainer and consultant
> >
> > blog: the-hydra.blogspot.com
> > training: mulyaditraining.blogspot.com
> >
> > _______________________________________________
> > Kernelnewbies mailing list
> > Kernelnewbies at kernelnewbies.org
> > https://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
> >
>


Dear Paddie

Please don't top post, it's the core rules here :)

Anyway, there is no such thing as boundary, but more like what is mapped
and what is not and who occupies it.

As other poster also said, other than my previous mentioned 896 MB mapping
boundary, check /proc/iomem, maybe you hit I/O mapped region

-- 
regards,

Mulyadi Santosa
Freelance Linux trainer and consultant

blog: the-hydra.blogspot.com
training: mulyaditraining.blogspot.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20161010/9729f1b3/attachment.html 


More information about the Kernelnewbies mailing list