diff options
Diffstat (limited to 'drivers/usb/gadget/function/f_fs.c')
-rw-r--r-- | drivers/usb/gadget/function/f_fs.c | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index 73515d54e1cc..cc33d2667408 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c | |||
@@ -2051,7 +2051,7 @@ static int __ffs_data_do_os_desc(enum ffs_os_desc_type type, | |||
2051 | 2051 | ||
2052 | if (len < sizeof(*d) || | 2052 | if (len < sizeof(*d) || |
2053 | d->bFirstInterfaceNumber >= ffs->interfaces_count || | 2053 | d->bFirstInterfaceNumber >= ffs->interfaces_count || |
2054 | d->Reserved1) | 2054 | !d->Reserved1) |
2055 | return -EINVAL; | 2055 | return -EINVAL; |
2056 | for (i = 0; i < ARRAY_SIZE(d->Reserved2); ++i) | 2056 | for (i = 0; i < ARRAY_SIZE(d->Reserved2); ++i) |
2057 | if (d->Reserved2[i]) | 2057 | if (d->Reserved2[i]) |
@@ -2729,6 +2729,7 @@ static int _ffs_func_bind(struct usb_configuration *c, | |||
2729 | func->ffs->ss_descs_count; | 2729 | func->ffs->ss_descs_count; |
2730 | 2730 | ||
2731 | int fs_len, hs_len, ss_len, ret, i; | 2731 | int fs_len, hs_len, ss_len, ret, i; |
2732 | struct ffs_ep *eps_ptr; | ||
2732 | 2733 | ||
2733 | /* Make it a single chunk, less management later on */ | 2734 | /* Make it a single chunk, less management later on */ |
2734 | vla_group(d); | 2735 | vla_group(d); |
@@ -2777,12 +2778,9 @@ static int _ffs_func_bind(struct usb_configuration *c, | |||
2777 | ffs->raw_descs_length); | 2778 | ffs->raw_descs_length); |
2778 | 2779 | ||
2779 | memset(vla_ptr(vlabuf, d, inums), 0xff, d_inums__sz); | 2780 | memset(vla_ptr(vlabuf, d, inums), 0xff, d_inums__sz); |
2780 | for (ret = ffs->eps_count; ret; --ret) { | 2781 | eps_ptr = vla_ptr(vlabuf, d, eps); |
2781 | struct ffs_ep *ptr; | 2782 | for (i = 0; i < ffs->eps_count; i++) |
2782 | 2783 | eps_ptr[i].num = -1; | |
2783 | ptr = vla_ptr(vlabuf, d, eps); | ||
2784 | ptr[ret].num = -1; | ||
2785 | } | ||
2786 | 2784 | ||
2787 | /* Save pointers | 2785 | /* Save pointers |
2788 | * d_eps == vlabuf, func->eps used to kfree vlabuf later | 2786 | * d_eps == vlabuf, func->eps used to kfree vlabuf later |
@@ -2851,7 +2849,7 @@ static int _ffs_func_bind(struct usb_configuration *c, | |||
2851 | goto error; | 2849 | goto error; |
2852 | 2850 | ||
2853 | func->function.os_desc_table = vla_ptr(vlabuf, d, os_desc_table); | 2851 | func->function.os_desc_table = vla_ptr(vlabuf, d, os_desc_table); |
2854 | if (c->cdev->use_os_string) | 2852 | if (c->cdev->use_os_string) { |
2855 | for (i = 0; i < ffs->interfaces_count; ++i) { | 2853 | for (i = 0; i < ffs->interfaces_count; ++i) { |
2856 | struct usb_os_desc *desc; | 2854 | struct usb_os_desc *desc; |
2857 | 2855 | ||
@@ -2862,13 +2860,15 @@ static int _ffs_func_bind(struct usb_configuration *c, | |||
2862 | vla_ptr(vlabuf, d, ext_compat) + i * 16; | 2860 | vla_ptr(vlabuf, d, ext_compat) + i * 16; |
2863 | INIT_LIST_HEAD(&desc->ext_prop); | 2861 | INIT_LIST_HEAD(&desc->ext_prop); |
2864 | } | 2862 | } |
2865 | ret = ffs_do_os_descs(ffs->ms_os_descs_count, | 2863 | ret = ffs_do_os_descs(ffs->ms_os_descs_count, |
2866 | vla_ptr(vlabuf, d, raw_descs) + | 2864 | vla_ptr(vlabuf, d, raw_descs) + |
2867 | fs_len + hs_len + ss_len, | 2865 | fs_len + hs_len + ss_len, |
2868 | d_raw_descs__sz - fs_len - hs_len - ss_len, | 2866 | d_raw_descs__sz - fs_len - hs_len - |
2869 | __ffs_func_bind_do_os_desc, func); | 2867 | ss_len, |
2870 | if (unlikely(ret < 0)) | 2868 | __ffs_func_bind_do_os_desc, func); |
2871 | goto error; | 2869 | if (unlikely(ret < 0)) |
2870 | goto error; | ||
2871 | } | ||
2872 | func->function.os_desc_n = | 2872 | func->function.os_desc_n = |
2873 | c->cdev->use_os_string ? ffs->interfaces_count : 0; | 2873 | c->cdev->use_os_string ? ffs->interfaces_count : 0; |
2874 | 2874 | ||