Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset c0ea739 in mainline


Ignore:
Timestamp:
2018-11-09T22:03:24Z (3 years ago)
Author:
Jiří Zárevúcky <zarevucky.jiri@…>
Branches:
lfn, master
Children:
b9a2725
Parents:
88e43bc
git-author:
Jiří Zárevúcky <zarevucky.jiri@…> (2018-11-08 01:00:44)
git-committer:
Jiří Zárevúcky <zarevucky.jiri@…> (2018-11-09 22:03:24)
Message:

Allow sysinfo_create_path() to fail gracefully

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/sysinfo/sysinfo.c

    r88e43bc rc0ea739  
    205205                *psubtree =
    206206                    (sysinfo_item_t *) slab_alloc(sysinfo_item_cache, 0);
    207                 assert(*psubtree);
     207                if (!*psubtree)
     208                        return NULL;
    208209
    209210                /* Fill in item name up to the delimiter */
    210211                (*psubtree)->name = str_ndup(name, i);
    211                 assert((*psubtree)->name);
     212                if (!(*psubtree)->name) {
     213                        slab_free(sysinfo_item_cache, *psubtree);
     214                        return NULL;
     215                }
    212216
    213217                /* Create subtree items */
    214218                if (name[i] == '.') {
    215219                        (*psubtree)->subtree_type = SYSINFO_SUBTREE_TABLE;
    216                         return sysinfo_create_path(name + i + 1,
     220                        sysinfo_item_t *item = sysinfo_create_path(name + i + 1,
    217221                            &((*psubtree)->subtree.table));
     222                        if (!item) {
     223                                free((*psubtree)->name);
     224                                slab_free(sysinfo_item_cache, *psubtree);
     225                        }
     226                        return item;
    218227                }
    219228
     
    272281                        sysinfo_item_t *item =
    273282                            (sysinfo_item_t *) slab_alloc(sysinfo_item_cache, 0);
    274                         assert(item);
     283                        if (!item)
     284                                return NULL;
    275285
    276286                        cur->next = item;
     
    278288                        /* Fill in item name up to the delimiter */
    279289                        item->name = str_ndup(name, i);
    280                         assert(item->name);
     290                        if (!item->name) {
     291                                slab_free(sysinfo_item_cache, item);
     292                                return NULL;
     293                        }
    281294
    282295                        /* Create subtree items */
    283296                        if (name[i] == '.') {
    284297                                item->subtree_type = SYSINFO_SUBTREE_TABLE;
    285                                 return sysinfo_create_path(name + i + 1,
    286                                     &(item->subtree.table));
     298                                sysinfo_item_t *sub = sysinfo_create_path(
     299                                    name + i + 1, &(item->subtree.table));
     300                                if (!sub) {
     301                                        free(item->name);
     302                                        slab_free(sysinfo_item_cache, item);
     303                                        return NULL;
     304                                }
     305                                return sub;
    287306                        }
    288307
     
    318337                item->val_type = SYSINFO_VAL_VAL;
    319338                item->val.val = val;
     339        } else {
     340                printf("Could not set sysinfo item %s.\n", name);
    320341        }
    321342
     
    350371                item->val.data.data = data;
    351372                item->val.data.size = size;
     373        } else {
     374                printf("Could not set sysinfo item %s.\n", name);
    352375        }
    353376
     
    378401                item->val.gen_val.fn = fn;
    379402                item->val.gen_val.data = data;
     403        } else {
     404                printf("Could not set sysinfo item %s.\n", name);
    380405        }
    381406
     
    411436                item->val.gen_data.fn = fn;
    412437                item->val.gen_data.data = data;
     438        } else {
     439                printf("Could not set sysinfo item %s.\n", name);
    413440        }
    414441
     
    434461        if (item != NULL)
    435462                item->val_type = SYSINFO_VAL_UNDEFINED;
     463        else
     464                printf("Could not set sysinfo item %s.\n", name);
    436465
    437466        mutex_unlock(&sysinfo_lock);
     
    466495                item->subtree.generator.fn = fn;
    467496                item->subtree.generator.data = data;
     497        } else {
     498                printf("Could not set sysinfo item %s.\n", name);
    468499        }
    469500
Note: See TracChangeset for help on using the changeset viewer.