According to mass storage specification:

"Logical Unit Numbers on the device shall be numbered contiguously
 starting from LUN 0 to a maximum LUN of 15 (Fh)"

So don't allow to bind ms function unless we have at least LUN0
and LUNs ids are contiguous.

Signed-off-by: Krzysztof Opasiak <k.opas...@samsung.com>
---
 drivers/usb/gadget/function/f_mass_storage.c |   29 ++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/drivers/usb/gadget/function/f_mass_storage.c 
b/drivers/usb/gadget/function/f_mass_storage.c
index 2e8f37e..19b31d7 100644
--- a/drivers/usb/gadget/function/f_mass_storage.c
+++ b/drivers/usb/gadget/function/f_mass_storage.c
@@ -3065,6 +3065,35 @@ static int fsg_bind(struct usb_configuration *c, struct 
usb_function *f)
        int                     ret;
        struct fsg_opts         *opts;
 
+       /*
+        * Don't allow to bind if we don't have at least one LUN
+        * or LUNs ids are not contiguous.
+        */
+       if (likely(common->luns)) {
+               bool found_null = false;
+
+               for (i = 0; i < common->nluns; ++i) {
+                       if (!common->luns[i]) {
+                               found_null = true;
+                               continue;
+                       }
+
+                       if (!found_null) {
+                               continue;
+                       } else {
+                               pr_err("LUN ids should be contiguous.\n");
+                               return -EINVAL;
+                       }
+               }
+
+               if (i == 0 || !common->luns[i]) {
+                       pr_err("There should be at least one LUN.\n");
+                       return -EINVAL;
+               }
+       } else {
+               return -EINVAL;
+       }
+
        opts = fsg_opts_from_func_inst(f->fi);
        if (!opts->no_configfs) {
                ret = fsg_common_set_cdev(fsg->common, c->cdev,
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in

Reply via email to