forked from ~ljy/RK356X_SDK_RELEASE

hc
2023-12-11 072de836f53be56a70cecf70b43ae43b7ce17376
kernel/net/nfc/llcp_sock.c
....@@ -1,18 +1,6 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * Copyright (C) 2011 Intel Corporation. All rights reserved.
3
- *
4
- * This program is free software; you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License as published by
6
- * the Free Software Foundation; either version 2 of the License, or
7
- * (at your option) any later version.
8
- *
9
- * This program is distributed in the hope that it will be useful,
10
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
11
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
- * GNU General Public License for more details.
13
- *
14
- * You should have received a copy of the GNU General Public License
15
- * along with this program; if not, see <http://www.gnu.org/licenses/>.
164 */
175
186 #define pr_fmt(fmt) "llcp: %s: " fmt, __func__
....@@ -236,7 +224,7 @@
236224 }
237225
238226 static int nfc_llcp_setsockopt(struct socket *sock, int level, int optname,
239
- char __user *optval, unsigned int optlen)
227
+ sockptr_t optval, unsigned int optlen)
240228 {
241229 struct sock *sk = sock->sk;
242230 struct nfc_llcp_sock *llcp_sock = nfc_llcp_sock(sk);
....@@ -259,7 +247,7 @@
259247 break;
260248 }
261249
262
- if (get_user(opt, (u32 __user *) optval)) {
250
+ if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
263251 err = -EFAULT;
264252 break;
265253 }
....@@ -281,7 +269,7 @@
281269 break;
282270 }
283271
284
- if (get_user(opt, (u32 __user *) optval)) {
272
+ if (copy_from_sockptr(&opt, optval, sizeof(u32))) {
285273 err = -EFAULT;
286274 break;
287275 }
....@@ -743,6 +731,10 @@
743731 llcp_sock->service_name = kmemdup(addr->service_name,
744732 llcp_sock->service_name_len,
745733 GFP_KERNEL);
734
+ if (!llcp_sock->service_name) {
735
+ ret = -ENOMEM;
736
+ goto sock_llcp_release;
737
+ }
746738
747739 nfc_llcp_sock_link(&local->connecting_sockets, sk);
748740
....@@ -762,13 +754,14 @@
762754 return ret;
763755
764756 sock_unlink:
765
- nfc_llcp_put_ssap(local, llcp_sock->ssap);
766
- nfc_llcp_local_put(llcp_sock->local);
767
- llcp_sock->local = NULL;
768
-
769757 nfc_llcp_sock_unlink(&local->connecting_sockets, sk);
770758 kfree(llcp_sock->service_name);
771759 llcp_sock->service_name = NULL;
760
+
761
+sock_llcp_release:
762
+ nfc_llcp_put_ssap(local, llcp_sock->ssap);
763
+ nfc_llcp_local_put(llcp_sock->local);
764
+ llcp_sock->local = NULL;
772765
773766 put_dev:
774767 nfc_put_device(dev);
....@@ -949,8 +942,6 @@
949942 .ioctl = sock_no_ioctl,
950943 .listen = sock_no_listen,
951944 .shutdown = sock_no_shutdown,
952
- .setsockopt = sock_no_setsockopt,
953
- .getsockopt = sock_no_getsockopt,
954945 .sendmsg = sock_no_sendmsg,
955946 .recvmsg = llcp_sock_recvmsg,
956947 .mmap = sock_no_mmap,