summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hansverk@cisco.com>2016-11-04 10:52:10 -0200
committerMauro Carvalho Chehab <mchehab@s-opensource.com>2016-11-16 15:44:44 -0200
commita161bef04286e1344cd469098213a972af8fa7d6 (patch)
treeb23c19866c3a947a3a08cd2d76f1676de3d69a68
parent3145c754aca8182b4cfe301b3cfe6dc8f2cb499c (diff)
downloadlinux-a161bef04286e1344cd469098213a972af8fa7d6.tar.bz2
[media] cec: an inner loop clobbered the outer loop variable
An inner for-loop reused the outer loop variable. This was only noticeable with CEC adapters supporting more than one logical address. Signed-off-by: Hans Verkuil <hansverk@cisco.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
-rw-r--r--drivers/media/cec/cec-adap.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/media/cec/cec-adap.c b/drivers/media/cec/cec-adap.c
index bcd19d41c166..ed76d7050b8a 100644
--- a/drivers/media/cec/cec-adap.c
+++ b/drivers/media/cec/cec-adap.c
@@ -1416,6 +1416,7 @@ int __cec_s_log_addrs(struct cec_adapter *adap,
const u8 feature_sz = ARRAY_SIZE(log_addrs->features[0]);
u8 *features = log_addrs->features[i];
bool op_is_dev_features = false;
+ unsigned j;
log_addrs->log_addr[i] = CEC_LOG_ADDR_INVALID;
if (type_mask & (1 << log_addrs->log_addr_type[i])) {
@@ -1442,19 +1443,19 @@ int __cec_s_log_addrs(struct cec_adapter *adap,
dprintk(1, "unknown logical address type\n");
return -EINVAL;
}
- for (i = 0; i < feature_sz; i++) {
- if ((features[i] & 0x80) == 0) {
+ for (j = 0; j < feature_sz; j++) {
+ if ((features[j] & 0x80) == 0) {
if (op_is_dev_features)
break;
op_is_dev_features = true;
}
}
- if (!op_is_dev_features || i == feature_sz) {
+ if (!op_is_dev_features || j == feature_sz) {
dprintk(1, "malformed features\n");
return -EINVAL;
}
/* Zero unused part of the feature array */
- memset(features + i + 1, 0, feature_sz - i - 1);
+ memset(features + j + 1, 0, feature_sz - j - 1);
}
if (log_addrs->cec_version >= CEC_OP_CEC_VERSION_2_0) {