From: Greg KH <greg@kroah.com>
To: Alan Cox <alan@lxorguk.ukuu.org.uk>
Cc: Matthew Wilcox <willy@linux.intel.com>, linux-kernel@vger.kernel.org
Subject: Re: [REVIEW] NVM Express driver
Date: Fri, 4 Mar 2011 15:10:31 -0800 [thread overview]
Message-ID: <20110304231031.GA27628@kroah.com> (raw)
In-Reply-To: <20110304223329.18a81f5f@lxorguk.ukuu.org.uk>
On Fri, Mar 04, 2011 at 10:33:29PM +0000, Alan Cox wrote:
> > > How do most other apps do it.
> >
> > They write to the sysfs file with the firmware when they feel like it.
>
> Very few seem to do this. Quite a lot also have a much more complex
> interaction anyway than 'firmware please', 'zap' , 'ok' to be fair.
>
> > > > So, what could be changed in the current firmware interface to fix this
> > > > problem in a manner which would solve these perceived issues?
> > >
> > > I'm not sure it can. The basis of the interface is driver requests
> > > firmware. That is done by using a pathname which in a namespaced
> > > environment isn't global and has races
> >
> > Of course, but those races don't show up in real systems, right?
>
> They do. That's why I know they exist. If enough people use your distro
> then eventually someone catches it.
Ok, I guess I must be doing support for distros that never get used :)
Have pointers to bug reports?
> > > (Several things break quite spectacularly if you request_firmware while
> > > updating a package, but of course nobody considered such details even for
> > > automatic stuff in many cases. Really there is some locking needed).
> >
> > I've never heard of this race before as you usually do firmware upload
> > either at boot time, or when a user specifically asks for it. Neither
> > of those times is when packages are usually getting updated.
>
> Usually is not a good answer for correctness and security with firmware.
> It's really really not a good answer when flashing new firmware. "Usually
> your expensive hardware is not turned into a valueless brick" lacks a
> certain something.
>
> For dynamically requested firmware the request_firmware interface is
> excellent stuff, and the right way to fix the races is to lock between
> the daemon and package manager. For flashing stuff it's not up to the job.
Fair enough.
> > > For manual updating of a block of firmware the interface most stuff wants
> > > is
> > >
> > > copy_from_user()
> > >
> > > or if you wanted to wrap it up nicely
> > >
> > > x = vmalloc_from_user(void __user *ptr, ssize_t len);
> > >
> > > The app knows which firmware it is talking about and can inspect and
> > > compare it while holding an open file handle on the deivce. That protects
> > > against hotplug races and getting the wrong device second access, and
> > > ensures that the firmware, device and userspace are all talking about
> > > exactly the same thing.
> >
> > But you do get this type of buffer from the firware interface to your
> > driver today, right?
>
> Providing you jump through a small army of hoops, get the right sysfs
> nodes, dodge any race conditions, hotplug and the like yes. But it should
> be robust and simple. Using request_firmware for this case is neither
> robust nor simple, nor is it easy to get the sysfs/driver open/hotplug
> race handling right so instead of the kernel code being very occasionally
> buggy (which we can spot) the user apps will be horribly buggy and we
> don't read those so your push for a complex mis-standard in the kernel
> actually makes the problem far worse than it would be without.
>
> > Still, I don't want this to all of a sudden be "open season" for every
> > individual driver deciding to want to create an ioctl call for firmware
> > updating just because the authors don't like the existing in-kernel
> > interface. Please fix up the in-kernel one instead to meet your needs.
>
> You are not creating an open season. The every driver having its own
> ioctl for firmware updating is the norm, and its in some ways a rather
> good norm because when it comes to flash updating there isn't much
> standardisation and you don't want standardisation as it just asks for
> the wrong tool to work in an unfortunate race or user mix-up. Flash
> updating is special - it's good that one app doesn't work on another
> device !
>
> You could have a standardised helper easily enough I guess. Pick a
> standard struct and firmware descriptor and provide a
>
> request_firmware_from_user(struct firmware_something __user *fw)
>
> which hands back stuff in the form the rest of the firmware logic likes
> to play and has a standard user side struct format.
Ok, patches gladly accepted :)
As well as the general "The firmware subsystem needs an active
maintainer" plea, as the previous maintainer passed away a number of
years ago :(
thanks,
greg k-h
next prev parent reply other threads:[~2011-03-04 23:32 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-03-03 20:47 [REVIEW] NVM Express driver Matthew Wilcox
2011-03-03 21:13 ` Greg KH
2011-03-03 21:41 ` Matthew Wilcox
2011-03-03 21:51 ` Greg KH
2011-03-03 22:07 ` Matthew Wilcox
2011-03-03 22:22 ` Greg KH
2011-03-04 2:25 ` Andy Lutomirski
2011-03-04 9:02 ` el es
2011-03-04 21:29 ` Greg KH
2011-03-04 12:43 ` Alan Cox
2011-03-04 21:28 ` Greg KH
2011-03-04 21:59 ` Alan Cox
2011-03-04 22:10 ` Greg KH
2011-03-04 22:33 ` Alan Cox
2011-03-04 23:10 ` Greg KH [this message]
2011-03-05 10:28 ` Alan Cox
2011-03-04 12:52 ` Mark Brown
2011-03-03 21:33 ` Randy Dunlap
2011-03-04 13:06 ` Christoph Hellwig
2011-03-04 14:46 ` Matthew Wilcox
2011-03-11 22:29 ` Andi Kleen
2011-03-12 5:51 ` Matthew Wilcox
2011-03-13 17:14 ` Andi Kleen
2011-03-13 17:14 ` Andi Kleen
2011-03-13 18:24 ` Arnd Bergmann
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=20110304231031.GA27628@kroah.com \
--to=greg@kroah.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=linux-kernel@vger.kernel.org \
--cc=willy@linux.intel.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.