diff options
-rw-r--r-- | drivers/media/firewire/firedtv-avc.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/media/firewire/firedtv-avc.c b/drivers/media/firewire/firedtv-avc.c index d1a1a1324ef8..ac17567f0822 100644 --- a/drivers/media/firewire/firedtv-avc.c +++ b/drivers/media/firewire/firedtv-avc.c | |||
@@ -1157,6 +1157,10 @@ int avc_ca_pmt(struct firedtv *fdtv, char *msg, int length) | |||
1157 | if (pmt_cmd_id != 1 && pmt_cmd_id != 4) | 1157 | if (pmt_cmd_id != 1 && pmt_cmd_id != 4) |
1158 | dev_err(fdtv->device, | 1158 | dev_err(fdtv->device, |
1159 | "invalid pmt_cmd_id %d\n", pmt_cmd_id); | 1159 | "invalid pmt_cmd_id %d\n", pmt_cmd_id); |
1160 | if (program_info_length > sizeof(c->operand) - write_pos) { | ||
1161 | ret = -EINVAL; | ||
1162 | goto out; | ||
1163 | } | ||
1160 | 1164 | ||
1161 | memcpy(&c->operand[write_pos], &msg[read_pos], | 1165 | memcpy(&c->operand[write_pos], &msg[read_pos], |
1162 | program_info_length); | 1166 | program_info_length); |
@@ -1180,6 +1184,11 @@ int avc_ca_pmt(struct firedtv *fdtv, char *msg, int length) | |||
1180 | dev_err(fdtv->device, "invalid pmt_cmd_id %d " | 1184 | dev_err(fdtv->device, "invalid pmt_cmd_id %d " |
1181 | "at stream level\n", pmt_cmd_id); | 1185 | "at stream level\n", pmt_cmd_id); |
1182 | 1186 | ||
1187 | if (es_info_length > sizeof(c->operand) - write_pos) { | ||
1188 | ret = -EINVAL; | ||
1189 | goto out; | ||
1190 | } | ||
1191 | |||
1183 | memcpy(&c->operand[write_pos], &msg[read_pos], | 1192 | memcpy(&c->operand[write_pos], &msg[read_pos], |
1184 | es_info_length); | 1193 | es_info_length); |
1185 | read_pos += es_info_length; | 1194 | read_pos += es_info_length; |