Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 16 Jan 2009 00:44:27 -0800
From:      Garrett Cooper <yanefbsd@gmail.com>
To:        Hackers freeBSD <freebsd-hackers@freebsd.org>
Cc:        "amd64@freebsd.org" <amd64@freebsd.org>
Subject:   Re: Confused by segfault with legitimate call to strerror(3) on amd64 / sysctl(3) setting `odd' errno's
Message-ID:  <7d6fde3d0901160044x4d7735cep16f032cd99dbc835@mail.gmail.com>
In-Reply-To: <7d6fde3d0901160041n55466290l55f737d274a40895@mail.gmail.com>
References:  <7d6fde3d0901160041n55466290l55f737d274a40895@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Jan 16, 2009 at 12:41 AM, Garrett Cooper <yanefbsd@gmail.com> wrote:
> Hi amd64 and Hackers,
>    Uh, I'm really confused why 1) this error (errno => ENOMEM) would
> occur when I have more than enough free memory (both on x86 and amd64)
> and 2) why strerror would segfault in the call to errx in the attached
> sourcefile on amd64 only. Not initializing len causes the second
> output sample (errno => 14, which is EFAULT).
>    Any ideas?
>    Please CC me if mailing on amd64@ as I'm not subscribed to the list.
> Thanks,
> -Garrett
>
> /* Program */
> #include <err.h>
> #include <errno.h>
> #include <stdio.h>
> #include <sys/types.h>
> #include <sys/sysctl.h>
>
> int
> main() {
>
>        int mib[4];
>
>        size_t len;
>
>        if (sysctlnametomib("kern.ipc.shmmax", mib, &len) != 0) {
>                printf("Errno: %d\n", errno);
>                errx(errno, "Error: %s", strerror(errno));
>        }
>
>        printf("%lu\n", len);
>
>        return 0;
>
> }
>
> # output for len preset to 0:
> [gcooper@optimus ~]$ ./test2
> Errno: 12
> test2: Segmentation fault: 11 (core dumped)
> [gcooper@optimus ~]$ uname -a
> FreeBSD optimus.gateway.2wire.net 8.0-CURRENT FreeBSD 8.0-CURRENT #4:
> Sun Jan 11 12:30:31 PST 2009
> root@optimus.gateway.2wire.net:/usr/obj/usr/src/sys/OPTIMUS  amd64
>
> [gcooper@orangebox /usr/home/gcooper]$ ./test
> Errno: 12
> test: Error: Cannot allocate memory
> [gcooper@orangebox /usr/home/gcooper]$ uname -a
> FreeBSD orangebox.gateway.2wire.net 8.0-CURRENT FreeBSD 8.0-CURRENT
> #4: Sat Jan  3 22:54:52 PST 2009
> gcooper@orangebox.gateway.2wire.net:/usr/obj/usr/src/sys/ORANGEBOX
> i386
>
> # output for len not preset to 0:
> [gcooper@optimus ~]$ ./test2
> Errno: 14
> test2: Segmentation fault: 11 (core dumped)

Almost forgot -- here are the actual values reported by sysctl(1),
just for reference:

[gcooper@optimus ~]$ sysctl kern.ipc.shmall kern.ipc.shmmin kern.ipc.shmmax
kern.ipc.shmall: 8192
kern.ipc.shmmin: 1
kern.ipc.shmmax: 33554432

[gcooper@orangebox /usr/src/sys]$ sysctl kern.ipc.shmall
kern.ipc.shmmin kern.ipc.shmmax
kern.ipc.shmall: 8192
kern.ipc.shmmin: 1
kern.ipc.shmmax: 33554432

Thanks,
-Garrett



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