Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 103882
b: refs/heads/master
c: 84a9f33
h: refs/heads/master
v: v3
  • Loading branch information
Al Viro authored and Mauro Carvalho Chehab committed Jul 20, 2008
1 parent 7a1bdc0 commit 00d229e
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 12 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 153755a774578dcf921f8145e786ce25f72368d2
refs/heads/master: 84a9f33614e3cfcc7326629a503d4389c9d84e0f
25 changes: 14 additions & 11 deletions trunk/drivers/media/common/tuners/tuner-xc2028.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
#include <linux/delay.h>
#include <media/tuner.h>
#include <linux/mutex.h>
#include <asm/unaligned.h>
#include "tuner-i2c.h"
#include "tuner-xc2028.h"
#include "tuner-xc2028-types.h"
Expand Down Expand Up @@ -292,10 +293,10 @@ static int load_all_firmwares(struct dvb_frontend *fe)
name[sizeof(name) - 1] = 0;
p += sizeof(name) - 1;

priv->firm_version = le16_to_cpu(*(__u16 *) p);
priv->firm_version = get_unaligned_le16(p);
p += 2;

n_array = le16_to_cpu(*(__u16 *) p);
n_array = get_unaligned_le16(p);
p += 2;

tuner_info("Loading %d firmware images from %s, type: %s, ver %d.%d\n",
Expand Down Expand Up @@ -324,26 +325,26 @@ static int load_all_firmwares(struct dvb_frontend *fe)
}

/* Checks if there's enough bytes to read */
if (p + sizeof(type) + sizeof(id) + sizeof(size) > endp) {
tuner_err("Firmware header is incomplete!\n");
goto corrupt;
}
if (endp - p < sizeof(type) + sizeof(id) + sizeof(size))
goto header;

type = le32_to_cpu(*(__u32 *) p);
type = get_unaligned_le32(p);
p += sizeof(type);

id = le64_to_cpu(*(v4l2_std_id *) p);
id = get_unaligned_le64(p);
p += sizeof(id);

if (type & HAS_IF) {
int_freq = le16_to_cpu(*(__u16 *) p);
int_freq = get_unaligned_le16(p);
p += sizeof(int_freq);
if (endp - p < sizeof(size))
goto header;
}

size = le32_to_cpu(*(__u32 *) p);
size = get_unaligned_le32(p);
p += sizeof(size);

if ((!size) || (size + p > endp)) {
if (!size || size > endp - p) {
tuner_err("Firmware type ");
dump_firm_type(type);
printk("(%x), id %llx is corrupted "
Expand Down Expand Up @@ -382,6 +383,8 @@ static int load_all_firmwares(struct dvb_frontend *fe)

goto done;

header:
tuner_err("Firmware header is incomplete!\n");
corrupt:
rc = -EINVAL;
tuner_err("Error: firmware file is corrupted!\n");
Expand Down

0 comments on commit 00d229e

Please sign in to comment.