hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/media/usb/dvb-usb/dw2102.c
....@@ -128,6 +128,10 @@
128128
129129 switch (num) {
130130 case 2:
131
+ if (msg[0].len < 1) {
132
+ num = -EOPNOTSUPP;
133
+ break;
134
+ }
131135 /* read stv0299 register */
132136 value = msg[0].buf[0];/* register */
133137 for (i = 0; i < msg[1].len; i++) {
....@@ -139,6 +143,10 @@
139143 case 1:
140144 switch (msg[0].addr) {
141145 case 0x68:
146
+ if (msg[0].len < 2) {
147
+ num = -EOPNOTSUPP;
148
+ break;
149
+ }
142150 /* write to stv0299 register */
143151 buf6[0] = 0x2a;
144152 buf6[1] = msg[0].buf[0];
....@@ -148,6 +156,10 @@
148156 break;
149157 case 0x60:
150158 if (msg[0].flags == 0) {
159
+ if (msg[0].len < 4) {
160
+ num = -EOPNOTSUPP;
161
+ break;
162
+ }
151163 /* write to tuner pll */
152164 buf6[0] = 0x2c;
153165 buf6[1] = 5;
....@@ -159,6 +171,10 @@
159171 dw210x_op_rw(d->udev, 0xb2, 0, 0,
160172 buf6, 7, DW210X_WRITE_MSG);
161173 } else {
174
+ if (msg[0].len < 1) {
175
+ num = -EOPNOTSUPP;
176
+ break;
177
+ }
162178 /* read from tuner */
163179 dw210x_op_rw(d->udev, 0xb5, 0, 0,
164180 buf6, 1, DW210X_READ_MSG);
....@@ -166,12 +182,20 @@
166182 }
167183 break;
168184 case (DW2102_RC_QUERY):
185
+ if (msg[0].len < 2) {
186
+ num = -EOPNOTSUPP;
187
+ break;
188
+ }
169189 dw210x_op_rw(d->udev, 0xb8, 0, 0,
170190 buf6, 2, DW210X_READ_MSG);
171191 msg[0].buf[0] = buf6[0];
172192 msg[0].buf[1] = buf6[1];
173193 break;
174194 case (DW2102_VOLTAGE_CTRL):
195
+ if (msg[0].len < 1) {
196
+ num = -EOPNOTSUPP;
197
+ break;
198
+ }
175199 buf6[0] = 0x30;
176200 buf6[1] = msg[0].buf[0];
177201 dw210x_op_rw(d->udev, 0xb2, 0, 0,
....@@ -946,7 +970,7 @@
946970 for (i = 0; i < 6; i++) {
947971 obuf[1] = 0xf0 + i;
948972 if (i2c_transfer(&d->i2c_adap, msg, 2) != 2)
949
- break;
973
+ return -1;
950974 else
951975 mac[i] = ibuf[0];
952976 }