media: cec: integrate cec_validate_phys_addr() in cec-api.c
authorHans Verkuil <hans.verkuil@cisco.com>
Thu, 13 Sep 2018 07:36:29 +0000 (03:36 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Mon, 24 Sep 2018 13:11:01 +0000 (09:11 -0400)
The cec_phys_addr_validate() function will be moved to V4L2,
so use a simplified variant of that function in cec-api.c.
cec now no longer calls cec_phys_addr_validate() and it can
be safely moved to V4L2.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Cc: <stable@vger.kernel.org> # for v4.17 and up
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/cec/cec-api.c

index 19170b1..391b6fd 100644 (file)
@@ -101,6 +101,23 @@ static long cec_adap_g_phys_addr(struct cec_adapter *adap,
        return 0;
 }
 
+static int cec_validate_phys_addr(u16 phys_addr)
+{
+       int i;
+
+       if (phys_addr == CEC_PHYS_ADDR_INVALID)
+               return 0;
+       for (i = 0; i < 16; i += 4)
+               if (phys_addr & (0xf << i))
+                       break;
+       if (i == 16)
+               return 0;
+       for (i += 4; i < 16; i += 4)
+               if ((phys_addr & (0xf << i)) == 0)
+                       return -EINVAL;
+       return 0;
+}
+
 static long cec_adap_s_phys_addr(struct cec_adapter *adap, struct cec_fh *fh,
                                 bool block, __u16 __user *parg)
 {
@@ -112,7 +129,7 @@ static long cec_adap_s_phys_addr(struct cec_adapter *adap, struct cec_fh *fh,
        if (copy_from_user(&phys_addr, parg, sizeof(phys_addr)))
                return -EFAULT;
 
-       err = cec_phys_addr_validate(phys_addr, NULL, NULL);
+       err = cec_validate_phys_addr(phys_addr);
        if (err)
                return err;
        mutex_lock(&adap->lock);