hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/kernel/debug/gdbstub.c
....@@ -247,7 +247,7 @@
247247 */
248248 tmp = buf + count;
249249
250
- err = probe_kernel_read(tmp, mem, count);
250
+ err = copy_from_kernel_nofault(tmp, mem, count);
251251 if (err)
252252 return NULL;
253253 while (count > 0) {
....@@ -283,7 +283,7 @@
283283 *tmp_raw |= hex_to_bin(*tmp_hex--) << 4;
284284 }
285285
286
- return probe_kernel_write(mem, tmp_raw, count);
286
+ return copy_to_kernel_nofault(mem, tmp_raw, count);
287287 }
288288
289289 /*
....@@ -335,7 +335,7 @@
335335 size++;
336336 }
337337
338
- return probe_kernel_write(mem, c, size);
338
+ return copy_to_kernel_nofault(mem, c, size);
339339 }
340340
341341 #if DBG_MAX_REG_NUM > 0
....@@ -725,7 +725,7 @@
725725 }
726726 }
727727
728
- do_each_thread(g, p) {
728
+ for_each_process_thread(g, p) {
729729 if (i >= ks->thr_query && !finished) {
730730 int_to_threadref(thref, p->pid);
731731 ptr = pack_threadid(ptr, thref);
....@@ -735,7 +735,7 @@
735735 finished = 1;
736736 }
737737 i++;
738
- } while_each_thread(g, p);
738
+ }
739739
740740 *(--ptr) = '\0';
741741 break;
....@@ -792,6 +792,19 @@
792792 }
793793 break;
794794 #endif
795
+#ifdef CONFIG_HAVE_ARCH_KGDB_QXFER_PKT
796
+ case 'S':
797
+ if (!strncmp(remcom_in_buffer, "qSupported:", 11))
798
+ strcpy(remcom_out_buffer, kgdb_arch_gdb_stub_feature);
799
+ break;
800
+ case 'X':
801
+ if (!strncmp(remcom_in_buffer, "qXfer:", 6))
802
+ kgdb_arch_handle_qxfer_pkt(remcom_in_buffer,
803
+ remcom_out_buffer);
804
+ break;
805
+#endif
806
+ default:
807
+ break;
795808 }
796809 }
797810
....@@ -1033,13 +1046,14 @@
10331046 return DBG_PASS_EVENT;
10341047 }
10351048 #endif
1049
+ fallthrough;
10361050 case 'C': /* Exception passing */
10371051 tmp = gdb_cmd_exception_pass(ks);
10381052 if (tmp > 0)
10391053 goto default_handle;
10401054 if (tmp == 0)
10411055 break;
1042
- /* Fall through on tmp < 0 */
1056
+ fallthrough; /* on tmp < 0 */
10431057 case 'c': /* Continue packet */
10441058 case 's': /* Single step packet */
10451059 if (kgdb_contthread && kgdb_contthread != current) {
....@@ -1047,8 +1061,7 @@
10471061 error_packet(remcom_out_buffer, -EINVAL);
10481062 break;
10491063 }
1050
- dbg_activate_sw_breakpoints();
1051
- /* Fall through to default processing */
1064
+ fallthrough; /* to default processing */
10521065 default:
10531066 default_handle:
10541067 error = kgdb_arch_handle_exception(ks->ex_vector,
....@@ -1094,10 +1107,10 @@
10941107 return error;
10951108 case 's':
10961109 case 'c':
1097
- strcpy(remcom_in_buffer, cmd);
1110
+ strscpy(remcom_in_buffer, cmd, sizeof(remcom_in_buffer));
10981111 return 0;
10991112 case '$':
1100
- strcpy(remcom_in_buffer, cmd);
1113
+ strscpy(remcom_in_buffer, cmd, sizeof(remcom_in_buffer));
11011114 gdbstub_use_prev_in_buf = strlen(remcom_in_buffer);
11021115 gdbstub_prev_in_buf_pos = 0;
11031116 return 0;