Date: Tue, 16 Nov 2021 11:18:17 -0500 From: Rich Felker <dalias@...c.org> To: "Minqiang Chen (ptpt52)" <ptpt52@...il.com> Cc: musl@...ts.openwall.com Subject: Re: BUG fix: mmap pass wrong offset to kernel On Tue, Nov 16, 2021 at 11:56:57AM +0800, Minqiang Chen (ptpt52) wrote: > From 146066a9794b8e39c53337b71a8476b86e79e7d4 Mon Sep 17 00:00:00 2001 > From: Chen Minqiang <ptpt52@...il.com> > Date: Mon, 16 Oct 2017 08:57:41 +0800 > Subject: [PATCH] musl: fix mmap pass wrong offset to kernel > > on 32bit platform for example off_t x=0x8d9eb000, the x/4096 result > is 0xfff8d9eb, but the sys_mmap2() is expecting 0x8d9eb to be pass to > > this happens on 32bit platform or 64bit platform when > x > = 0x80000000 (32bit platform) > or > x > = 0x8000000000000000 (64bit platform) > > Signed-off-by: Chen Minqiang <ptpt52@...il.com> > --- > src/mman/mmap.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/mman/mmap.c b/src/mman/mmap.c > index eff88d82..f225cdbb 100644 > --- a/src/mman/mmap.c > +++ b/src/mman/mmap.c > @@ -26,7 +26,7 @@ void *__mmap(void *start, size_t len, int prot, int flags, int fd, off_t off) > __vm_wait(); > } > #ifdef SYS_mmap2 > - ret = __syscall(SYS_mmap2, start, len, prot, flags, fd, off/UNIT); > + ret = __syscall(SYS_mmap2, start, len, prot, flags, fd, (unsigned long)off/UNIT); > #else > ret = __syscall(SYS_mmap, start, len, prot, flags, fd, off); > #endif > -- > 2.17.1 This patch is wrong and truncates offsets over 32-bit (drops all the high bits). There is a bug here, but it's just that UNIT has the wrong type. commit b5bbe797493ea732d4cac15619753c545ed392af introduced the regression by making UNIT have type unsigned long long. It should have a small signed type; just int is fine. Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.