[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: RE: [PATCH v2] ash: use memmove instead of mempcpy in subevalvar
From: David Laight <David.Laight () ACULAB ! COM>
Date: 2022-02-26 22:09:47
Message-ID: 082d47fef08446e59a2ddee483850d8f () AcuMS ! aculab ! com
[Download RAW message or body]
From: busybox
> Sent: 26 February 2022 18:53
>
> While investigating a sporadic crash issue relating to variable substitution in
> Alpine Linux, we managed to get a reliable crash when building BusyBox with ASan,
> due to the source and destination overlapping for mempcpy, which resulted in
> sporadic data corruption outside ASan.
>
> Per POSIX, memcpy is not allowed to overlap source and destination, as mempcpy
> is a GNU-specific extension to mempcpy, the same semantics can be assumed.
> Accordingly, we use memmove instead, which does not have this limitation.
>
> v2: Forgot to emulate mempcpy's dest+size return value, fixed.
>
> Signed-off-by: Ariadne Conill <ariadne@dereferenced.org>
> ---
> shell/ash.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/shell/ash.c b/shell/ash.c
> index adb0f223a..056954059 100644
> --- a/shell/ash.c
> +++ b/shell/ash.c
> @@ -7187,7 +7187,7 @@ subevalvar(char *start, char *str, int strloc,
> len = orig_len - pos;
>
> if (!quotes) {
> - loc = mempcpy(startp, startp + pos, len);
> + loc = memmove(startp, startp + pos, len) + len;
I'd just not rely on the return value at all.
Juat add:
loc = startp + len;
before of after the call.
I'm actually intrigued that ash has picked up a glibc function
I thought it was portable?
The 'best' ash bug (which might now be fixed in the main sources)
was running on the beginning of an on-stack buffer when removing
the '\n' from the end of long $(....) substitutions.
It usually just failed to remove a '\n', but it could remove an
extra character - most likely on BE systems.
David
-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)
_______________________________________________
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