public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* question about smatch error
@ 2011-01-17  5:02 Roland Dreier
  2011-01-17  5:33 ` David Miller
  2011-01-17  6:06 ` Dan Carpenter
  0 siblings, 2 replies; 3+ messages in thread
From: Roland Dreier @ 2011-01-17  5:02 UTC (permalink / raw)
  To: Dan Carpenter; +Cc: linux-kernel

Hi Dan,

I'm running smatch against some of my code, and I'm seeing the errors

drivers/infiniband/hw/mlx4/main.c +784 mlx4_addrconf_ifid_eui48(5) error: buffer overflow 'eui' 3 <= 3
drivers/infiniband/hw/mlx4/main.c +785 mlx4_addrconf_ifid_eui48(6) error: buffer overflow 'eui' 3 <= 4
drivers/infiniband/hw/mlx4/main.c +787 mlx4_addrconf_ifid_eui48(8) error: buffer overflow 'eui' 3 <= 3
drivers/infiniband/hw/mlx4/main.c +788 mlx4_addrconf_ifid_eui48(9) error: buffer overflow 'eui' 3 <= 4

and I can't understand what smatch is trying to say -- the code in
question is basically

	if (vlan_id < 0x1000) {
		eui[3] = vlan_id >> 8;
		eui[4] = vlan_id & 0xff;
	} else {
		eui[3] = 0xff;
		eui[4] = 0xfe;
	}

where eui is a u8*, and I don't see how smatch even thinks it knows how
big the buffer is in the first place.

This is with up-to-date smatch from git (my tree is at 798c4c13).

Thanks,
  Roland

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: question about smatch error
  2011-01-17  5:02 question about smatch error Roland Dreier
@ 2011-01-17  5:33 ` David Miller
  2011-01-17  6:06 ` Dan Carpenter
  1 sibling, 0 replies; 3+ messages in thread
From: David Miller @ 2011-01-17  5:33 UTC (permalink / raw)
  To: rdreier; +Cc: error27, linux-kernel

From: Roland Dreier <rdreier@cisco.com>
Date: Sun, 16 Jan 2011 21:02:52 -0800

> where eui is a u8*, and I don't see how smatch even thinks it knows how
> big the buffer is in the first place.

It can see that the one and only caller passes in a pointer in the
middle of an on-stack ib_gid struct, and it knows how big those
objects are.


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: question about smatch error
  2011-01-17  5:02 question about smatch error Roland Dreier
  2011-01-17  5:33 ` David Miller
@ 2011-01-17  6:06 ` Dan Carpenter
  1 sibling, 0 replies; 3+ messages in thread
From: Dan Carpenter @ 2011-01-17  6:06 UTC (permalink / raw)
  To: Roland Dreier; +Cc: linux-kernel

On Sun, Jan 16, 2011 at 09:02:52PM -0800, Roland Dreier wrote:
> where eui is a u8*, and I don't see how smatch even thinks it knows how
> big the buffer is in the first place.
> 

It comes from the memcpy:

        memcpy(eui, dev->dev_addr, 3);
        memcpy(eui + 5, dev->dev_addr + 3, 3);

The first line means smatch thinks "eui" is a 3 char buffer.  The second
line gets ignored but normally smatch would see "eui + 5" as a separate
buffer.

Really when it sees the memcpy() that's just a guess about the size, 
I'll disable it by default unless you use the --spammy option.

regards,
dan carpenter


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-01-17  6:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-17  5:02 question about smatch error Roland Dreier
2011-01-17  5:33 ` David Miller
2011-01-17  6:06 ` Dan Carpenter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox