hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/media/usb/dvb-usb/az6027.c
....@@ -975,6 +975,10 @@
975975 if (msg[i].addr == 0x99) {
976976 req = 0xBE;
977977 index = 0;
978
+ if (msg[i].len < 1) {
979
+ i = -EOPNOTSUPP;
980
+ break;
981
+ }
978982 value = msg[i].buf[0] & 0x00ff;
979983 length = 1;
980984 az6027_usb_out_op(d, req, value, index, data, length);
....@@ -984,6 +988,10 @@
984988 /* write/read request */
985989 if (i + 1 < num && (msg[i + 1].flags & I2C_M_RD)) {
986990 req = 0xB9;
991
+ if (msg[i].len < 1) {
992
+ i = -EOPNOTSUPP;
993
+ break;
994
+ }
987995 index = (((msg[i].buf[0] << 8) & 0xff00) | (msg[i].buf[1] & 0x00ff));
988996 value = msg[i].addr + (msg[i].len << 8);
989997 length = msg[i + 1].len + 6;
....@@ -997,6 +1005,10 @@
9971005
9981006 /* demod 16bit addr */
9991007 req = 0xBD;
1008
+ if (msg[i].len < 1) {
1009
+ i = -EOPNOTSUPP;
1010
+ break;
1011
+ }
10001012 index = (((msg[i].buf[0] << 8) & 0xff00) | (msg[i].buf[1] & 0x00ff));
10011013 value = msg[i].addr + (2 << 8);
10021014 length = msg[i].len - 2;
....@@ -1022,6 +1034,10 @@
10221034 } else {
10231035
10241036 req = 0xBD;
1037
+ if (msg[i].len < 1) {
1038
+ i = -EOPNOTSUPP;
1039
+ break;
1040
+ }
10251041 index = msg[i].buf[0] & 0x00FF;
10261042 value = msg[i].addr + (1 << 8);
10271043 length = msg[i].len - 1;