mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "" <pmarques@grupopie.com>
To: "" <linux-kernel@vger.kernel.org>
Cc: "" <perex@suse.cz>, "" <mdharm-usb@one-eyed-alien.net>
Subject: sizeof(ptr) or sizeof(*ptr)?
Date: Sun, 27 Feb 2005 20:25:04 +0000	[thread overview]
Message-ID: <1109535904.42222ca0b0b78@webmail.grupopie.com> (raw)


Last week a bug was detected in n_tty.c where an array of char was replaced by a
char pointer making a "(len > sizeof(buf))" condition test for len > 4 (or 8)
bytes, instead of the original array size.

I decided to tweak sparse to give warnings on sizeof(pointer), so that I could
check for other cases like this. The tweak was a very crude hack that I'm not
proud of, and I am still trying to make it more reliable.

So far I found 2 interesting cases (in 2.6.11-rc5). I'm not sure they are bugs,
but they sure look suspicious.

1: drivers/usb/storage/usb.c:788

	/*
	 * Since this is a new device, we need to register a SCSI
	 * host definition with the higher SCSI layers.
	 */
	us->host = scsi_host_alloc(&usb_stor_host_template, sizeof(us));
	if (!us->host) {
		printk(KERN_WARNING USB_STORAGE
			"Unable to allocate the scsi host\n");
		return -EBUSY;
	}

"us" is a "struct us_data *". It seems pretty weird that we're allocating
something the size of a pointer, and then waste a pointer to keep the address
where it is allocated. So maybe this should be:

	us->host = scsi_host_alloc(&usb_stor_host_template, sizeof(*us));


2: sound/core/control.c:936

	ue = kcalloc(1, sizeof(struct user_element) + private_size + extra_size,
GFP_KERNEL);
	if (ue == NULL)
		return -ENOMEM;
	ue->info = info;
	ue->elem_data = (char *)ue + sizeof(ue);
	ue->elem_data_size = private_size;
	if (extra_size) {
		ue->priv_data = (char *)ue + sizeof(ue) + private_size;
		ue->priv_data_size = extra_size;
		if (ue->info.type == SNDRV_CTL_ELEM_TYPE_ENUMERATED) {
			if (copy_from_user(ue->priv_data, *(char __user
**)info.value.enumerated.name, extra_size))
				return -EFAULT;
		}
	}

If we're allocating "sizeof(struct user_element) + private_size + extra_size" it
seems that in the instructions below we would be wanting to use that space, so
both "sizeof(ue)" there should in fact be "sizeof(*ue)"

I'm not *really* sure that these are bugs, but they look suspicious. I'm CC'ing
the maintainers of both these files so that they can check these out.

I'll probably bring more examples in the future, as the tool improves. Right now
it gives about 550 false positives, so I think it is better to improve it
before checking every case :)

--
Paulo Marques - www.grupopie.com
 
All that is necessary for the triumph of evil is that good men do nothing.
Edmund Burke (1729 - 1797)


             reply	other threads:[~2005-02-27 20:28 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-02-27 20:25 pmarques [this message]
2005-02-27 20:45 ` Matthew Dharm
2005-02-27 23:13   ` pmarques
2005-02-28  5:39     ` Andrew Morton
2005-03-08 13:20       ` Paulo Marques

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1109535904.42222ca0b0b78@webmail.grupopie.com \
    --to=pmarques@grupopie.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mdharm-usb@one-eyed-alien.net \
    --cc=perex@suse.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome