]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Harden checks for capability maintenance commands
authorLuis Machado <luis.machado@linaro.org>
Fri, 8 Oct 2021 21:44:50 +0000 (18:44 -0300)
committerJohn Baldwin <jhb@FreeBSD.org>
Thu, 1 Sep 2022 22:59:24 +0000 (15:59 -0700)
Add some sanity checks to make sure the input data is sane.

Add some more documentation for those commands.

gdb/aarch64-linux-tdep.c

index d425b299560d71294fd503a9a8861b49f9c6e15c..e5fdaa13d7157196fc1c9d797d4791017f84dba0 100644 (file)
@@ -2136,6 +2136,10 @@ static void
 maint_print_cap_from_addr_cmd (const char *args, int from_tty)
 {
   gdb::byte_vector cap;
+
+  if (args == nullptr)
+    error (_("Missing argument <address> (64-bit hex)."));
+
   CORE_ADDR addr = parse_and_eval_address (args);
   cap = target_read_capability (addr);
 
@@ -2170,13 +2174,33 @@ static void
 maint_set_capability_in_memory_cmd (const char *args, int from_tty)
 {
   std::string addr_str, tag_str, upper_str, lower_str;
+
+  if (args == nullptr)
+    error (_("Arguments must be <address> <tag> <upper 64 bits>"
+            " <lower 64 bits>"));
+
   const char *args_ptr = args;
 
   addr_str = extract_string_maybe_quoted (&args_ptr);
+
+  if (addr_str.empty ())
+    error (_("Missing <address> argument (64-bit hex)"));
+
   tag_str = extract_string_maybe_quoted (&args_ptr);
+
+  if (tag_str.empty ())
+    error (_("Missing <tag> argument (0 or 1)"));
+
   upper_str = extract_string_maybe_quoted (&args_ptr);
+
+  if (upper_str.empty ())
+    error (_("Missing <upper 64 bits> argument (64-bit hex)"));
+
   lower_str = extract_string_maybe_quoted (&args_ptr);
 
+  if (lower_str.empty ())
+    error (_("Missing <lower 64 bits> argument (64-bit hex)"));
+
   CORE_ADDR addr = parse_and_eval_address (addr_str.c_str ());
   CORE_ADDR tag_part = parse_and_eval_address (tag_str.c_str ());
   CORE_ADDR half_a = parse_and_eval_address (upper_str.c_str ());
@@ -2497,12 +2521,16 @@ aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
       set_gdbarch_get_cap_tag_from_address (gdbarch,
                                            aarch64_linux_get_cap_tag_from_address);
 
-      add_cmd ("cap_from_addr", class_maintenance, maint_print_cap_from_addr_cmd,
-              _("Print the capability from addr."), &maintenanceprintlist);
+      add_cmd ("cap_from_addr", class_maintenance,
+              maint_print_cap_from_addr_cmd,
+              _("Print a capability contained in a memory address.\n"
+                "Syntax is <address> (64-bit hex)"), &maintenanceprintlist);
 
       add_cmd ("cap_in_memory", class_maintenance,
               maint_set_capability_in_memory_cmd,
-              _("Print the capability from addr."), &maintenancelist);
+              _("Write capability data to a memory address.\n"
+                "Syntax is <address> <tag> <upper 64 bits> <lower 64 bits>"),
+                &maintenancelist);
     }
   else
     {