[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