hc
2024-02-19 1c055e55a242a33e574e48be530e06770a210dcd
kernel/drivers/usb/gadget/function/rndis.c
....@@ -63,6 +63,8 @@
6363
6464 static DEFINE_IDA(rndis_ida);
6565
66
+static DEFINE_SPINLOCK(resp_lock);
67
+
6668 /* Driver Version */
6769 static const __le32 rndis_driver_version = cpu_to_le32(1);
6870
....@@ -72,7 +74,7 @@
7274
7375 #ifdef CONFIG_USB_GADGET_DEBUG_FILES
7476
75
-static const struct file_operations rndis_proc_fops;
77
+static const struct proc_ops rndis_proc_ops;
7678
7779 #endif /* CONFIG_USB_GADGET_DEBUG_FILES */
7880
....@@ -640,6 +642,7 @@
640642 BufLength = le32_to_cpu(buf->InformationBufferLength);
641643 BufOffset = le32_to_cpu(buf->InformationBufferOffset);
642644 if ((BufLength > RNDIS_MAX_TOTAL_SIZE) ||
645
+ (BufOffset > RNDIS_MAX_TOTAL_SIZE) ||
643646 (BufOffset + 8 >= RNDIS_MAX_TOTAL_SIZE))
644647 return -EINVAL;
645648
....@@ -905,7 +908,7 @@
905908
906909 sprintf(name, NAME_TEMPLATE, i);
907910 proc_entry = proc_create_data(name, 0660, NULL,
908
- &rndis_proc_fops, params);
911
+ &rndis_proc_ops, params);
909912 if (!proc_entry) {
910913 kfree(params);
911914 rndis_put_nr(i);
....@@ -922,7 +925,6 @@
922925 params->resp_avail = resp_avail;
923926 params->v = v;
924927 INIT_LIST_HEAD(&params->resp_queue);
925
- spin_lock_init(&params->resp_lock);
926928 pr_debug("%s: configNr = %d\n", __func__, i);
927929
928930 return params;
....@@ -1016,14 +1018,14 @@
10161018 {
10171019 rndis_resp_t *r, *n;
10181020
1019
- spin_lock(&params->resp_lock);
1021
+ spin_lock(&resp_lock);
10201022 list_for_each_entry_safe(r, n, &params->resp_queue, list) {
10211023 if (r->buf == buf) {
10221024 list_del(&r->list);
10231025 kfree(r);
10241026 }
10251027 }
1026
- spin_unlock(&params->resp_lock);
1028
+ spin_unlock(&resp_lock);
10271029 }
10281030 EXPORT_SYMBOL_GPL(rndis_free_response);
10291031
....@@ -1033,17 +1035,17 @@
10331035
10341036 if (!length) return NULL;
10351037
1036
- spin_lock(&params->resp_lock);
1038
+ spin_lock(&resp_lock);
10371039 list_for_each_entry_safe(r, n, &params->resp_queue, list) {
10381040 if (!r->send) {
10391041 r->send = 1;
10401042 *length = r->length;
1041
- spin_unlock(&params->resp_lock);
1043
+ spin_unlock(&resp_lock);
10421044 return r->buf;
10431045 }
10441046 }
10451047
1046
- spin_unlock(&params->resp_lock);
1048
+ spin_unlock(&resp_lock);
10471049 return NULL;
10481050 }
10491051 EXPORT_SYMBOL_GPL(rndis_get_next_response);
....@@ -1060,9 +1062,9 @@
10601062 r->length = length;
10611063 r->send = 0;
10621064
1063
- spin_lock(&params->resp_lock);
1065
+ spin_lock(&resp_lock);
10641066 list_add_tail(&r->list, &params->resp_queue);
1065
- spin_unlock(&params->resp_lock);
1067
+ spin_unlock(&resp_lock);
10661068 return r;
10671069 }
10681070
....@@ -1175,13 +1177,12 @@
11751177 return single_open(file, rndis_proc_show, PDE_DATA(inode));
11761178 }
11771179
1178
-static const struct file_operations rndis_proc_fops = {
1179
- .owner = THIS_MODULE,
1180
- .open = rndis_proc_open,
1181
- .read = seq_read,
1182
- .llseek = seq_lseek,
1183
- .release = single_release,
1184
- .write = rndis_proc_write,
1180
+static const struct proc_ops rndis_proc_ops = {
1181
+ .proc_open = rndis_proc_open,
1182
+ .proc_read = seq_read,
1183
+ .proc_lseek = seq_lseek,
1184
+ .proc_release = single_release,
1185
+ .proc_write = rndis_proc_write,
11851186 };
11861187
11871188 #define NAME_TEMPLATE "driver/rndis-%03d"