.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
---|
1 | 2 | /* |
---|
2 | 3 | * Copyright (C) ST-Ericsson AB 2010 |
---|
3 | 4 | * Author: Sjur Brendeland |
---|
4 | | - * License terms: GNU General Public License (GPL) version 2 |
---|
5 | 5 | */ |
---|
6 | 6 | |
---|
7 | 7 | #define pr_fmt(fmt) KBUILD_MODNAME ":%s(): " fmt, __func__ |
---|
.. | .. |
---|
670 | 670 | return sent ? : err; |
---|
671 | 671 | } |
---|
672 | 672 | |
---|
673 | | -static int setsockopt(struct socket *sock, |
---|
674 | | - int lvl, int opt, char __user *ov, unsigned int ol) |
---|
| 673 | +static int setsockopt(struct socket *sock, int lvl, int opt, sockptr_t ov, |
---|
| 674 | + unsigned int ol) |
---|
675 | 675 | { |
---|
676 | 676 | struct sock *sk = sock->sk; |
---|
677 | 677 | struct caifsock *cf_sk = container_of(sk, struct caifsock, sk); |
---|
.. | .. |
---|
686 | 686 | return -EINVAL; |
---|
687 | 687 | if (lvl != SOL_CAIF) |
---|
688 | 688 | goto bad_sol; |
---|
689 | | - if (copy_from_user(&linksel, ov, sizeof(int))) |
---|
| 689 | + if (copy_from_sockptr(&linksel, ov, sizeof(int))) |
---|
690 | 690 | return -EINVAL; |
---|
691 | 691 | lock_sock(&(cf_sk->sk)); |
---|
692 | 692 | cf_sk->conn_req.link_selector = linksel; |
---|
.. | .. |
---|
700 | 700 | return -ENOPROTOOPT; |
---|
701 | 701 | lock_sock(&(cf_sk->sk)); |
---|
702 | 702 | if (ol > sizeof(cf_sk->conn_req.param.data) || |
---|
703 | | - copy_from_user(&cf_sk->conn_req.param.data, ov, ol)) { |
---|
| 703 | + copy_from_sockptr(&cf_sk->conn_req.param.data, ov, ol)) { |
---|
704 | 704 | release_sock(&cf_sk->sk); |
---|
705 | 705 | return -EINVAL; |
---|
706 | 706 | } |
---|
.. | .. |
---|
982 | 982 | .listen = sock_no_listen, |
---|
983 | 983 | .shutdown = sock_no_shutdown, |
---|
984 | 984 | .setsockopt = setsockopt, |
---|
985 | | - .getsockopt = sock_no_getsockopt, |
---|
986 | 985 | .sendmsg = caif_seqpkt_sendmsg, |
---|
987 | 986 | .recvmsg = caif_seqpkt_recvmsg, |
---|
988 | 987 | .mmap = sock_no_mmap, |
---|
.. | .. |
---|
1003 | 1002 | .listen = sock_no_listen, |
---|
1004 | 1003 | .shutdown = sock_no_shutdown, |
---|
1005 | 1004 | .setsockopt = setsockopt, |
---|
1006 | | - .getsockopt = sock_no_getsockopt, |
---|
1007 | 1005 | .sendmsg = caif_stream_sendmsg, |
---|
1008 | 1006 | .recvmsg = caif_stream_recvmsg, |
---|
1009 | 1007 | .mmap = sock_no_mmap, |
---|
.. | .. |
---|
1022 | 1020 | return; |
---|
1023 | 1021 | } |
---|
1024 | 1022 | sk_stream_kill_queues(&cf_sk->sk); |
---|
| 1023 | + WARN_ON(sk->sk_forward_alloc); |
---|
1025 | 1024 | caif_free_client(&cf_sk->layer); |
---|
1026 | 1025 | } |
---|
1027 | 1026 | |
---|