Thread (4 messages) 4 messages, 2 authors, 2011-11-19

Re: [17/26] b43: refuse to load unsupported firmware

From: Ben Hutchings <hidden>
Date: 2011-11-19 19:49:26
Also in: lkml, stable

On Sat, 2011-11-19 at 11:05 -0800, Greg KH wrote:
On Sat, Nov 19, 2011 at 05:22:10PM +0000, Ben Hutchings wrote:
quoted
On Fri, 2011-11-18 at 16:02 -0800, Greg KH wrote:
quoted
3.1-stable review patch.  If anyone has any objections, please let me know.

------------------

[This patch is supposed to be applied in 3.1 (and maybe older) branches only.]

New kernels support newer firmware that users may try to incorrectly use
with older kernels. Display error and explain the problem in such a case

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/net/wireless/b43/main.c |    7 +++++++
 1 file changed, 7 insertions(+)
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -2508,6 +2508,13 @@ static int b43_upload_microcode(struct b
 		b43_print_fw_helptext(dev->wl, 1);
 		err = -EOPNOTSUPP;
 		goto error;
+	} else if (fwrev >= 598) {
+		b43err(dev->wl, "YOUR FIRMWARE IS TOO NEW. Support for "
+		       "firmware 598 and up requires kernel 3.2 or newer. You "
+		       "have to install older firmware or upgrade kernel.\n");
+		b43_print_fw_helptext(dev->wl, 1);
+		err = -EOPNOTSUPP;
+		goto error;
[...]

Again, I strongly object to this way of handling the incompatibility.
The revision check is fine, but the solution must be to assign a
different filename for the newer revisions.  The changes to 3.0/3.1
should be deferred until this is resolved.
You can object, however the driver author and maintainer wants it done
this way for now, so that's a valid solution that I have to accept.  It
solves real bugs that people have already hit when running the 3.0 and
3.1 kernels.
The revision check fixes a bug, yes.  What I'm concerned about is the
cop-out error message: 'We didn't deal with versioning properly, so you
get to solve the problem.'  It should be possible to reboot between
multiple installed kernel versions without modifying files.
Propagating a userspace tool change for those systems
would be much harder, if not impossible, don't you think? It would also
require a much more intrusive change to the driver infrastructure to
handle such a proposed change.
It is the new kernel version and firmware files that should be changed,
not the old ones.

There is another option which is to use the /lib/firmware/<kernel-ver>
directories to separate incompatible firmware versions.  That is not
nearly as good as using a API/ABI number in the filename, but it would
work and the error message could suggest it.

Ben.

-- 
Ben Hutchings
The world is coming to an end.	Please log off.

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help