| .. | .. |
|---|
| 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 | |
|---|