Message ID | 20200402043210.2342-1-sallenki@codeaurora.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | usb: f_fs: Clear OS Extended descriptor counts to zero in ffs_data_reset() | expand |
On 4/2/2020 10:02 AM, Sriharsha Allenki wrote: > From: Udipto Goswami <ugoswami@codeaurora.org> > > For userspace functions using OS Descriptors, if a function also supplies > Extended Property descriptors currently the counts and lengths stored in > the ms_os_descs_ext_prop_{count,name_len,data_len} variables are not > getting reset to 0 during an unbind or when the epfiles are closed. If > the same function is re-bound and the descriptors are re-written, this > results in those count/length variables to monotonically increase > causing the VLA allocation in _ffs_func_bind() to grow larger and larger > at each bind/unbind cycle and eventually fail to allocate. > > Fix this by clearing the ms_os_descs_ext_prop count & lengths to 0 in > ffs_data_reset(). > > Change-Id: I3b292fe5386ab54b53df2b9f15f07430dc3df24a Please remove this. > Fixes: f0175ab51993 ("usb: gadget: f_fs: OS descriptors support") > Cc: stable@vger.kernel.org > Signed-off-by: Udipto Goswami <ugoswami@codeaurora.org> > Signed-off-by: Sriharsha Allenki <sallenki@codeaurora.org> > --- > drivers/usb/gadget/function/f_fs.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c > index c81023b195c3..10f01f974f67 100644 > --- a/drivers/usb/gadget/function/f_fs.c > +++ b/drivers/usb/gadget/function/f_fs.c > @@ -1813,6 +1813,10 @@ static void ffs_data_reset(struct ffs_data *ffs) > ffs->state = FFS_READ_DESCRIPTORS; > ffs->setup_state = FFS_NO_SETUP; > ffs->flags = 0; > + > + ffs->ms_os_descs_ext_prop_count = 0; > + ffs->ms_os_descs_ext_prop_name_len = 0; > + ffs->ms_os_descs_ext_prop_data_len = 0; > } > > Reviewed-by: Manu Gautam <mgautam@codeaurora.org>
Hi, On 4/2/2020 10:10 AM, Manu Gautam wrote: > On 4/2/2020 10:02 AM, Sriharsha Allenki wrote: >> From: Udipto Goswami <ugoswami@codeaurora.org> >> >> For userspace functions using OS Descriptors, if a function also supplies >> Extended Property descriptors currently the counts and lengths stored in >> the ms_os_descs_ext_prop_{count,name_len,data_len} variables are not >> getting reset to 0 during an unbind or when the epfiles are closed. If >> the same function is re-bound and the descriptors are re-written, this >> results in those count/length variables to monotonically increase >> causing the VLA allocation in _ffs_func_bind() to grow larger and larger >> at each bind/unbind cycle and eventually fail to allocate. >> >> Fix this by clearing the ms_os_descs_ext_prop count & lengths to 0 in >> ffs_data_reset(). >> >> Change-Id: I3b292fe5386ab54b53df2b9f15f07430dc3df24a > Please remove this. Thanks Manu, sent v2 after removing it. >> Fixes: f0175ab51993 ("usb: gadget: f_fs: OS descriptors support") >> Cc: stable@vger.kernel.org >> Signed-off-by: Udipto Goswami <ugoswami@codeaurora.org> >> Signed-off-by: Sriharsha Allenki <sallenki@codeaurora.org> >> --- >> drivers/usb/gadget/function/f_fs.c | 4 ++++ >> 1 file changed, 4 insertions(+) >> >> diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c >> index c81023b195c3..10f01f974f67 100644 >> --- a/drivers/usb/gadget/function/f_fs.c >> +++ b/drivers/usb/gadget/function/f_fs.c >> @@ -1813,6 +1813,10 @@ static void ffs_data_reset(struct ffs_data *ffs) >> ffs->state = FFS_READ_DESCRIPTORS; >> ffs->setup_state = FFS_NO_SETUP; >> ffs->flags = 0; >> + >> + ffs->ms_os_descs_ext_prop_count = 0; >> + ffs->ms_os_descs_ext_prop_name_len = 0; >> + ffs->ms_os_descs_ext_prop_data_len = 0; >> } >> >> > Reviewed-by: Manu Gautam <mgautam@codeaurora.org> Thanks, Sriharsha
diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index c81023b195c3..10f01f974f67 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c @@ -1813,6 +1813,10 @@ static void ffs_data_reset(struct ffs_data *ffs) ffs->state = FFS_READ_DESCRIPTORS; ffs->setup_state = FFS_NO_SETUP; ffs->flags = 0; + + ffs->ms_os_descs_ext_prop_count = 0; + ffs->ms_os_descs_ext_prop_name_len = 0; + ffs->ms_os_descs_ext_prop_data_len = 0; }