diff options
| author | Ingo Molnar <mingo@elte.hu> | 2010-07-21 21:45:02 +0200 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2010-07-21 21:45:08 +0200 |
| commit | dca45ad8af54963c005393a484ad117b8ba6150f (patch) | |
| tree | 7c9a6966283a6bb12b54e5680a67d203be292930 /drivers/usb/gadget/g_ffs.c | |
| parent | 68c38fc3cb4e5a60f502ee9c45f3dfe70e5165ad (diff) | |
| parent | cd5b8f8755a89a57fc8c408d284b8b613f090345 (diff) | |
Merge branch 'linus' into sched/core
Merge reason: Move from the -rc3 to the almost-rc6 base.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'drivers/usb/gadget/g_ffs.c')
| -rw-r--r-- | drivers/usb/gadget/g_ffs.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/usb/gadget/g_ffs.c b/drivers/usb/gadget/g_ffs.c index 4b0e4a040d6..d1af253a910 100644 --- a/drivers/usb/gadget/g_ffs.c +++ b/drivers/usb/gadget/g_ffs.c @@ -392,6 +392,17 @@ static int __gfs_do_config(struct usb_configuration *c, if (unlikely(ret < 0)) return ret; + /* After previous do_configs there may be some invalid + * pointers in c->interface array. This happens every time + * a user space function with fewer interfaces than a user + * space function that was run before the new one is run. The + * compasit's set_config() assumes that if there is no more + * then MAX_CONFIG_INTERFACES interfaces in a configuration + * then there is a NULL pointer after the last interface in + * c->interface array. We need to make sure this is true. */ + if (c->next_interface_id < ARRAY_SIZE(c->interface)) + c->interface[c->next_interface_id] = NULL; + return 0; } |
