]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/media/cec/cec-api.c
media: cec: integrate cec_validate_phys_addr() in cec-api.c
[mirror_ubuntu-bionic-kernel.git] / 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);