Re: [patch 2/3] vdso: improve print_fatal_signals support by adding memory maps

From: Simon Raffeiner
Date: Sun Jun 18 2006 - 09:25:37 EST


Am Sonntag, 18. Juni 2006 07:58 schrieben Sie:
> On Sat, 17 Jun 2006 21:58:18 -0700
>
> "Randy.Dunlap" <rdunlap@xxxxxxxxxxxx> wrote:
> > On Sat, 17 Jun 2006 16:14:52 +0200 Simon Raffeiner wrote:
> > > When compiling 2.6.17-rc6-mm2 (which contains this patch) my gcc 4.0.3
> > > (Ubuntu 4.0.3-1ubuntu5) complains about "int len;" being used
> > > uninitialized in print_vma(). AFAICS len is not initialized and then
> > > passed to
> > > pad_len_spaces(int len), which uses it for some calculations.
> > >
> > > I also noticed that similar code is used in fs/proc/task_mmu.c, where
> > > show_map_internal() passes an uninitialised int len; to
> > > pad_len_spaces(struct seq_file *m, int len).
> >
> > Ack both of those. And both of them pass &len as a parameter to
> > printk/seq_printf where it looks as though they want just <len>
> > (after it has been initialized).
>
> printk("%n", &len) will initialise `len'. gcc is being wrong again.

pad_len_spaces() is called in the following way:


static int print_vma(struct vm_area_struct *vma)
{
int len;

(...)

pad_len_spaces(len);

(...)


and is defined as:


static void pad_len_spaces(int len)
{
len = 25 + sizeof(void*) * 6 - len;

if (len < 1)
len = 1;

printk("%*c", len, ' ');
}


len is passed to pad_len_spaces() without initialization and is used for
calculations BEFORE printk() is called.

--
OpenPGP/GnuPG Key: 0xB2204FA0 @ subkeys.pgp.net

"There is no point in having Linux on the Desktop if it's at the cost of it
being the same crap that Windows is."
- Benjamin Herrenschmidt

Attachment: pgp00000.pgp
Description: PGP signature