Messages in this thread | | | Subject | Re: [PATCH] lib/vsprintf.c: increase the size of the field_width variable | From | Joe Perches <> | Date | Wed, 09 Sep 2015 09:33:52 -0700 |
| |
On Wed, 2015-09-09 at 12:13 +0200, Maurizio Lombardi wrote: > When printing a bitmap using the "%*pb[l]" printk format > a 16 bit variable (field_width) is used to store the size of the bitmap. > In some cases 16 bits are not sufficient, the variable overflows and > printk does not work as expected.
If more than 16 bits are necessary, it couldn't work as a single printk is limited to 1024 bytes.
> 3. Bitmap should be set, but still empty > # cat /sys/bus/pseudo/drivers/scsi_debug/map [] > diff --git a/lib/vsprintf.c b/lib/vsprintf.c [] > @@ -384,8 +384,8 @@ struct printf_spec { > u8 flags; /* flags to number() */ > u8 base; /* number base, 8, 10 or 16 only */ > u8 qualifier; /* number qualifier, one of 'hHlLtzZ' */ > - s16 field_width; /* width of output field */ > s16 precision; /* # of digits/chars */ > + s32 field_width; /* width of output field */ > }; > > static noinline_for_stack
And this makes the sizeof struct printf_spec more than 8 bytes which isn't desireable on x86-32.
%*pb is meant for smallish bitmaps, not big ones.
| |