Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 5 Mar 2002 07:50:02 -0800 (PST)
From:      Przemyslaw Frasunek <venglin@freebsd.lublin.pl>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: kern/26506: sendto() syscall returns EINVAL in jail environment
Message-ID:  <200203051550.g25Fo2X88094@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/26506; it has been noted by GNATS.

From: Przemyslaw Frasunek <venglin@freebsd.lublin.pl>
To: freebsd-gnats-submit@freebsd.org
Cc:  
Subject: Re: kern/26506: sendto() syscall returns EINVAL in jail environment
Date: Tue, 5 Mar 2002 16:46:39 +0100

 This problem still persists on 4.5-STABLE. When patch from audit-trail (sent
 almost year ago) will be commited?
 
 This works for me on recent 4.5-STABLE:
 
 --- /disc1/jail2/home/venglin/in_pcb.c  Tue Mar  5 16:36:17 2002
 +++ in_pcb.c    Tue Mar  5 16:24:35 2002
 @@ -499,7 +499,7 @@
         struct sockaddr_in *sin = (struct sockaddr_in *)nam;
         struct sockaddr_in sa;
         int error;
 -
 +/*
         if (inp->inp_laddr.s_addr == INADDR_ANY && p->p_prison != NULL) {
                 bzero(&sa, sizeof (sa));
                 sa.sin_addr.s_addr = htonl(p->p_prison->pr_ip);
 @@ -509,6 +509,7 @@
                 if (error)
                         return (error);
         }
 +*/
         /*
          *   Call inner routine, to assign local interface address.
          */
 @@ -522,9 +523,16 @@
         }
         if (inp->inp_laddr.s_addr == INADDR_ANY) {
                 if (inp->inp_lport == 0) {
 -                       error = in_pcbbind(inp, (struct sockaddr *)0, p);
          */
 @@ -522,9 +523,16 @@
         }
         if (inp->inp_laddr.s_addr == INADDR_ANY) {
                 if (inp->inp_lport == 0) {
 -                       error = in_pcbbind(inp, (struct sockaddr *)0, p);
 -                       if (error)
 -                           return (error);
 +                               if (p->p_prison ) {
 +                                       bzero(&sa, sizeof (sa));
 +                                       sa.sin_addr.s_addr = htonl(p->p_prison->pr_ip);
 +                                       sa.sin_len = sizeof (sa);
 +                                       sa.sin_family = AF_INET;
 +                                       error = in_pcbbind(inp, (struct sockaddr *)&sa, p);
 +                               } else
 +                                       error = in_pcbbind(inp, (struct sockaddr *)0, p);
 +                               if (error)
 +                                       return (error);
                 }
                 inp->inp_laddr = ifaddr->sin_addr;
         }
 
 -- 
 * Fido: 2:480/124 ** WWW: http://www.frasunek.com/ ** NIC-HDL: PMF9-RIPE *
 * Inet: przemyslaw@frasunek.com ** PGP: D48684904685DF43EA93AFA13BE170BF *

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200203051550.g25Fo2X88094>