stackgap removal in linux_socket.c

David P. Reese, Jr. daver at gomerbud.com
Sun Sep 28 00:14:49 PDT 2003


In article <slrnbnd29r.1pn1.daver at xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>, David P. Reese, Jr. wrote:
> As I understand, stackgap_init() and stackgap_alloc() allow you to store
> temporary data below the stack in a userland process.  I would like to make
> sure that the following are in fact correct:
> 
>    1)  It is much faster to store data in the stackgap when compared to
>        using real dynamic storage like MALLOC() because setting up the
>        stackgap simply computes an offset in userspace.
> 
>    2)  The stackgap can only be used for a *very* temporary scratch space
>        because you have no guarantee that a userland process won't trash
>        what you are storing in the stackgap between syscalls.
> 
> In removing the use of the stackgap in linux_socket.c, I want to make sure
> that I don't overlook a subtlety and shoot myself in the foot.
> 
> I would reason that anything small like an int could be defined as a local
> variable instead of a stackgap variable while using MALLOC()/FREE() for
> allocating large structures in the less often traveled code paths.
> 
> Why would anyone use the stackgap in the first place?

Crud...  I just figured out my answer to my question.  You can't copyin from
kernel space.  Thank god I can remove the stackgap code with the new split
syscalls.

-- 
   David P. Reese, Jr.                                     daver at xxxxxxxxxxxx
                                               http://www.gomerbud.com/daver/





More information about the Kernel mailing list