Import G955FXXUCDUD1/G950FXXUCDUD1+N950FXXSGDUG7 kernel source
[GitHub/exynos8895/android_kernel_samsung_universal8895.git] / drivers / media / usb / uvc / uvc_driver.c
index f2e3fdf385cc28dc601ee9f02d87a6c540f84360..83d43aa625fabc228e55012c3a0aa5e23b20137b 100644 (file)
@@ -1411,6 +1411,11 @@ static int uvc_scan_chain_forward(struct uvc_video_chain *chain,
                        break;
                if (forward == prev)
                        continue;
+               if (forward->chain.next || forward->chain.prev) {
+                       uvc_trace(UVC_TRACE_DESCR, "Found reference to "
+                               "entity %d already in chain.\n", forward->id);
+                       return -EINVAL;
+               }
 
                switch (UVC_ENTITY_TYPE(forward)) {
                case UVC_VC_EXTENSION_UNIT:
@@ -1492,6 +1497,13 @@ static int uvc_scan_chain_backward(struct uvc_video_chain *chain,
                                return -1;
                        }
 
+                       if (term->chain.next || term->chain.prev) {
+                               uvc_trace(UVC_TRACE_DESCR, "Found reference to "
+                                       "entity %d already in chain.\n",
+                                       term->id);
+                               return -EINVAL;
+                       }
+
                        if (uvc_trace_param & UVC_TRACE_PROBE)
                                printk(" %d", term->id);