Browse Source

usbutils check all memory allocation

nfactor-troky
Kano 12 years ago
parent
commit
5b7e435f60
  1. 26
      usbutils.c

26
usbutils.c

@ -644,6 +644,8 @@ static void append(char **buf, char *append, size_t *off, size_t *len)
{ {
*len *= 2; *len *= 2;
*buf = realloc(*buf, *len); *buf = realloc(*buf, *len);
if (unlikely(!*buf))
quit(1, "USB failed to realloc append");
} }
strcpy(*buf + *off, append); strcpy(*buf + *off, append);
@ -857,6 +859,8 @@ void usb_all(int level)
{ {
len = 10000; len = 10000;
buf = malloc(len+1); buf = malloc(len+1);
if (unlikely(!buf))
quit(1, "USB failed to malloc buf in usb_all");
sprintf(buf, "USB all: found %d devices", (int)count); sprintf(buf, "USB all: found %d devices", (int)count);
off = strlen(buf); off = strlen(buf);
@ -895,6 +899,8 @@ static void cgusb_check_init()
} }
usb_commands = malloc(sizeof(*usb_commands) * C_MAX); usb_commands = malloc(sizeof(*usb_commands) * C_MAX);
if (unlikely(!usb_commands))
quit(1, "USB failed to malloc usb_commands");
// use constants so the stat generation is very quick // use constants so the stat generation is very quick
// and the association between number and name can't // and the association between number and name can't
@ -1098,6 +1104,8 @@ static void add_in_use(uint8_t bus_number, uint8_t device_address)
} }
in_use_tmp = calloc(1, sizeof(*in_use_tmp)); in_use_tmp = calloc(1, sizeof(*in_use_tmp));
if (unlikely(!in_use_tmp))
quit(1, "USB failed to calloc in_use_tmp");
in_use_tmp->in_use.bus_number = (int)bus_number; in_use_tmp->in_use.bus_number = (int)bus_number;
in_use_tmp->in_use.device_address = (int)device_address; in_use_tmp->in_use.device_address = (int)device_address;
in_use_tmp->next = in_use_head; in_use_tmp->next = in_use_head;
@ -1154,6 +1162,8 @@ static bool cgminer_usb_lock_bd(struct device_drv *drv, uint8_t bus_number, uint
applog(LOG_DEBUG, "USB lock %s %d-%d", drv->dname, (int)bus_number, (int)device_address); applog(LOG_DEBUG, "USB lock %s %d-%d", drv->dname, (int)bus_number, (int)device_address);
res_work = calloc(1, sizeof(*res_work)); res_work = calloc(1, sizeof(*res_work));
if (unlikely(!res_work))
quit(1, "USB failed to calloc lock res_work");
res_work->lock = true; res_work->lock = true;
res_work->dname = (const char *)(drv->dname); res_work->dname = (const char *)(drv->dname);
res_work->bus_number = bus_number; res_work->bus_number = bus_number;
@ -1215,6 +1225,8 @@ static void cgminer_usb_unlock_bd(struct device_drv *drv, uint8_t bus_number, ui
applog(LOG_DEBUG, "USB unlock %s %d-%d", drv->dname, (int)bus_number, (int)device_address); applog(LOG_DEBUG, "USB unlock %s %d-%d", drv->dname, (int)bus_number, (int)device_address);
res_work = calloc(1, sizeof(*res_work)); res_work = calloc(1, sizeof(*res_work));
if (unlikely(!res_work))
quit(1, "USB failed to calloc unlock res_work");
res_work->lock = false; res_work->lock = false;
res_work->dname = (const char *)(drv->dname); res_work->dname = (const char *)(drv->dname);
res_work->bus_number = bus_number; res_work->bus_number = bus_number;
@ -1334,6 +1346,8 @@ static int _usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct u
cgpu->usbinfo.bus_number, cgpu->usbinfo.device_address); cgpu->usbinfo.bus_number, cgpu->usbinfo.device_address);
cgusb = calloc(1, sizeof(*cgusb)); cgusb = calloc(1, sizeof(*cgusb));
if (unlikely(!cgusb))
quit(1, "USB failed to calloc _usb_init cgusb");
cgusb->found = found; cgusb->found = found;
if (found->idVendor == IDVENDOR_FTDI) if (found->idVendor == IDVENDOR_FTDI)
@ -1342,6 +1356,8 @@ static int _usb_init(struct cgpu_info *cgpu, struct libusb_device *dev, struct u
cgusb->ident = found->ident; cgusb->ident = found->ident;
cgusb->descriptor = calloc(1, sizeof(*(cgusb->descriptor))); cgusb->descriptor = calloc(1, sizeof(*(cgusb->descriptor)));
if (unlikely(!cgusb->descriptor))
quit(1, "USB failed to calloc _usb_init cgusb descriptor");
err = libusb_get_device_descriptor(dev, cgusb->descriptor); err = libusb_get_device_descriptor(dev, cgusb->descriptor);
if (err) { if (err) {
@ -1642,6 +1658,8 @@ static struct usb_find_devices *usb_check_each(int drvnum, struct device_drv *dr
if (find_dev[i].drv == drvnum) { if (find_dev[i].drv == drvnum) {
if (usb_check_device(drv, dev, &(find_dev[i]))) { if (usb_check_device(drv, dev, &(find_dev[i]))) {
found = malloc(sizeof(*found)); found = malloc(sizeof(*found));
if (unlikely(!found))
quit(1, "USB failed to malloc found");
memcpy(found, &(find_dev[i]), sizeof(*found)); memcpy(found, &(find_dev[i]), sizeof(*found));
return found; return found;
} }
@ -1879,13 +1897,13 @@ static void newstats(struct cgpu_info *cgpu)
mutex_unlock(&cgusb_lock); mutex_unlock(&cgusb_lock);
usb_stats = realloc(usb_stats, sizeof(*usb_stats) * next_stat); usb_stats = realloc(usb_stats, sizeof(*usb_stats) * next_stat);
if (!usb_stats) if (unlikely(!usb_stats))
quit(1, "USB failed to realloc usb_stats %d", next_stat); quit(1, "USB failed to realloc usb_stats %d", next_stat);
usb_stats[next_stat-1].name = cgpu->drv->name; usb_stats[next_stat-1].name = cgpu->drv->name;
usb_stats[next_stat-1].device_id = -1; usb_stats[next_stat-1].device_id = -1;
usb_stats[next_stat-1].details = calloc(1, sizeof(struct cg_usb_stats_details) * C_MAX * 2); usb_stats[next_stat-1].details = calloc(1, sizeof(struct cg_usb_stats_details) * C_MAX * 2);
if (!usb_stats[next_stat-1].details) if (unlikely(!usb_stats[next_stat-1].details))
quit(1, "USB failed to calloc details for %d", next_stat); quit(1, "USB failed to calloc details for %d", next_stat);
for (i = 1; i < C_MAX * 2; i += 2) for (i = 1; i < C_MAX * 2; i += 2)
@ -2374,6 +2392,8 @@ void usb_initialise()
} }
busdev = realloc(busdev, sizeof(*busdev) * (++busdev_count)); busdev = realloc(busdev, sizeof(*busdev) * (++busdev_count));
if (unlikely(!busdev))
quit(1, "USB failed to realloc busdev");
busdev[busdev_count-1].bus_number = bus; busdev[busdev_count-1].bus_number = bus;
busdev[busdev_count-1].device_address = dev; busdev[busdev_count-1].device_address = dev;
@ -2799,6 +2819,8 @@ static void resource_process()
ok); ok);
res_reply = calloc(1, sizeof(*res_reply)); res_reply = calloc(1, sizeof(*res_reply));
if (unlikely(!res_reply))
quit(1, "USB failed to calloc res_reply");
res_reply->bus_number = res_work_head->bus_number; res_reply->bus_number = res_work_head->bus_number;
res_reply->device_address = res_work_head->device_address; res_reply->device_address = res_work_head->device_address;

Loading…
Cancel
Save