mysterious segfault with busybox 1.13.0 ash

Natanael Copa natanael.copa at gmail.com
Fri Nov 21 09:08:19 UTC 2008


On Fri, 2008-11-21 at 10:54 +0200, Timo Teräs wrote:
> Natanael Copa wrote:
> > On Thu, 2008-11-20 at 23:42 +0100, Cristian Ionescu-Idbohrn wrote:
> >> On Thu, 20 Nov 2008, Bernhard Reutner-Fischer wrote:
> >>
> >>> On Wed, Nov 19, 2008 at 09:30:27PM +0100, Natanael Copa wrote:
> >>>> On Wed, 2008-11-19 at 21:17 +0100, Natanael Copa wrote:
> >>>>> shorter testcase:
> >>>>>
> >>>>> ash -c "foo() { ! false && echo foo; }; foo"
> >>> Works for me on trunk (on a debian box)..
> >> Doesn't work for me :(  I get something else:
> >>
> >>   ash: memory exhausted

...

> Looks like ash was broken in commit r23583 where the node type defines
> were changed, but related arrays were not updated. Especially the node
> size table which affects size calculations was left out, thus all kind
> of funny things such as memory corruption can happen.
> 
> Please try the below patch:
> 
> Index: shell/ash.c
> ===================================================================
> --- shell/ash.c	(revision 24107)
> +++ shell/ash.c	(working copy)
> @@ -7556,7 +7556,7 @@
>  #define EV_TESTED 02            /* exit status is checked; ignore -e flag */
>  #define EV_BACKCMD 04           /* command executing within back quotes */
>  
> -static const short nodesize[26] = {
> +static const short nodesize[27] = {
>  	SHELL_ALIGN(sizeof(struct ncmd)),
>  	SHELL_ALIGN(sizeof(struct npipe)),
>  	SHELL_ALIGN(sizeof(struct nredir)),
> @@ -7578,6 +7578,7 @@
>  	SHELL_ALIGN(sizeof(struct nfile)),
>  	SHELL_ALIGN(sizeof(struct nfile)),
>  	SHELL_ALIGN(sizeof(struct nfile)),
> +	SHELL_ALIGN(sizeof(struct nfile)),
>  	SHELL_ALIGN(sizeof(struct ndup)),
>  	SHELL_ALIGN(sizeof(struct ndup)),
>  	SHELL_ALIGN(sizeof(struct nhere)),
> 
> 
> Cheers,
>   Timo

wow! nasty one. you're the man!

nc svn # ./busybox ash -c "f() { ! false && echo foo; }; f"
foo

This patch should be added to fixes 1.13.0

-nc




More information about the busybox mailing list