]> 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)
committerLuis Machado <luis.machado@linaro.org>
Fri, 15 Oct 2021 13:07:07 +0000 (10:07 -0300)
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 d04fe8961edb12cec7960078086e22cd0bd2b876..356f20342e5ea8638ac060245266aa3bd136beaa 100644 (file)
@@ -1774,6 +1774,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);
 
@@ -1808,13 +1812,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 ());
@@ -2103,12 +2127,16 @@ aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
       set_gdbarch_decode_memtag_note (gdbarch,
                                      aarch64_linux_decode_memtag_note);
 
-      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
     {