Add pledge(2) to some binutils that handle untrusted data. Most can do with
authorpascal <pascal@openbsd.org>
Thu, 22 Oct 2015 14:53:00 +0000 (14:53 +0000)
committerpascal <pascal@openbsd.org>
Thu, 22 Oct 2015 14:53:00 +0000 (14:53 +0000)
"stdio rpath", while objdump(1) also needs "tmppath" for objdump -i.

ok deraadt@, comments sthen@ kettenis@

gnu/usr.bin/binutils-2.17/binutils/addr2line.c
gnu/usr.bin/binutils-2.17/binutils/objdump.c
gnu/usr.bin/binutils-2.17/binutils/readelf.c
gnu/usr.bin/binutils-2.17/binutils/strings.c

index 7cd67bc..4736709 100644 (file)
@@ -331,6 +331,9 @@ main (int argc, char **argv)
   bindtextdomain (PACKAGE, LOCALEDIR);
   textdomain (PACKAGE);
 
+  if (pledge ("stdio rpath", NULL) == -1)
+    fatal (_("Failed to pledge"));
+
   program_name = *argv;
   xmalloc_set_program_name (program_name);
 
index 6e5eab5..bcd1a20 100644 (file)
@@ -2962,6 +2962,9 @@ main (int argc, char **argv)
   bindtextdomain (PACKAGE, LOCALEDIR);
   textdomain (PACKAGE);
 
+  if (pledge ("stdio rpath tmppath", NULL) == -1)
+    fatal (_("Failed to pledge"));
+
   program_name = *argv;
   xmalloc_set_program_name (program_name);
 
index 3b2b15b..fa3ce65 100644 (file)
@@ -9357,6 +9357,11 @@ main (int argc, char **argv)
 
   parse_args (argc, argv);
 
+  if (pledge ("stdio rpath", NULL) == -1) {
+    error (_("Failed to pledge\n"));
+    return 1;
+  }
+
   if (num_dump_sects > 0)
     {
       /* Make a copy of the dump_sects array.  */
index a04cb58..ede1bd5 100644 (file)
@@ -183,6 +183,9 @@ main (int argc, char **argv)
   bindtextdomain (PACKAGE, LOCALEDIR);
   textdomain (PACKAGE);
 
+  if (pledge ("stdio rpath", NULL) == -1)
+    fatal (_("Failed to pledge"));
+
   program_name = argv[0];
   xmalloc_set_program_name (program_name);