public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <greg@kroah.com>
To: Mario.Limonciello@dell.com
Cc: dvhart@infradead.org, andy.shevchenko@gmail.com,
	linux-kernel@vger.kernel.org,
	platform-driver-x86@vger.kernel.org, luto@kernel.org,
	quasisec@google.com, pali.rohar@gmail.com, rjw@rjwysocki.net,
	mjg59@google.com, hch@lst.de
Subject: Re: [PATCH v5 14/14] platform/x86: dell-smbios-wmi: introduce userspace interface
Date: Sat, 7 Oct 2017 14:36:56 +0200	[thread overview]
Message-ID: <20171007123656.GA5667@kroah.com> (raw)
In-Reply-To: <6e3e2c8163ad4576b029eb4c17b4add1@ausx13mpc120.AMER.DELL.COM>

On Sat, Oct 07, 2017 at 12:15:18PM +0000, Mario.Limonciello@dell.com wrote:
> > > +	struct wmi_smbios_priv *priv;
> > > +	int ret = 0;
> > > +	size_t size;
> > > +
> > > +	switch (cmd) {
> > > +	case DELL_WMI_SMBIOS_CMD:
> > > +		priv = dev_get_drvdata(&wdev->dev);
> > > +		if (!priv)
> > > +			return -ENODEV;
> > > +		size = sizeof(struct wmi_smbios_buffer);
> > > +		mutex_lock(&call_mutex);
> > > +		if (copy_from_user(priv->buf, input, size)) {

Wait, how do you know that input is size big?

> > > +			dev_dbg(&wdev->dev, "Copy %lu from user failed\n",
> > > +				size);
> > > +			ret = -EFAULT;
> > > +			goto fail_smbios_cmd;
> > > +		}
> > > +		if (priv->buf->length < priv->buffer_size) {
> > > +			dev_err(&wdev->dev,
> > > +				"Buffer %lld too small, need at least %d\n",
> > > +				priv->buf->length, priv->buffer_size);
> > > +			ret = -EINVAL;
> > > +			goto fail_smbios_cmd;
> > > +		}
> > 
> > No checking for too big of a length?  Any other fields you should check
> > for validity?  Like too small?
> 
> Too big is actually intentionally ignored.

That seems "odd"...

> I split the copy into two segments to check for this.  
> 1. First copy the size of the structure 
> (if userspace didn't allocate at least sizeof(struct wmi_smbios_buffer) that's a problem)
> 2. Verify the size claimed is "at least" what we internally are looking for.
> 3. Copy the rest of the size internally needed.  If userspace sent more it's just not copied.
> 4. When sending it back I only send back up to the "at least" internal size.

That feels strange, are you sure this is correct?  Why the odd two step
process here?

What if 'length' is set to an invalid value (too big or small), will you
catch that correctly here?

> > > +		if (dell_smbios_call_filter(&wdev->dev, &priv->buf->std)) {
> > > +			dev_err(&wdev->dev, "Invalid call %d/%d:%8x\n",
> > > +				priv->buf->std.class, priv->buf->std.select,
> > > +				priv->buf->std.input[0]);
> > > +			ret = -EFAULT;
> > > +			goto fail_smbios_cmd;
> > > +		}
> > > +		size = priv->buffer_size - sizeof(struct wmi_smbios_buffer);
> > 
> > What if size just went too small and wrapped around?  :(
> > 
> > Remember, "All input is evil".  Go print that out and put it on the wall
> > when you are designing this user/kernel api.  You can trust no one, you
> > have to validate _everything_.
> 
> priv->buffer_size can't be set by userspace.

Who sets it?  Your structure naming here doesn't make it obvious which
data is from the kernel and which from userspace, making this very hard
to audit :(

thanks,

greg k-h

  reply	other threads:[~2017-10-07 12:36 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-07  4:59 [PATCH v5 00/14] Introduce support for Dell SMBIOS over WMI Mario Limonciello
2017-10-07  4:59 ` [PATCH v5 01/14] platform/x86: wmi: Add new method wmidev_evaluate_method Mario Limonciello
2017-10-07  4:59 ` [PATCH v5 02/14] platform/x86: dell-wmi: increase severity of some failures Mario Limonciello
2017-10-07  4:59 ` [PATCH v5 03/14] platform/x86: dell-wmi: clean up wmi descriptor check Mario Limonciello
2017-10-07  4:59 ` [PATCH v5 04/14] platform/x86: dell-wmi: allow 32k return size in the descriptor Mario Limonciello
2017-10-07  4:59 ` [PATCH v5 05/14] platform/x86: dell-wmi-descriptor: split WMI descriptor into it's own driver Mario Limonciello
2017-10-07  4:59 ` [PATCH v5 06/14] platform/x86: wmi: Don't allow drivers to get each other's GUIDs Mario Limonciello
2017-10-07  4:59 ` [PATCH v5 07/14] platform/x86: dell-smbios: only run if proper oem string is detected Mario Limonciello
2017-10-07  4:59 ` [PATCH v5 08/14] platform/x86: dell-smbios: Add a sysfs interface for SMBIOS tokens Mario Limonciello
2017-10-07  6:54   ` Greg KH
2017-10-07 11:56     ` Mario.Limonciello
2017-10-07 12:39       ` Greg KH
2017-10-07  4:59 ` [PATCH v5 09/14] platform/x86: dell-smbios: Introduce dispatcher for SMM calls Mario Limonciello
2017-10-08 15:48   ` Andy Shevchenko
2017-10-08 18:13     ` Andy Shevchenko
2017-10-08 21:45       ` Mario.Limonciello
2017-10-08 23:10         ` Andy Shevchenko
2017-10-07  4:59 ` [PATCH v5 10/14] platform/x86: dell-smbios: add filtering capability for requests Mario Limonciello
2017-10-07  7:43   ` Greg KH
2017-10-07  4:59 ` [PATCH v5 11/14] platform/x86: dell-smbios-wmi: Add new WMI dispatcher driver Mario Limonciello
2017-10-07  4:59 ` [PATCH v5 12/14] platform/x86: dell-smbios-smm: test for WSMT Mario Limonciello
2017-10-07  4:59 ` [PATCH v5 13/14] platform/x86: wmi: create character devices when requested by drivers Mario Limonciello
2017-10-07  7:34   ` Greg KH
2017-10-07 11:59     ` Mario.Limonciello
2017-10-07 12:38       ` Greg KH
2017-10-07  4:59 ` [PATCH v5 14/14] platform/x86: dell-smbios-wmi: introduce userspace interface Mario Limonciello
2017-10-07  7:41   ` Greg KH
2017-10-07  7:43     ` Greg KH
2017-10-07 12:15     ` Mario.Limonciello
2017-10-07 12:36       ` Greg KH [this message]
2017-10-07 13:13         ` Mario.Limonciello

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=20171007123656.GA5667@kroah.com \
    --to=greg@kroah.com \
    --cc=Mario.Limonciello@dell.com \
    --cc=andy.shevchenko@gmail.com \
    --cc=dvhart@infradead.org \
    --cc=hch@lst.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luto@kernel.org \
    --cc=mjg59@google.com \
    --cc=pali.rohar@gmail.com \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=quasisec@google.com \
    --cc=rjw@rjwysocki.net \
    /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