media: cec: cec_transmit_msg_fh: do sanity checks first
authorHans Verkuil <hverkuil-cisco@xs4all.nl>
Tue, 23 Apr 2019 12:37:39 +0000 (08:37 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Thu, 23 May 2019 09:30:47 +0000 (05:30 -0400)
The code that fills in the CEC_MSG_CDC_MESSAGE physical address
is now done after the sanity checks. It also only does this if the
message length is >= 4 (i.e. there is room for the physical address).

Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/cec/cec-adap.c

index f1261cc2b6fa58b4cefa96f8fcc9731ba08b2c4c..b6102510e2031b06a34da9f0b35bc7ae051b2949 100644 (file)
@@ -740,11 +740,6 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
        else
                msg->flags = 0;
 
-       if (msg->len > 1 && msg->msg[1] == CEC_MSG_CDC_MESSAGE) {
-               msg->msg[2] = adap->phys_addr >> 8;
-               msg->msg[3] = adap->phys_addr & 0xff;
-       }
-
        /* Sanity checks */
        if (msg->len == 0 || msg->len > CEC_MAX_MSG_SIZE) {
                dprintk(1, "%s: invalid length %d\n", __func__, msg->len);
@@ -765,6 +760,12 @@ int cec_transmit_msg_fh(struct cec_adapter *adap, struct cec_msg *msg,
                dprintk(1, "%s: can't reply to poll msg\n", __func__);
                return -EINVAL;
        }
+
+       if (msg->len >= 4 && msg->msg[1] == CEC_MSG_CDC_MESSAGE) {
+               msg->msg[2] = adap->phys_addr >> 8;
+               msg->msg[3] = adap->phys_addr & 0xff;
+       }
+
        if (msg->len == 1) {
                if (cec_msg_destination(msg) == 0xf) {
                        dprintk(1, "%s: invalid poll message\n", __func__);