diff --git a/slirp/socket.c b/slirp/socket.c index 280050a..e603164 100644 --- a/slirp/socket.c +++ b/slirp/socket.c @@ -51,10 +51,12 @@ socreate(Slirp *slirp) so = (struct socket *)malloc(sizeof(struct socket)); if(so) { memset(so, 0, sizeof(struct socket)); + so->canary1 = 0xdeadbeef; so->so_state = SS_NOFDREF; so->s = -1; so->slirp = slirp; so->pollfds_idx = -1; + so->canary2 = 0xbe3fd3ad; } return(so); } @@ -67,6 +69,14 @@ sofree(struct socket *so) { Slirp *slirp = so->slirp; + if (so->s == -1234) + fprintf(stderr,"oops, re-freeing a freed socket!\n"); + if (so->canary1 != 0xdeadbeef) + fprintf(stderr,"oops, canary1 bogus!\n"); + if (so->canary2 != 0xbe3fd3ad) + fprintf(stderr,"oops, canary2 bogus!\n"); + so->s = -1234; + if (so->so_emu==EMU_RSH && so->extra) { sofree(so->extra); so->extra=NULL; diff --git a/slirp/socket.h b/slirp/socket.h index 8feed2a..14fac1c 100644 --- a/slirp/socket.h +++ b/slirp/socket.h @@ -17,6 +17,7 @@ struct socket { struct socket *so_next,*so_prev; /* For a linked list of sockets */ + int canary1; int s; /* The actual socket */ @@ -70,6 +71,7 @@ struct socket { struct sbuf so_rcv; /* Receive buffer */ struct sbuf so_snd; /* Send buffer */ void * extra; /* Extra pointer */ + int canary2; };