[go: up one dir, main page]

mac: Allow process singleton socket paths up to 253 bytes long

When the temporary directory is too long, Chrome exited during startup.
Previously, the limit was 103 bytes, based on the size of
sockaddr_un::sun_path, leaving room for a NUL byte. Paths returned by
NSTemporaryDirectory are normally 49 bytes, and to build a singleton
socket path, 41 bytes (for com.google.Chrome, more for other bundle IDs)
are added for a total of 90, within the 103-byte limit. In a future OS
update, NSTemporaryDirectory may return a longer path, +28 bytes,
resulting in a socket path 118 bytes long, exceeding the size available
in sockaddr_un::sun_path.

By providing a version of the sockaddr_un structure sized maximally as
supported by the kernel, there's room for a 253-byte sun_path; more
careful use of the socket API as supported on macOS eliminates the need
to NUL-terminate the path, so that the full 253 bytes can be used for a
singleton socket path. While still short of the 1024-byte PATH_MAX
supported by most other parts of the system that operate on paths, it's
still enough of an increase in headroom to dramatically reduce the risk
of crashing at startup due to an inability to form a process singleton
socket path within the required constraints.

(cherry picked from commit 937fe536976a6e29ddfb29adfa80c8703d12661a)

Bug: 1266817
Change-Id: I900753e0483d3566dd4e59767b25b95daeb8e152
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3260710
Reviewed-by: Avi Drissman <avi@chromium.org>
Commit-Queue: Mark Mentovai <mark@chromium.org>
Cr-Original-Commit-Position: refs/heads/main@{#938351}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3298434
Auto-Submit: Mark Mentovai <mark@chromium.org>
Commit-Queue: Avi Drissman <avi@chromium.org>
Cr-Commit-Position: refs/branch-heads/4664@{#1178}
Cr-Branched-From: 24dc4ee75e01a29d390d43c9c264372a169273a7-refs/heads/main@{#929512}
2 files changed
tree: 5250dd0324cc2e2262aa56e70d02d24d163b0ae0
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. cloud_print/
  13. codelabs/
  14. components/
  15. content/
  16. courgette/
  17. crypto/
  18. dbus/
  19. device/
  20. docs/
  21. extensions/
  22. fuchsia/
  23. gin/
  24. google_apis/
  25. google_update/
  26. gpu/
  27. headless/
  28. infra/
  29. ios/
  30. ipc/
  31. jingle/
  32. media/
  33. mojo/
  34. native_client_sdk/
  35. net/
  36. pdf/
  37. ppapi/
  38. printing/
  39. remoting/
  40. rlz/
  41. sandbox/
  42. services/
  43. skia/
  44. sql/
  45. storage/
  46. styleguide/
  47. testing/
  48. third_party/
  49. tools/
  50. ui/
  51. url/
  52. weblayer/
  53. .clang-format
  54. .clang-tidy
  55. .eslintrc.js
  56. .git-blame-ignore-revs
  57. .gitattributes
  58. .gitignore
  59. .gn
  60. .mailmap
  61. .rustfmt.toml
  62. .vpython
  63. .vpython3
  64. .yapfignore
  65. AUTHORS
  66. BUILD.gn
  67. CODE_OF_CONDUCT.md
  68. codereview.settings
  69. DEPS
  70. DIR_METADATA
  71. ENG_REVIEW_OWNERS
  72. LICENSE
  73. LICENSE.chromium_os
  74. OWNERS
  75. PRESUBMIT.py
  76. PRESUBMIT_test.py
  77. PRESUBMIT_test_mocks.py
  78. README.md
  79. WATCHLISTS
README.md

Logo Chromium

Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.

The project's web site is https://www.chromium.org.

To check out the source code locally, don't use git clone! Instead, follow the instructions on how to get the code.

Documentation in the source is rooted in docs/README.md.

Learn how to Get Around the Chromium Source Code Directory Structure .

For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.

If you found a bug, please file it at https://crbug.com/new.