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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 16 May 2019 17:42:26 +0000 (19:42 +0200)
[ Upstream commit e81bff39489a06384822bb38ce7a59f9e365bbe9 ]

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>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
drivers/media/cec/cec-api.c

index a079f7fe018c4ab2529f30e6b412ee51aef4bae1..21a5f45e0259e37efc393d33f966985cc03a2fc0 100644 (file)
@@ -113,6 +113,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)
 {
@@ -124,7 +141,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);