Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 22 Apr 2010 17:51:06 -0700
From:      Xin LI <delphij@delphij.net>
To:        Garrett Cooper <yanefbsd@gmail.com>
Cc:        FreeBSD-Hackers <freebsd-hackers@freebsd.org>, Matthew Fleming <matthew.fleming@isilon.com>
Subject:   Re: Error checking in ioctl(2)?
Message-ID:  <4BD0EEFA.90907@delphij.net>
In-Reply-To: <u2o7d6fde3d1004221745o32173f04hdf77c080979026c8@mail.gmail.com>
References:  <w2v7d6fde3d1004221627jff97746bkcb8cd3ca5e5a7492@mail.gmail.com>	<06D5F9F6F655AD4C92E28B662F7F853E039E33A7@seaxch09.desktop.isilon.com> <u2o7d6fde3d1004221745o32173f04hdf77c080979026c8@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 2010/04/22 17:45, Garrett Cooper wrote:
> On Thu, Apr 22, 2010 at 4:36 PM, Matthew Fleming
> <matthew.fleming@isilon.com> wrote:
>>> Hi hackers,
>>>     I realize that this isn't 100% userland code, so the checks should
>>> be minimalized, but when looking at the ioctl(2) syscall code (at
>>> least I think it is... there's another dupe hanging around in
>>> sys/dev/hptmv/ioctl.c), I had some questions related to the error
>>> handling not being done in the code:
>>>
>>>         if (size > 0) {
>>>                 if (com & IOC_VOID) {
>>>                         /* Integer argument. */
>>>                         arg = (intptr_t)uap->data;
>>>                         data = (void *)&arg;
>>>                         size = 0;
>>>                 } else
>>>                         data = malloc((u_long)size, M_IOCTLOPS,
>>> M_WAITOK); /* XXX: can fail -- do we care? */
>>
>> malloc(9) with M_WAITOK cannot return NULL.  So the rest of your XXX
>> comments are not at issue.
>>
>> Also, free(9) is documented to do the right thing when asked to
>> free(NULL).
>>
>> copyin/copyout are really just bcopy but unlike most kernel code they
>> are allowed to take a page fault.  They deal with this by setting a
>> function pointer in PCB_ONFAULT, which is used in trap() to set a return
>> instruction pointer.
> 
> Matt,
>     Awesome. I can see I need to do a bit more reading in malloc(3) :)...
> Thanks for the info!

It's actually malloc(9)...  I personally feels it pretty confusing at
the beginning when I learned about it.

Cheers,
- -- 
Xin LI <delphij@delphij.net>	http://www.delphij.net/
FreeBSD - The Power to Serve!	       Live free or die
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.14 (FreeBSD)

iQEcBAEBAgAGBQJL0O76AAoJEATO+BI/yjfBOr4H/jTKZ4MSw4ukOsAGmSsRKz9Z
J2Jw/8DH7Kv1VZD8Dsvzma8/gF94YqbaBNsiz1/bKLF0zJrecpEucvglmEzbhthP
eep5SJHMK2mKnX+RgfIrGr/iQoK03kmXW74UcIYAeLhgibFZ7gqnqnnIay1pObic
+GUCHFAV7XW+mHs9sITCNg4d4DprBn2m7VtccPRtIaHfLsRHo9xjI6Zhendf/D4H
5r+ZO0ndU4snmk7BPrHpjiP+KDfyZM0gaC6IOf+t7gUfHqf0/uOrLiQavTUqBw4K
WqMLUok1orbLa1oV/wITeYbcdPbvbNCp4B+ZSU0PngERbmJYqg+DrYLZ0572Lxo=
=zYtp
-----END PGP SIGNATURE-----



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