On Thu, May 21, 2020 at 08:01:33AM +0000, David Laight wrote:
How much does this increase the kernel code by?
44 files changed, 660 insertions(+), 843 deletions(-)
You are also replicating a lot of code making it more
difficult to maintain.
No, I specifically don't.
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.
Please read through the previous discussion of the rationale and the
options. We've been there before.
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.
As mention in the thread on the last series: That was my first idea, but
we have way to many sockopts, especially in obscure protocols that just
hard code the size. The chance of breaking userspace in a way that can't
be fixed without going back to passing user pointers to get/setsockopt
is way to high to commit to such a change unfortunately.