Showing error 1855

User: Jiri Slaby
Error type: Invalid Pointer Dereference
Error type description: A pointer which is invalid is being dereferenced
File location: drivers/uwb/wlp/messages.c
Line in file: 646
Project: Linux Kernel
Project version: 2.6.28
Tools: Smatch (1.59)
Entered: 2013-09-11 08:47:26 UTC


Source:

 616                cur = (void *)cur + used;
 617                result = wlp_get_wss_info(wlp, cur, buflen - used, &wssid,
 618                                          &wss_info);
 619                if (result == -ENODATA) {
 620                        result = used;
 621                        goto out;
 622                } else if (result < 0) {
 623                        dev_err(dev, "WLP: Unable to parse WSS information "
 624                                "from WSS information attribute. \n");
 625                        result = -EINVAL;
 626                        goto error_parse;
 627                }
 628                if (enroll && !memcmp(&wssid, &wss->wssid, sizeof(wssid))) {
 629                        if (wss_info.accept_enroll != 1) {
 630                                dev_err(dev, "WLP: Requested WSS does "
 631                                        "not accept enrollment.\n");
 632                                result = -EINVAL;
 633                                goto out;
 634                        }
 635                        memcpy(wss->name, wss_info.name, sizeof(wss->name));
 636                        wss->bcast = wss_info.bcast;
 637                        wss->secure_status = wss_info.sec_status;
 638                        wss->accept_enroll = wss_info.accept_enroll;
 639                        wss->state = WLP_WSS_STATE_PART_ENROLLED;
 640                        wlp_wss_uuid_print(buf, sizeof(buf), &wssid);
 641                        d_printf(2, dev, "WLP: Found WSS %s. Enrolling.\n",
 642                                 buf);
 643                } else {
 644                        wssid_e = wlp_create_wssid_e(wlp, neighbor);
 645                        if (wssid_e == NULL) {
 646                                dev_err(dev, "WLP: Cannot create new WSSID "
 647                                        "entry for neighbor %02x:%02x.\n",
 648                                        neighbor->uwb_dev->dev_addr.data[1],
 649                                        neighbor->uwb_dev->dev_addr.data[0]);
 650                                result = -ENOMEM;
 651                                goto out;
 652                        }
 653                        wssid_e->wssid = wssid;
 654                        *wssid_e->info = wss_info;
 655                }
 656                used += result;
Show full sources