std_scan_complete(): Catch some errors to avoid segfaults.
Check some variables for NULL before dereference to avoid segfaults due to buggy drivers (and show error messages so these issues are noticed early).
This commit is contained in:
parent
43376f3324
commit
39fcfdc9da
15
src/std.c
15
src/std.c
|
@ -378,18 +378,29 @@ SR_PRIV GSList *std_dev_list(const struct sr_dev_driver *di)
|
||||||
* }
|
* }
|
||||||
* @endcode
|
* @endcode
|
||||||
*
|
*
|
||||||
* @param di The driver instance to use.
|
* @param di The driver instance to use. Must not be NULL.
|
||||||
* @param devices List of newly discovered devices (struct sr_dev_inst).
|
* @param devices List of newly discovered devices (struct sr_dev_inst).
|
||||||
*
|
*
|
||||||
* @return The @p devices list.
|
* @return The @p devices list.
|
||||||
*/
|
*/
|
||||||
SR_PRIV GSList *std_scan_complete(struct sr_dev_driver *di, GSList *devices)
|
SR_PRIV GSList *std_scan_complete(struct sr_dev_driver *di, GSList *devices)
|
||||||
{
|
{
|
||||||
struct drv_context *drvc = di->context;
|
struct drv_context *drvc;
|
||||||
GSList *l;
|
GSList *l;
|
||||||
|
|
||||||
|
if (!di) {
|
||||||
|
sr_err("Invalid driver instance (di), cannot complete scan.");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
drvc = di->context;
|
||||||
|
|
||||||
for (l = devices; l; l = l->next) {
|
for (l = devices; l; l = l->next) {
|
||||||
struct sr_dev_inst *sdi = l->data;
|
struct sr_dev_inst *sdi = l->data;
|
||||||
|
if (!sdi) {
|
||||||
|
sr_err("Invalid driver instance, cannot complete scan.");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
sdi->driver = di;
|
sdi->driver = di;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue