[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: =?utf-8?B?562U5aSNOiBkZXZtZW06IHVzZSBtbWFwNjQgcmVwbGFjZSBtbWFw?=
From: xiechengliang <xiechengliang1 () huawei ! com>
Date: 2021-10-08 8:16:08
Message-ID: 1e3b106571cd4909838dbe554cf810cb () huawei ! com
[Download RAW message or body]
I have built busybox with CONFIG_LFS=y, this problem still exists.
mmap is defined in glibc as below:
void *mmap(void *addr, size_t len, int prot , int flags , int fd, off_t offset);
The type of last parameter offset is off_ t, so using mmap will still cause \
truncation problems.
The mmap64() function is identical to the mmap() function except that it can be used \
to map memory from files that are larger than 2 gigabytes into the process memory.
Strace log :
arm32_for_busybox_devmem / # strace devmem 0x280000000
execve("/sbin/devmem", ["devmem", "0x280000000"], 0xbed2bd24 /* 21 vars */) = 0
.......
.......
.......
mmap2(NULL, 4096, PROT_READ, MAP_SHARED, 3, 0x80000000) = 0xb6f36000
.......
.......
.......
exit_group(0) = ?
+++ exited with 0 +++
-----邮件原件-----
发件人: Denys Vlasenko [mailto:vda.linux@googlemail.com]
发送时间: 2021年10月7日 23:35
收件人: xiechengliang <xiechengliang1@huawei.com>
抄送: busybox@busybox.net
主题: Re: devmem: use mmap64 replace mmap
This should be solvable by building with CONFIG_LFS=y
- this makes off_t 64-bit and makes all operations on files 64-bit aware.
Can you try that?
On Mon, Sep 27, 2021 at 4:06 PM xiechengliang <xiechengliang1@huawei.com> wrote:
>
> Subject: [PATCH] devmem: The type of the physical address to be
> accessed by
>
> devmem is off_t, when the 32-bit Linux kernel support lpae, the
> physical
>
> address can exceed 4G, and accessing or modifying the address
> exceeding 4G
>
> will cause truncation.
>
>
>
> function old new delta
>
> do_cmd 127 127 +0
>
>
>
> Signed-off-by: xiechengliang <xiechengliang1@huawei.com>
>
> ---
>
> miscutils/devmem.c | 6 +++---
>
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
>
>
> diff --git a/miscutils/devmem.c b/miscutils/devmem.c
>
> index f9f0276bc..594bb440c 100644
>
> --- a/miscutils/devmem.c
>
> +++ b/miscutils/devmem.c
>
> @@ -30,7 +30,7 @@ int devmem_main(int argc UNUSED_PARAM, char **argv)
>
> void *map_base, *virt_addr;
>
> uint64_t read_result;
>
> uint64_t writeval = writeval; /* for compiler */
>
> - off_t target;
>
> + uint64_t target;
>
> unsigned page_size, mapped_size, offset_in_page;
>
> int fd;
>
> unsigned width = 8 * sizeof(int);
>
> @@ -82,12 +82,12 @@ int devmem_main(int argc UNUSED_PARAM, char
> **argv)
>
> * Must map two pages to make it possible: */
>
> mapped_size *= 2;
>
> }
>
> - map_base = mmap(NULL,
>
> + map_base = mmap64(NULL,
>
> mapped_size,
>
> argv[3] ? (PROT_READ | PROT_WRITE) :
> PROT_READ,
>
> MAP_SHARED,
>
> fd,
>
> - target & ~(off_t)(page_size - 1));
>
> + target & ~(uint64_t)(page_size - 1));
>
> if (map_base == MAP_FAILED)
>
> bb_simple_perror_msg_and_die("mmap");
>
>
>
> --
>
> 2.12.3
>
>
>
> _______________________________________________
> busybox mailing list
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic