Date: Sun, 09 Feb 2014 11:16:59 -0800 From: Dennis Glatting <freebsd@pki2.com> To: Dimitry Andric <dim@FreeBSD.org> Cc: Pavel Timofeev <timp87@gmail.com>, freebsd-stable stable <freebsd-stable@freebsd.org>, ports-list freebsd <freebsd-ports@freebsd.org> Subject: Re: Squid aufs crashes under 10.0 Message-ID: <1391973419.88145.103.camel@btw.pki2.com> In-Reply-To: <92705E1C-E06E-411D-B88C-5A1AA096E2BD@FreeBSD.org> References: <CAAoTqfv7fdPocAS8aywRiwCtiQhW%2BWR3Xpmk0rx7fLRsdbm88Q@mail.gmail.com> <CAAoTqfsH9HVgNqxHvKndANT=xU14D-DTLZagJ_yWBC2UqiYN9Q@mail.gmail.com> <92705E1C-E06E-411D-B88C-5A1AA096E2BD@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, 2014-02-09 at 19:37 +0100, Dimitry Andric wrote: > On 07 Feb 2014, at 14:24, Pavel Timofeev <timp87@gmail.com> wrote: > > Sorry, it has to be in freebsd-ports@ too. > > > > 2014-02-07 Pavel Timofeev <timp87@gmail.com>: > >> Hi! > >> There is a problem with squid under FreeBSD10.0. > >> Squid crashes immediately if storage type is set to aufs. > >> It goes down during read of config file. > >> > >> No problem with diskd. No problem with aufs under FreeBSD9.2. > >> > >> Someone thinks that it's related to clang which is default compiler on > >> FreeBSD 10.0. > > Nope, it is a bug in Squid's configure script. It recognizes FreeBSD > 10.x and later as FreeBSD 1.x, causing it to disable pthreads support. > This leads to the required DiskThreads module being disabled too. It > then crashes when it tries to access a NULL pointer returned by > DiskIOModule::Find("DiskThreads"), in src/fs/ufs/UFSSwapDir.cc: > > Fs::Ufs::UFSSwapDir::UFSSwapDir(char const *aType, const char *anIOType) : SwapDir(aType), IO(NULL), map(new FileMap()), suggest(0), swaplog_fd (-1), currentIOOptions(new ConfigOptionVector()), ioType(xstrdup(anIOType)), cur_size(0), n_disk_objects(0) > { > /* modulename is only set to disk modules that are built, by configure, > * so the Find call should never return NULL here. > */ > IO = new Fs::Ufs::UFSStrategy(DiskIOModule::Find(anIOType)->createStrategy()); > } > > Very bad coding practice, obviously. It should call Find() first, and > if that returns NULL, it should abort in some sort of controlled way. > Found that too but not the reason why: (lldb) run -d -z -F -f /root/squid.conf Process 23598 launched: './src/squid' (x86_64) Find(): Mmapped Find(): IpcIo Find(): DiskDaemon Find(): Blocking Find(): AIO Returning NULL There's a lot of faulty (i.e., a lack thereof) checking in Squid. For example, I replaced strlen() with a custom version that first checks for NULL and returns 0 if that is the case (strlen() was often called by std::cstring::c_str() that was not yet initialized). That small code fragment resolved a lot of SEGVs. > In any case, the cause is the following fragment in the configure > script: > > freebsd) > if test `echo "$squid_host_os_version" | cut -b1` -lt 7 ; then > { $as_echo "$as_me:${as_lineno-$LINENO}: pthread library requires FreeBSD 7 or later" >&5 > $as_echo "$as_me: pthread library requires FreeBSD 7 or later" >&6;} > squid_opt_use_diskthreads="no" > else > > which was edited here: > > http://bazaar.launchpad.net/~squid/squid/3-trunk/revision/11124 > > I have attached a tentative patch for the port. However, this causes > the configure script logic to run a little differently, and there is > some sort of very strange bug in it, that leads to the SQUID_CFLAGS and > SQUID_CXXFLAGS values being mangled in the default case. > > With my patch the DiskThreads detection runs again, but the variables > are not mangled anymore, and this leads to -Werror being enabled again, > causing errors about deprecated kerberos5 functions later on in the > build. > > For now, I would not bother with -Werror and Squid, but just add > --disable-strict-error-checking to CONFIGURE_ARGS in the Makefile. > > That is, until somebody with autoconf knowledge can fix the badly broken > configure script... > > > >> I recompiled www/squid33 with DEBUG option. Got coredump. > >> Then I did and got this: > >> gdb /usr/local/sbin/squid /var/squid/squid.core > >> .... > >> Reading symbols from /usr/lib/private/libheimipcc.so.11...done. > >> Loaded symbols for /usr/lib/private/libheimipcc.so.11 > >> Reading symbols from /libexec/ld-elf.so.1...done. > >> Loaded symbols for /libexec/ld-elf.so.1 > >> Segmentation fault (core dumped) > >> > >> Gdb goes down too =) > >> Any ideas? > > Yes, please don't use gdb in base for anything serious. Use ports gdb > instead. :-) > > -Dimitry
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1391973419.88145.103.camel>