lkml.org 
[lkml]   [2020]   [May]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRE: remove kernel_setsockopt and kernel_getsockopt v2
    Date
    From: Christoph Hellwig
    > Sent: 20 May 2020 20:55
    >
    > this series removes the kernel_setsockopt and kernel_getsockopt
    > functions, and instead switches their users to small functions that
    > implement setting (or in one case getting) a sockopt directly using
    > a normal kernel function call with type safety and all the other
    > benefits of not having a function call.
    >
    > In some cases these functions seem pretty heavy handed as they do
    > a lock_sock even for just setting a single variable, but this mirrors
    > the real setsockopt implementation unlike a few drivers that just set
    > set the fields directly.

    How much does this increase the kernel code by?

    You are also replicating a lot of code making it more
    difficult to maintain.

    I don't think the performance of an socket option code
    really matters - it is usually done once when a socket
    is initialised and the other costs of establishing a
    connection will dominate.

    Pulling the user copies outside the [gs]etsocksopt switch
    statement not only reduces the code size (source and object)
    and trivially allows kernel_[sg]sockopt() to me added to
    the list of socket calls.

    It probably isn't possible to pull the usercopies right
    out into the syscall wrapper because of some broken
    requests.

    I worried about whether getsockopt() should read the entire
    user buffer first. SCTP needs the some of it often (including a
    sockaddr_storage in one case), TCP needs it once.
    However the cost of reading a few words is small, and a big
    buffer probably needs setting to avoid leaking kernel
    memory if the structure has holes or fields that don't get set.
    Reading from userspace solves both issues.

    David

    -
    Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
    Registration No: 1397386 (Wales)

    \
     
     \ /
      Last update: 2020-05-21 10:03    [W:4.043 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site