Loading slirp/ip_icmp.c +5 −0 Original line number Diff line number Diff line Loading @@ -262,6 +262,11 @@ icmp_error(struct mbuf *msrc, u_char type, u_char code, int minsize, #endif if(ip->ip_off & IP_OFFMASK) goto end_error; /* Only reply to fragment 0 */ /* Do not reply to source-only IPs */ if ((ip->ip_src.s_addr & htonl(~(0xf << 28))) == 0) { goto end_error; } shlen=ip->ip_hl << 2; s_ip_len=ip->ip_len; if(ip->ip_p == IPPROTO_ICMP) { Loading slirp/misc.c +26 −41 Original line number Diff line number Diff line Loading @@ -113,7 +113,6 @@ fork_exec(struct socket *so, const char *ex, int do_pty) struct sockaddr_in addr; socklen_t addrlen = sizeof(addr); int opt; int master = -1; const char *argv[256]; /* don't want to clobber the original */ char *bptr; Loading Loading @@ -148,20 +147,12 @@ fork_exec(struct socket *so, const char *ex, int do_pty) case -1: lprint("Error: fork failed: %s\n", strerror(errno)); close(s); if (do_pty == 2) close(master); return 0; case 0: setsid(); /* Set the DISPLAY */ if (do_pty == 2) { (void) close(master); #ifdef TIOCSCTTY /* XXXXX */ ioctl(s, TIOCSCTTY, (char *)NULL); #endif } else { getsockname(s, (struct sockaddr *)&addr, &addrlen); close(s); /* Loading @@ -173,7 +164,6 @@ fork_exec(struct socket *so, const char *ex, int do_pty) do { ret = connect(s, (struct sockaddr *)&addr, addrlen); } while (ret < 0 && errno == EINTR); } dup2(s, 0); dup2(s, 1); Loading Loading @@ -210,10 +200,6 @@ fork_exec(struct socket *so, const char *ex, int do_pty) default: qemu_add_child_watch(pid); if (do_pty == 2) { close(s); so->s = master; } else { /* * XXX this could block us... * XXX Should set a timer here, and if accept() doesn't Loading @@ -229,7 +215,6 @@ fork_exec(struct socket *so, const char *ex, int do_pty) setsockopt(so->s, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof(int)); opt = 1; setsockopt(so->s, SOL_SOCKET, SO_OOBINLINE, (char *)&opt, sizeof(int)); } fd_nonblock(so->s); /* Append the telnet options now */ Loading Loading
slirp/ip_icmp.c +5 −0 Original line number Diff line number Diff line Loading @@ -262,6 +262,11 @@ icmp_error(struct mbuf *msrc, u_char type, u_char code, int minsize, #endif if(ip->ip_off & IP_OFFMASK) goto end_error; /* Only reply to fragment 0 */ /* Do not reply to source-only IPs */ if ((ip->ip_src.s_addr & htonl(~(0xf << 28))) == 0) { goto end_error; } shlen=ip->ip_hl << 2; s_ip_len=ip->ip_len; if(ip->ip_p == IPPROTO_ICMP) { Loading
slirp/misc.c +26 −41 Original line number Diff line number Diff line Loading @@ -113,7 +113,6 @@ fork_exec(struct socket *so, const char *ex, int do_pty) struct sockaddr_in addr; socklen_t addrlen = sizeof(addr); int opt; int master = -1; const char *argv[256]; /* don't want to clobber the original */ char *bptr; Loading Loading @@ -148,20 +147,12 @@ fork_exec(struct socket *so, const char *ex, int do_pty) case -1: lprint("Error: fork failed: %s\n", strerror(errno)); close(s); if (do_pty == 2) close(master); return 0; case 0: setsid(); /* Set the DISPLAY */ if (do_pty == 2) { (void) close(master); #ifdef TIOCSCTTY /* XXXXX */ ioctl(s, TIOCSCTTY, (char *)NULL); #endif } else { getsockname(s, (struct sockaddr *)&addr, &addrlen); close(s); /* Loading @@ -173,7 +164,6 @@ fork_exec(struct socket *so, const char *ex, int do_pty) do { ret = connect(s, (struct sockaddr *)&addr, addrlen); } while (ret < 0 && errno == EINTR); } dup2(s, 0); dup2(s, 1); Loading Loading @@ -210,10 +200,6 @@ fork_exec(struct socket *so, const char *ex, int do_pty) default: qemu_add_child_watch(pid); if (do_pty == 2) { close(s); so->s = master; } else { /* * XXX this could block us... * XXX Should set a timer here, and if accept() doesn't Loading @@ -229,7 +215,6 @@ fork_exec(struct socket *so, const char *ex, int do_pty) setsockopt(so->s, SOL_SOCKET, SO_REUSEADDR, (char *)&opt, sizeof(int)); opt = 1; setsockopt(so->s, SOL_SOCKET, SO_OOBINLINE, (char *)&opt, sizeof(int)); } fd_nonblock(so->s); /* Append the telnet options now */ Loading