diff options
author | Inaky Perez-Gonzalez <inaky@linux.intel.com> | 2009-09-04 14:53:43 -0700 |
---|---|---|
committer | Inaky Perez-Gonzalez <inaky@linux.intel.com> | 2009-10-19 15:55:56 +0900 |
commit | fabce1a485dd985c0e4c16f61f4ddb5e27e49cbf (patch) | |
tree | be682e23feea2e06c6ff7a1a1bb9f2f82b1b27e7 /drivers/net/wimax | |
parent | 923d708fed9d47c7b4d67694500d766337663e29 (diff) | |
download | linux-fabce1a485dd985c0e4c16f61f4ddb5e27e49cbf.tar.bz2 |
wimax/i2400m: verify firmware format version is known
Make sure the bootloading code checks that the format of the file is
understood (major version match). This also fixes a dumb typo in
extracting the major version field.
Signed-off-by: Inaky Perez-Gonzalez <inaky@linux.intel.com>
Diffstat (limited to 'drivers/net/wimax')
-rw-r--r-- | drivers/net/wimax/i2400m/fw.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/net/wimax/i2400m/fw.c b/drivers/net/wimax/i2400m/fw.c index eef236d85af3..1fd2fee4c6c2 100644 --- a/drivers/net/wimax/i2400m/fw.c +++ b/drivers/net/wimax/i2400m/fw.c @@ -1179,7 +1179,7 @@ int i2400m_fw_check(struct i2400m *i2400m, module_type = bcf->module_type; header_len = sizeof(u32) * le32_to_cpu(bcf->header_len); - major_version = le32_to_cpu(bcf->header_version) & 0xffff0000 >> 16; + major_version = (le32_to_cpu(bcf->header_version) & 0xffff0000) >> 16; minor_version = le32_to_cpu(bcf->header_version) & 0x0000ffff; module_id = le32_to_cpu(bcf->module_id); module_vendor = le32_to_cpu(bcf->module_vendor); @@ -1205,6 +1205,12 @@ int i2400m_fw_check(struct i2400m *i2400m, goto error; } + if (major_version != 1) { + dev_err(dev, "%s: major header version v%u.%u not supported\n", + i2400m->fw_name, major_version, minor_version); + goto error; + } + /* Check soft-er errors */ result = 0; if (module_vendor != 0x8086) |