Skip to contentSkip to conversation

dev/mem: "memtester -p 0x6c80000000000 10G" cause crash

RFC Xishi Qiu 2 participants 5 messages May 2, 2017 Memory management

lore
Share & tools
lore

Xishi Qiu

author
#0 lore raw

Hi, I use "memtester -p 0x6c80000000000 10G" to test physical address 0x6c80000000000 Because this physical address is invalid, and valid_mmap_phys_addr_range() always return 1, so it causes crash.

My question is that should the user assure the physical address is valid?

...

[ 169.147578] ? panic+0x1f1/0x239
[ 169.150789] oops_end+0xb8/0xd0
[ 169.153910] pgtable_bad+0x8a/0x95
[ 169.157294] __do_page_fault+0x3aa/0x4a0
[ 169.161194] do_page_fault+0x30/0x80
[ 169.164750] ? do_syscall_64+0x175/0x180
[ 169.168649] page_fault+0x28/0x30

Thanks,
Xishi Qiu

#1 lore raw
Quoted 5 lines · Xishi Qiu

Hi, I use "memtester -p 0x6c80000000000 10G" to test physical address 0x6c80000000000 Because this physical address is invalid, and valid_mmap_phys_addr_range() always return 1, so it causes crash.

My question is that should the user assure the physical address is valid?

We already seem to be checking range_is_allowed(). What is your CONFIG_STRICT_DEVMEM setting? The code seems to be rather confusing but my assumption is that you better know what you are doing when mapping this file.

Quoted 11 lines

...

[ 169.147578] ? panic+0x1f1/0x239
[ 169.150789] oops_end+0xb8/0xd0
[ 169.153910] pgtable_bad+0x8a/0x95
[ 169.157294] __do_page_fault+0x3aa/0x4a0
[ 169.161194] do_page_fault+0x30/0x80
[ 169.164750] ? do_syscall_64+0x175/0x180
[ 169.168649] page_fault+0x28/0x30

Thanks,
Xishi Qiu

Signature · 8 lines
Michal Hocko
SUSE Labs

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
author
#2 lore raw
Quoted 5 lines · Michal Hocko
Quoted 4 lines · Xishi Qiu

Hi, I use "memtester -p 0x6c80000000000 10G" to test physical address 0x6c80000000000 Because this physical address is invalid, and valid_mmap_phys_addr_range() always return 1, so it causes crash.

Quoted 7 lines
Quoted 1 line

My question is that should the user assure the physical address is valid?

We already seem to be checking range_is_allowed(). What is your CONFIG_STRICT_DEVMEM setting? The code seems to be rather confusing but my assumption is that you better know what you are doing when mapping this file.

HI Michal,

CONFIG_STRICT_DEVMEM=y, and range_is_allowed() will skip memory, but 0x6c80000000000 is not memory, it is just a invalid address, so it cause crash.
You mean the user should assure the physical address is valid, right?

Thanks,
Xishi Qiu

Quoted 12 lines
Quoted 11 lines

...

[ 169.147578] ? panic+0x1f1/0x239
[ 169.150789] oops_end+0xb8/0xd0
[ 169.153910] pgtable_bad+0x8a/0x95
[ 169.157294] __do_page_fault+0x3aa/0x4a0
[ 169.161194] do_page_fault+0x30/0x80
[ 169.164750] ? do_syscall_64+0x175/0x180
[ 169.168649] page_fault+0x28/0x30

Thanks,
Xishi Qiu

#3 lore raw
Quoted 15 lines · Xishi Qiu
Quoted 5 lines · Michal Hocko
Quoted 4 lines · Xishi Qiu

Hi, I use "memtester -p 0x6c80000000000 10G" to test physical address 0x6c80000000000 Because this physical address is invalid, and valid_mmap_phys_addr_range() always return 1, so it causes crash.

Quoted 7 lines
Quoted 1 line

My question is that should the user assure the physical address is valid?

We already seem to be checking range_is_allowed(). What is your CONFIG_STRICT_DEVMEM setting? The code seems to be rather confusing but my assumption is that you better know what you are doing when mapping this file.

Quoted 5 lines

HI Michal,

CONFIG_STRICT_DEVMEM=y, and range_is_allowed() will skip memory, but 0x6c80000000000 is not memory, it is just a invalid address, so it cause crash.

OK, I only now looked at the value. It is beyond addressable limit (for 47b address space). None of the checks seems to stop this because range_is_allowed() resp. its devmem_is_allowed() will allow it as a non RAM (!page_is_ram check). I am not really sure how to fix this or whether even we should try to fix this particular problem. As I've said /dev/mem is dangerous and you should better know what you are doing when accessing it.

Signature · 8 lines
Michal Hocko
SUSE Labs

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to [email protected].  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"[email protected]"> [email protected] </a>
author
#4 lore raw
Quoted 22 lines · Michal Hocko
Quoted 15 lines · Xishi Qiu
Quoted 5 lines · Michal Hocko
Quoted 4 lines · Xishi Qiu

Hi, I use "memtester -p 0x6c80000000000 10G" to test physical address 0x6c80000000000 Because this physical address is invalid, and valid_mmap_phys_addr_range() always return 1, so it causes crash.

Quoted 7 lines
Quoted 1 line

My question is that should the user assure the physical address is valid?

We already seem to be checking range_is_allowed(). What is your CONFIG_STRICT_DEVMEM setting? The code seems to be rather confusing but my assumption is that you better know what you are doing when mapping this file.

Quoted 5 lines

HI Michal,

CONFIG_STRICT_DEVMEM=y, and range_is_allowed() will skip memory, but 0x6c80000000000 is not memory, it is just a invalid address, so it cause crash.

Quoted 8 lines

OK, I only now looked at the value. It is beyond addressable limit (for 47b address space). None of the checks seems to stop this because range_is_allowed() resp. its devmem_is_allowed() will allow it as a non RAM (!page_is_ram check). I am not really sure how to fix this or whether even we should try to fix this particular problem. As I've said /dev/mem is dangerous and you should better know what you are doing when accessing it.

OK, I know, thank you!

Thanks,
Xishi Qiu