Changeset b833cc4 in rtems-libbsd


Ignore:
Timestamp:
Oct 22, 2013, 8:03:10 AM (6 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11, c1e05b9ea378b2971e3d7704779112b4bc4296da, freebsd-9.3, e6acc15bc94ea35f40e50b42692584c456ba9722
Children:
56e9de9
Parents:
60618d5
git-author:
Sebastian Huber <sebastian.huber@…> (10/22/13 08:03:10)
git-committer:
Sebastian Huber <sebastian.huber@…> (10/31/13 12:18:49)
Message:

IFCONFIG(8): Fix some resource leaks

Location:
freebsd/sbin/ifconfig
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • freebsd/sbin/ifconfig/ifclone.c

    r60618d5 rb833cc4  
    7171        ifcr.ifcr_buffer = buf;
    7272
    73         if (ioctl(s, SIOCIFGCLONERS, &ifcr) < 0)
     73        if (ioctl(s, SIOCIFGCLONERS, &ifcr) < 0) {
     74                free(buf);
    7475                err(1, "SIOCIFGCLONERS for names");
     76        }
    7577
    7678        /*
     
    105107
    106108        dcp = malloc(sizeof(*dcp));
     109#ifndef __rtems__
     110        if (dcp == NULL) {
     111                errx(1, "unable to allocate clone");
     112        }
     113#endif /* __rtems__ */
    107114        strlcpy(dcp->ifprefix, ifprefix, IFNAMSIZ-1);
    108115        dcp->clone_cb = p;
     
    200207#undef N
    201208}
     209#ifdef __rtems__
     210void
     211clone_dtor(void)
     212{
     213        struct clone_defcb *dcp;
     214        struct clone_defcb *dcp_tmp;
     215
     216        SLIST_FOREACH_SAFE(dcp, &clone_defcbh, next, dcp_tmp) {
     217                free(dcp);
     218        }
     219}
     220#endif /* __rtems__ */
  • freebsd/sbin/ifconfig/ifconfig.c

    r60618d5 rb833cc4  
    151151#ifdef __rtems__
    152152static void ifconfig_ctor(void);
     153static void ifconfig_dtor(void);
    153154static int main(int argc, char *argv[]);
    154155
     
    179180
    180181        exit_code = rtems_bsd_program_call_main("ifconfig", main, argc, argv);
     182
     183        clone_dtor();
     184        ifconfig_dtor();
    181185
    182186        rtems_bsd_program_unlock();
     
    12421246#undef N
    12431247}
     1248#ifdef __rtems__
     1249static void
     1250ifconfig_dtor(void)
     1251{
     1252        struct callback *cb = callbacks;
     1253
     1254        while (cb != NULL) {
     1255                struct callback *to_free = cb;
     1256
     1257                cb = to_free->cb_next;
     1258                free(to_free);
     1259        }
     1260
     1261        free(descr);
     1262}
     1263#endif /* __rtems__ */
  • freebsd/sbin/ifconfig/ifconfig.h

    r60618d5 rb833cc4  
    170170void pfsync_ctor(void);
    171171void vlan_ctor(void);
     172
     173void clone_dtor(void);
    172174#endif /* __rtems__ */
  • freebsd/sbin/ifconfig/ifgroup.c

    r60618d5 rb833cc4  
    138138        strlcpy(ifgr.ifgr_name, groupname, sizeof(ifgr.ifgr_name));
    139139        if (ioctl(s, SIOCGIFGMEMB, (caddr_t)&ifgr) == -1) {
     140                close(s);
    140141                if (errno == EINVAL || errno == ENOTTY ||
    141142                    errno == ENOENT)
     
    146147
    147148        len = ifgr.ifgr_len;
    148         if ((ifgr.ifgr_groups = calloc(1, len)) == NULL)
     149        if ((ifgr.ifgr_groups = calloc(1, len)) == NULL) {
     150                close(s);
    149151                err(1, "printgroup");
    150         if (ioctl(s, SIOCGIFGMEMB, (caddr_t)&ifgr) == -1)
     152        }
     153        if (ioctl(s, SIOCGIFGMEMB, (caddr_t)&ifgr) == -1) {
     154                free(ifgr.ifgr_groups);
     155                close(s);
    151156                err(1, "SIOCGIFGMEMB");
     157        }
    152158
    153159        for (ifg = ifgr.ifgr_groups; ifg && len >= sizeof(struct ifg_req);
     
    158164        }
    159165        free(ifgr.ifgr_groups);
     166        close(s);
    160167
    161168        exit(0);
  • freebsd/sbin/ifconfig/ifmedia.c

    r60618d5 rb833cc4  
    135135        ifmr.ifm_ulist = media_list;
    136136
    137         if (ioctl(s, SIOCGIFMEDIA, (caddr_t)&ifmr) < 0)
     137        if (ioctl(s, SIOCGIFMEDIA, (caddr_t)&ifmr) < 0) {
     138                free(media_list);
    138139                err(1, "SIOCGIFMEDIA");
     140        }
    139141
    140142        printf("\tmedia: ");
Note: See TracChangeset for help on using the changeset viewer.