Changeset 273240 in webkit
- Timestamp:
- Feb 22, 2021 4:27:44 AM (3 years ago)
- Location:
- trunk/Tools
- Files:
-
- 2 added
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Tools/ChangeLog
r273239 r273240 1 2021-02-22 Philippe Normand <pnormand@igalia.com> 2 3 [Flatpak SDK] gdb unusable in sandbox 4 https://bugs.webkit.org/show_bug.cgi?id=222247 5 6 Reviewed by Žan Doberšek. 7 8 This patch adds support for unix signals disabling in developer builds, for the Flatpak SDK 9 runtime. Currently SIGINT, SIGHUP and SIGTERM will be ignored by the flatpak and bwrap 10 processes when they're running gdb in the sandbox runtime. This allows for nicer interactive 11 debugging sessions where Ctrl-C is actually handled by gdb. 12 13 * PlatformGTK.cmake: 14 * PlatformWPE.cmake: 15 * flatpak/CMakeLists.txt: Added. 16 * flatpak/flatpakutils.py: 17 (nullcontext): 18 (disable_signals): 19 (WebkitFlatpak.execute_command): 20 (WebkitFlatpak.run_in_sandbox): 21 * flatpak/sigaction-disabler.c: Added. 22 (real_sigaction): 23 (sigaction): 24 * flatpak/webkit-bwrap: 25 1 26 2021-02-22 Philippe Normand <pnormand@igalia.com> 2 27 -
trunk/Tools/PlatformGTK.cmake
r267177 r273240 3 3 add_subdirectory(WebKitTestRunner) 4 4 add_subdirectory(ImageDiff) 5 add_subdirectory(flatpak) 5 6 6 7 if (ENABLE_API_TESTS) -
trunk/Tools/PlatformWPE.cmake
r272643 r273240 7 7 add_subdirectory(TestRunnerShared) 8 8 add_subdirectory(WebKitTestRunner) 9 add_subdirectory(flatpak) 9 10 10 11 if (ENABLE_API_TESTS) -
trunk/Tools/flatpak/flatpakutils.py
r273239 r273240 51 51 from urllib2 import urlopen 52 52 53 try: 54 from contextlib import nullcontext 55 except ImportError: 56 @contextmanager 57 def nullcontext(enter_result=None): 58 yield enter_result 59 53 60 FLATPAK_REQUIRED_VERSION = "1.4.4" 54 61 … … 390 397 391 398 @contextmanager 392 def disable_signals(signals=[signal.SIGINT ]):399 def disable_signals(signals=[signal.SIGINT, signal.SIGTERM, signal.SIGHUP]): 393 400 old_signal_handlers = [] 394 401 395 402 for disabled_signal in signals: 396 old_signal_handlers.append((disabled_signal, signal.getsignal(disabled_signal))) 403 handler = signal.getsignal(disabled_signal) 404 if handler: 405 old_signal_handlers.append((disabled_signal, handler)) 397 406 signal.signal(disabled_signal, signal.SIG_IGN) 398 407 … … 518 527 self.sccache_scheduler = DEFAULT_SCCACHE_SCHEDULER 519 528 520 def execute_command(self, args, stdout=None, stderr=None, env=None): 529 def execute_command(self, args, stdout=None, stderr=None, env=None, keep_signals=True): 530 if keep_signals: 531 ctx_manager = nullcontext() 532 else: 533 ctx_manager = disable_signals() 521 534 _log.debug('Running: %s\n' % ' '.join(string_utils.decode(arg) for arg in args)) 522 535 result = 0 523 try: 524 result = subprocess.check_call(args, stdout=stdout, stderr=stderr, env=env) 525 except subprocess.CalledProcessError as err: 526 if self.verbose: 527 cmd = ' '.join(string_utils.decode(arg) for arg in err.cmd) 528 message = "'%s' returned a non-zero exit code." % cmd 529 if stderr: 530 with open(stderr.name, 'r') as stderrf: 531 message += " Stderr: %s" % stderrf.read() 532 Console.error_message(message) 533 return err.returncode 536 with ctx_manager: 537 try: 538 result = subprocess.check_call(args, stdout=stdout, stderr=stderr, env=env) 539 except subprocess.CalledProcessError as err: 540 if self.verbose: 541 cmd = ' '.join(string_utils.decode(arg) for arg in err.cmd) 542 message = "'%s' returned a non-zero exit code." % cmd 543 if stderr: 544 with open(stderr.name, 'r') as stderrf: 545 message += " Stderr: %s" % stderrf.read() 546 Console.error_message(message) 547 return err.returncode 534 548 return result 535 549 … … 884 898 flatpak_env["LANG"] = "en_US.UTF-8" 885 899 900 keep_signals = args[0] != "gdb" 901 if not keep_signals: 902 module_path = os.path.join(self.build_path, "lib", "libsigaction-disabler.so") 903 # Enable module in bwrap child processes. 904 extra_flatpak_args.append("--env=WEBKIT_FLATPAK_LD_PRELOAD=%s" % module_path) 905 # Enable module in `flatpak run`. 906 flatpak_env["LD_PRELOAD"] = module_path 907 886 908 flatpak_command += extra_flatpak_args + ['--command=%s' % args[0], "org.webkit.Sdk"] + args[1:] 887 909 … … 897 919 898 920 try: 899 return self.execute_command(flatpak_command, stdout=stdout, env=flatpak_env )921 return self.execute_command(flatpak_command, stdout=stdout, env=flatpak_env, keep_signals=keep_signals) 900 922 except KeyboardInterrupt: 901 923 return 0 -
trunk/Tools/flatpak/webkit-bwrap
r273238 r273240 111 111 bwrap_args.extend(("--setenv", "PATH", "/usr/bin:/usr/lib/sdk/rust-stable/bin/")) 112 112 113 if environ.get("WEBKIT_FLATPAK_LD_PRELOAD"): 114 os.environ["LD_PRELOAD"] = environ["WEBKIT_FLATPAK_LD_PRELOAD"] 115 113 116 command_line = ' '.join(map(shlex.quote, itertools.chain(bwrap_args, args))) 114 117
Note: See TracChangeset
for help on using the changeset viewer.