Skip to content

Commit

Permalink
net: streamline __sys_setsockopt
Browse files Browse the repository at this point in the history
Return early when sockfd_lookup_light fails to reduce a level of
indentation for most of the function body.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Christoph Hellwig authored and David S. Miller committed Jul 20, 2020
1 parent a06d30a commit 4a36729
Showing 1 changed file with 27 additions and 30 deletions.
57 changes: 27 additions & 30 deletions net/socket.c
Original file line number Diff line number Diff line change
Expand Up @@ -2107,43 +2107,40 @@ static int __sys_setsockopt(int fd, int level, int optname,
return -EINVAL;

sock = sockfd_lookup_light(fd, &err, &fput_needed);
if (sock != NULL) {
err = security_socket_setsockopt(sock, level, optname);
if (err)
goto out_put;
if (!sock)
return err;

err = BPF_CGROUP_RUN_PROG_SETSOCKOPT(sock->sk, &level,
&optname, optval, &optlen,
&kernel_optval);
err = security_socket_setsockopt(sock, level, optname);
if (err)
goto out_put;

if (err < 0) {
goto out_put;
} else if (err > 0) {
err = 0;
goto out_put;
}
err = BPF_CGROUP_RUN_PROG_SETSOCKOPT(sock->sk, &level, &optname,
optval, &optlen, &kernel_optval);
if (err < 0)
goto out_put;
if (err > 0) {
err = 0;
goto out_put;
}

if (kernel_optval) {
set_fs(KERNEL_DS);
optval = (char __user __force *)kernel_optval;
}
if (kernel_optval) {
set_fs(KERNEL_DS);
optval = (char __user __force *)kernel_optval;
}

if (level == SOL_SOCKET && !sock_use_custom_sol_socket(sock))
err =
sock_setsockopt(sock, level, optname, optval,
if (level == SOL_SOCKET && !sock_use_custom_sol_socket(sock))
err = sock_setsockopt(sock, level, optname, optval, optlen);
else
err = sock->ops->setsockopt(sock, level, optname, optval,
optlen);
else
err =
sock->ops->setsockopt(sock, level, optname, optval,
optlen);

if (kernel_optval) {
set_fs(oldfs);
kfree(kernel_optval);
}
out_put:
fput_light(sock->file, fput_needed);
if (kernel_optval) {
set_fs(oldfs);
kfree(kernel_optval);
}

out_put:
fput_light(sock->file, fput_needed);
return err;
}

Expand Down

0 comments on commit 4a36729

Please sign in to comment.