From 0cc1893c8caa51194fa65f28bb73e1d82fc47e8e Mon Sep 17 00:00:00 2001 From: Athul Iddya Date: Tue, 1 Aug 2023 07:57:51 -0700 Subject: [PATCH] chore: cherry-pick 2 changes from webrtc (#39273) --- patches/webrtc/.patches | 2 + ...l_when_duplicating_a_file_descriptor.patch | 29 ++++++++++++ ...buffer_size_to_avoid_buffer_overflow.patch | 47 +++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 patches/webrtc/pipewire_capturer_fix_fcntl_call_when_duplicating_a_file_descriptor.patch create mode 100644 patches/webrtc/pipewire_capturer_increase_buffer_size_to_avoid_buffer_overflow.patch diff --git a/patches/webrtc/.patches b/patches/webrtc/.patches index 883cd06a6f023..b4e2887b502dc 100644 --- a/patches/webrtc/.patches +++ b/patches/webrtc/.patches @@ -1,3 +1,5 @@ fix_fallback_to_x11_capturer_on_wayland.patch m114_move_transceiver_iteration_loop_over_to_the_signaling_thread.patch m114_sdp_reject_duplicate_ssrcs_in_ssrc-groups.patch +pipewire_capturer_fix_fcntl_call_when_duplicating_a_file_descriptor.patch +pipewire_capturer_increase_buffer_size_to_avoid_buffer_overflow.patch diff --git a/patches/webrtc/pipewire_capturer_fix_fcntl_call_when_duplicating_a_file_descriptor.patch b/patches/webrtc/pipewire_capturer_fix_fcntl_call_when_duplicating_a_file_descriptor.patch new file mode 100644 index 0000000000000..4adca4ca9eb29 --- /dev/null +++ b/patches/webrtc/pipewire_capturer_fix_fcntl_call_when_duplicating_a_file_descriptor.patch @@ -0,0 +1,29 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jan Grulich +Date: Fri, 12 May 2023 20:59:06 +0200 +Subject: PipeWire capturer: fix fcntl call when duplicating a file descriptor + +The fcntl() call has variable arguments, therefore we need to pass 0 to +specify there are no other arguments for this call, otherwise we might +end up with an argument that is random garbage. + +Bug: webrtc:15174 +Change-Id: I34f16a942d80913b667d8ade7eed557b0233be01 +Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/305120 +Reviewed-by: Alexander Cooper +Commit-Queue: Jan Grulich +Cr-Commit-Position: refs/heads/main@{#40060} + +diff --git a/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc b/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc +index d31f86772e348b7b6c103289180bdca3bf182a94..0aab2dd22466bc6b6d4e8e43fab8eb716512df5b 100644 +--- a/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc ++++ b/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc +@@ -447,7 +447,7 @@ bool SharedScreenCastStreamPrivate::StartScreenCastStream( + + if (fd >= 0) { + pw_core_ = pw_context_connect_fd( +- pw_context_, fcntl(fd, F_DUPFD_CLOEXEC), nullptr, 0); ++ pw_context_, fcntl(fd, F_DUPFD_CLOEXEC, 0), nullptr, 0); + } else { + pw_core_ = pw_context_connect(pw_context_, nullptr, 0); + } diff --git a/patches/webrtc/pipewire_capturer_increase_buffer_size_to_avoid_buffer_overflow.patch b/patches/webrtc/pipewire_capturer_increase_buffer_size_to_avoid_buffer_overflow.patch new file mode 100644 index 0000000000000..cb30685528455 --- /dev/null +++ b/patches/webrtc/pipewire_capturer_increase_buffer_size_to_avoid_buffer_overflow.patch @@ -0,0 +1,47 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Jan Grulich +Date: Mon, 10 Jul 2023 10:07:38 +0200 +Subject: PipeWire capturer: increase buffer size to avoid buffer overflow + +Recently added framerate option can cause a buffer overflow and make +PipeWire to fail on negotiation, which effectively makes screen sharing +not to work. + +Bug: webrtc:15346 +Change-Id: I4a68e26c8f85ca287b06a25da500b6a7009e075f +Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/311541 +Reviewed-by: Alexander Cooper +Commit-Queue: Jan Grulich +Cr-Commit-Position: refs/heads/main@{#40413} + +diff --git a/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc b/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc +index 0aab2dd22466bc6b6d4e8e43fab8eb716512df5b..5b1cd10e9d903bcebf0389ec5c985fbc7ddff6a8 100644 +--- a/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc ++++ b/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc +@@ -276,7 +276,7 @@ void SharedScreenCastStreamPrivate::OnStreamParamChanged( + + that->stream_size_ = DesktopSize(width, height); + +- uint8_t buffer[1024] = {}; ++ uint8_t buffer[2048] = {}; + auto builder = spa_pod_builder{buffer, sizeof(buffer)}; + + // Setup buffers and meta header for new format. +@@ -361,7 +361,7 @@ void SharedScreenCastStreamPrivate::OnRenegotiateFormat(void* data, uint64_t) { + { + PipeWireThreadLoopLock thread_loop_lock(that->pw_main_loop_); + +- uint8_t buffer[2048] = {}; ++ uint8_t buffer[4096] = {}; + + spa_pod_builder builder = spa_pod_builder{buffer, sizeof(buffer)}; + +@@ -479,7 +479,7 @@ bool SharedScreenCastStreamPrivate::StartScreenCastStream( + + pw_stream_add_listener(pw_stream_, &spa_stream_listener_, + &pw_stream_events_, this); +- uint8_t buffer[2048] = {}; ++ uint8_t buffer[4096] = {}; + + spa_pod_builder builder = spa_pod_builder{buffer, sizeof(buffer)}; +