pcap_close() won't pass a null pointer - it'll crash long before that
when handed a null pointer, as the platforms on which we run map out
page 0.
Remove the null pointer checks, and, in cases where the cleanup routines
are called internally, make sure we don't pass them a null pointer.
static void
dag_platform_cleanup(pcap_t *p)
{
static void
dag_platform_cleanup(pcap_t *p)
{
+ struct pcap_dag *pd = p->pr;
- if (p != NULL) {
- pd = p->priv;
#ifdef HAVE_DAG_STREAMS_API
#ifdef HAVE_DAG_STREAMS_API
- if(dag_stop_stream(p->fd, pd->dag_stream) < 0)
- fprintf(stderr,"dag_stop_stream: %s\n", strerror(errno));
+ if(dag_stop_stream(p->fd, pd->dag_stream) < 0)
+ fprintf(stderr,"dag_stop_stream: %s\n", strerror(errno));
- if(dag_detach_stream(p->fd, pd->dag_stream) < 0)
- fprintf(stderr,"dag_detach_stream: %s\n", strerror(errno));
+ if(dag_detach_stream(p->fd, pd->dag_stream) < 0)
+ fprintf(stderr,"dag_detach_stream: %s\n", strerror(errno));
- if(dag_stop(p->fd) < 0)
- fprintf(stderr,"dag_stop: %s\n", strerror(errno));
+ if(dag_stop(p->fd) < 0)
+ fprintf(stderr,"dag_stop: %s\n", strerror(errno));
#endif /* HAVE_DAG_STREAMS_API */
#endif /* HAVE_DAG_STREAMS_API */
- if(p->fd != -1) {
- if(dag_close(p->fd) < 0)
- fprintf(stderr,"dag_close: %s\n", strerror(errno));
- p->fd = -1;
- }
- delete_pcap_dag(p);
- pcap_cleanup_live_common(p);
+ if(p->fd != -1) {
+ if(dag_close(p->fd) < 0)
+ fprintf(stderr,"dag_close: %s\n", strerror(errno));
+ p->fd = -1;
+ delete_pcap_dag(p);
+ pcap_cleanup_live_common(p);
/* Note: don't need to call close(p->fd) here as dag_close(p->fd) does this. */
}
/* Note: don't need to call close(p->fd) here as dag_close(p->fd) does this. */
}
{
while (pcap_dags != NULL) {
if (pcap_dags->pid == getpid()) {
{
while (pcap_dags != NULL) {
if (pcap_dags->pid == getpid()) {
- dag_platform_cleanup(pcap_dags->p);
+ if (pcap_dags->p != NULL)
+ dag_platform_cleanup(pcap_dags->p);
} else {
delete_pcap_dag(pcap_dags->p);
}
} else {
delete_pcap_dag(pcap_dags->p);
}
{
pd = p->priv;
if (pcap_stats(p,NULL) < 0)
{
pd = p->priv;
if (pcap_stats(p,NULL) < 0)
fprintf (stderr, "Catching signal %d.\n", sig);
}
exc_occured = 1;
fprintf (stderr, "Catching signal %d.\n", sig);
}
exc_occured = 1;
- pcap_cleanup_dos (NULL);
{
struct pcap_snf *ps = p->priv;
{
struct pcap_snf *ps = p->priv;
- if (p == NULL)
- return;
-
#ifdef SNF_HAVE_INJECT_API
if (ps->snf_inj)
snf_inject_close(ps->snf_inj);
#ifdef SNF_HAVE_INJECT_API
if (ps->snf_inj)
snf_inject_close(ps->snf_inj);