]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
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)
committerJuerg Haefliger <juergh@canonical.com>
Wed, 24 Jul 2019 01:58:28 +0000 (19:58 -0600)
BugLink: https://bugs.launchpad.net/bugs/1836802
commit e81bff39489a06384822bb38ce7a59f9e365bbe9 upstream.

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: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
Signed-off-by: Khalid Elmously <khalid.elmously@canonical.com>
drivers/media/cec/cec-api.c

index 3dba3aa34a430990be79769e1be188d8c61b8189..a89c3505fd4d1ada6efea88c1636f6176cd02788 100644 (file)
@@ -114,6 +114,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)
 {
@@ -125,7 +142,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);