Changeset c8ee0d8 in rtems-libbsd


Ignore:
Timestamp:
Oct 31, 2013, 12:05:19 PM (6 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11, afaeccc05a556f6aa25ba044a7e49d6aa634a59e, freebsd-9.3, master
Children:
cae4d0a
Parents:
5c3f0b7
git-author:
Sebastian Huber <sebastian.huber@…> (10/31/13 12:05:19)
git-committer:
Sebastian Huber <sebastian.huber@…> (10/31/13 12:20:14)
Message:

PING6(8): Fix resource leaks

File:
1 edited

Legend:

Unmodified
Added
Removed
  • freebsd/sbin/ping6/ping6.c

    r5c3f0b7 rc8ee0d8  
    112112
    113113#define USE_RFC2292BIS
     114#define HAVE_POLL_H
    114115#endif /* __rtems__ */
    115116#include <rtems/bsd/sys/param.h>
     
    263264#endif
    264265
     266static u_char *packet;
     267static struct cmsghdr *cm;
     268
    265269static int       main(int, char *[]);
    266270static void      fill(char *, char *);
     
    306310
    307311        memset(&rcvd_tbl[0], 0, sizeof(rcvd_tbl));
     312        res = NULL;
    308313        srclen = 0;
    309314        datalen = DEFDATALEN;
     315        s = -1;
    310316        memset(&outpack[0], 0, sizeof(outpack));
    311317        hoplimit = -1;
     
    330336#endif
    331337
     338        packet = NULL;
     339        cm = NULL;
     340
    332341        exit_code = rtems_bsd_program_call_main("ping6", main, argc, argv);
    333342
    334343        rtems_bsd_program_unlock();
     344
     345        close(s);
     346        free(scmsg);
     347        free(packet);
     348
     349        if (res != NULL) {
     350                freeaddrinfo(res);
     351        }
     352
     353        free(cm);
    335354
    336355        return exit_code;
     
    361380        int cc, i;
    362381        int ch, hold, packlen, preload, optval, ret_ga;
    363         u_char *datap, *packet;
     382        u_char *datap;
    364383        char *e, *target, *ifname = NULL, *gateway = NULL;
    365384        int ip6optlen = 0;
    366385        struct cmsghdr *scmsgp = NULL;
    367         struct cmsghdr *cm;
    368386#if defined(SO_SNDBUF) && defined(SO_RCVBUF)
    369387        u_long lsockbufsize;
     
    589607                        srclen = res->ai_addrlen;
    590608                        freeaddrinfo(res);
     609                        res = NULL;
    591610                        options |= F_SRCADDR;
    592611                        break;
     
    717736                error = getaddrinfo(gateway, NULL, &hints, &gres);
    718737                if (error) {
     738                        freeaddrinfo(gres);
    719739                        errx(1, "getaddrinfo for the gateway %s: %s",
    720740                             gateway, gai_strerror(error));
    721741                }
    722742                if (gres->ai_next && (options & F_VERBOSE))
     743                        freeaddrinfo(gres);
    723744                        warnx("gateway resolves to multiple addresses");
    724745
    725746                if (setsockopt(s, IPPROTO_IPV6, IPV6_NEXTHOP,
    726747                               gres->ai_addr, gres->ai_addrlen)) {
     748                        freeaddrinfo(gres);
    727749                        err(1, "setsockopt(IPV6_NEXTHOP)");
    728750                }
Note: See TracChangeset for help on using the changeset viewer.