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

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Jan 16, 2009 at 10:44 AM, Garrett Cooper <yanefbsd@gmail.com> wrote:
> 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
> _______________________________________________
> freebsd-hackers@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
> To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
>

You need to initialize len to the number of entries in the mib array.
Try adding 'len = 4' before calling sysctlnametomib() and see if your
issues go away.



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