|
Message-ID: <20130401165311.GM20323@brightrain.aerifal.cx> Date: Mon, 1 Apr 2013 12:53:11 -0400 From: Rich Felker <dalias@...ifal.cx> To: simon@...kelleys.org.uk Cc: musl@...ts.openwall.com Subject: Breakeage on Linux due to SO_REUSEPORT Hi, Back in November, we had a bug report against musl libc due to dnsmasq failing because we had defined SO_REUSEPORT in the headers, but Linux did not support it. At the time I just removed the definition, but we're adding it back now, as Linux has just recently added SO_REUSEPORT support, and thus the same issue will arise with glibc (which is just including asm/socket.h and thus getting the kernel's definition of it) too. I've attached the original bug report thread. The fundamental problem is that it's not valid to assume SO_REUSEPORT is supported/working just because it's defined. Instead, the usage pattern should probably be something like #ifdef SO_REUSEPORT if (setsockopt(s, SO_REUSEPORT, ...)<0 && errno==ENOPROTOOPT) #endif setsockopt(s, SO_REUSEADDR, ...); Rich Received: from mother.openwall.net ([195.42.179.200]) by brightrain.aerifal.cx Received: (qmail 23717 invoked by uid 550); 16 Nov 2012 01:29:12 -0000 Mailing-List: contact musl-help@...ts.openwall.com; run by ezmlm Precedence: bulk List-Post: <mailto:musl@...ts.openwall.com> List-Help: <mailto:musl-help@...ts.openwall.com> List-Unsubscribe: <mailto:musl-unsubscribe@...ts.openwall.com> List-Subscribe: <mailto:musl-subscribe@...ts.openwall.com> Reply-To: musl@...ts.openwall.com Delivered-To: mailing list musl@...ts.openwall.com Received: (qmail 23702 invoked from network); 16 Nov 2012 01:29:11 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; bh=tPCeuAavYzpVzX6kd3ANHYQuwBrnjmQh0/7OEvyKmkg=; b=qx1dJ4tW7VXjI4eThI/SCTHFlNHFEKTElpOv8UqDUhaDOggzJ767ICCluOHf2aBKTn TCvzRywiuDgoE/EJOAQqnBEWWxcT+aMRsTyXEf+cyJ8oG92mivp0TR4rpvThGqcRzrqh E3/ol1yS70RAkDjUANphRa3hGwhDCKc5SapbF39ALTFwG3EG3h7+8fo5R9WfQt4h8J+i U4lwiOmAZiZbirWOYqtUlayrHo21Fez1tSBs0ERqlDr3439Y0UqvDc7KZ1QL75tcgpT4 XiveCKDQyXIh7x7foIo3beklCQwZMDsQ6j8VRfay1SscZZjobcorWE1ikRuwl/2VpRLF lTbA== MIME-Version: 1.0 In-Reply-To: <20121116001831.GM20323@...ghtrain.aerifal.cx> References: <CAKHv7phcN_sPbdOummz7SEikUFmG0mZBEvhoOAidKLLW072e0g@...l.gmail.com> <20121115233725.GK20323@...ghtrain.aerifal.cx> <20121116001110.GL20323@...ghtrain.aerifal.cx> <20121116001831.GM20323@...ghtrain.aerifal.cx> Date: Fri, 16 Nov 2012 03:28:59 +0200 Message-ID: <CAKHv7pgwi-C7=Y+GcieMON2ryRsfXryhjmbFqa147f6jZfTHfw@...l.gmail.com> From: Paul Schutte <sjpschutte@...il.com> To: musl@...ts.openwall.com Content-Type: multipart/alternative; boundary=e89a8f503bf627905804ce92b187 Subject: Re: [musl] A few issues on MIPS and now on ARMEL --e89a8f503bf627905804ce92b187 Content-Type: text/plain; charset=ISO-8859-1 Thanks Rich ! It is working. You guys are the best ! Don't know if anyone is interested, but this is the memory usage of the glibc binary (dynamically linked, distro supplied) : root 9931 0.4 0.4 4232 1020 pts/2 S+ 03:23 0:00 /dnsmasq Musl binary, statically linked: root 9927 0.0 0.1 328 244 pts/2 S 03:20 0:00 ./dnsmasq RSS size down from 1020 to 244, thus 25% of original consumption. Regards Paul On Fri, Nov 16, 2012 at 2:18 AM, Rich Felker <dalias@...ifal.cx> wrote: > On Thu, Nov 15, 2012 at 07:11:10PM -0500, Rich Felker wrote: > > On Thu, Nov 15, 2012 at 06:37:25PM -0500, Rich Felker wrote: > > > On Fri, Nov 16, 2012 at 12:21:11AM +0200, Paul Schutte wrote: > > > > Hi guys, > > > > > > > > I am now hitting a similar problem on armel. > > > > > > > > I am cross-compiling "dnsmasq" > > > > > > > > Glibc strace: > > > > > > > > ---snip--- > > > > socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP) = 5 > > > > fcntl64(5, F_GETFL) = 0x2 (flags O_RDWR) > > > > fcntl64(5, F_SETFL, O_RDWR|O_NONBLOCK) = 0 > > > > setsockopt(5, SOL_IP, IP_MTU_DISCOVER, [0], 4) = 0 > > > > setsockopt(5, SOL_IP, IP_PKTINFO, [1], 4) = 0 > > > > setsockopt(5, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0 > > > > setsockopt(5, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0 > > > > > > > > > > > > Musl strace: > > > > > > > > socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP) = 5 > > > > fcntl64(5, F_GETFL) = 0x2 (flags O_RDWR) > > > > fcntl64(5, F_SETFL, O_RDWR|O_NONBLOCK|O_LARGEFILE) = 0 > > > > setsockopt(5, SOL_IP, IP_MTU_DISCOVER, [0], 4) = 0 > > > > setsockopt(5, SOL_IP, IP_PKTINFO, [1], 4) = 0 > > > > setsockopt(5, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0 > > > > setsockopt(5, SOL_SOCKET, *0xf /* SO_??? */*, [1], 4) = -1 > ENOPROTOOPT > > > > (Protocol not available) > > > > > > Thanks for the report. I'll check and see if ARM has unusual > > > definitions we're missing. > > > > This doesn't seem to be ARM-specific. Linux has reserved a number for > > SO_REUSEPORT, but it's not implemented in the kernel it seems, and > > musl is providing the value, presumably causing the app to use it and > > think it works. I'm guessing I should just remove it, but it might be > > possible/preferable to make setsockopt and getsockopt remap it to > > SO_REUSEADDR internally. Ideas anyone? > > For now I've disabled it, matching what other libcs do on Linux. > Changes are in current git. > > Rich > --e89a8f503bf627905804ce92b187 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Thanks Rich !<br><br>It is working.<br><br>You guys are the best !<br><br>D= on't know if anyone is interested, but this is the memory usage of the = glibc binary (dynamically linked, distro supplied) :<br>root=A0=A0=A0=A0=A0= 9931=A0 0.4=A0 0.4=A0=A0 4232=A0 1020 pts/2=A0=A0=A0 S+=A0=A0 03:23=A0=A0 = 0:00 /dnsmasq<br> <br>Musl binary, statically linked: <br>root=A0=A0=A0=A0=A0 9927=A0 0.0=A0 = 0.1=A0=A0=A0 328=A0=A0 244 pts/2=A0=A0=A0 S=A0=A0=A0 03:20=A0=A0 0:00 ./dns= masq<br><br>RSS size down from 1020 to 244, thus 25% of original consumptio= n.<br><br>Regards<br>Paul<br><br><div class=3D"gmail_quote"> On Fri, Nov 16, 2012 at 2:18 AM, Rich Felker <span dir=3D"ltr"><<a href= =3D"mailto:dalias@...ifal.cx" target=3D"_blank">dalias@...ifal.cx</a>></= span> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8e= x;border-left:1px #ccc solid;padding-left:1ex"> On Thu, Nov 15, 2012 at 07:11:10PM -0500, Rich Felker wrote:<br> > On Thu, Nov 15, 2012 at 06:37:25PM -0500, Rich Felker wrote:<br> > > On Fri, Nov 16, 2012 at 12:21:11AM +0200, Paul Schutte wrote:<br> > > > Hi guys,<br> > > ><br> > > > I am now hitting a similar problem on armel.<br> > > ><br> > > > I am cross-compiling "dnsmasq"<br> > > ><br> > > > Glibc strace:<br> > > ><br> > > > ---snip---<br> > > > socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP) =3D 5<br> > > > fcntl64(5, F_GETFL) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =3D 0x2 (flags O_RDWR)<br> > > > fcntl64(5, F_SETFL, O_RDWR|O_NONBLOCK) =A0=3D 0<br> > > > setsockopt(5, SOL_IP, IP_MTU_DISCOVER, [0], 4) =3D 0<br> > > > setsockopt(5, SOL_IP, IP_PKTINFO, [1], 4) =3D 0<br> > > > setsockopt(5, SOL_SOCKET, SO_BROADCAST, [1], 4) =3D 0<br> > > > setsockopt(5, SOL_SOCKET, SO_REUSEADDR, [1], 4) =3D 0<br> > > ><br> > > ><br> > > > Musl strace:<br> > > ><br> > > > socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP) =3D 5<br> > > > fcntl64(5, F_GETFL) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 = =3D 0x2 (flags O_RDWR)<br> > > > fcntl64(5, F_SETFL, O_RDWR|O_NONBLOCK|O_LARGEFILE) =3D 0<br> > > > setsockopt(5, SOL_IP, IP_MTU_DISCOVER, [0], 4) =3D 0<br> > > > setsockopt(5, SOL_IP, IP_PKTINFO, [1], 4) =3D 0<br> > > > setsockopt(5, SOL_SOCKET, SO_BROADCAST, [1], 4) =3D 0<br> > > > setsockopt(5, SOL_SOCKET, *0xf /* SO_??? */*, [1], 4) =3D -1= ENOPROTOOPT<br> > > > (Protocol not available)<br> > ><br> > > Thanks for the report. I'll check and see if ARM has unusual<= br> > > definitions we're missing.<br> ><br> > This doesn't seem to be ARM-specific. Linux has reserved a number = for<br> > SO_REUSEPORT, but it's not implemented in the kernel it seems, and= <br> > musl is providing the value, presumably causing the app to use it and<= br> > think it works. I'm guessing I should just remove it, but it might= be<br> > possible/preferable to make setsockopt and getsockopt remap it to<br> > SO_REUSEADDR internally. Ideas anyone?<br> <br> For now I've disabled it, matching what other libcs do on Linux.<br> Changes are in current git.<br> <span class=3D"HOEnZb"><font color=3D"#888888"><br> Rich<br> </font></span></blockquote></div><br> --e89a8f503bf627905804ce92b187--
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.