mirror of
https://git.FreeBSD.org/ports.git
synced 2024-11-19 00:13:33 +00:00
comms/gnuradio: Fix crash with GNU Radio buffers
This patch is a backport of ca44241 from upstream: runtime: Use MAP_FIXED flag to ensure buffer halves are contiguous It fixes SIGSEGV observed with GNU Radio buffers consumers such as comms/gqrx. Discussed here: https://github.com/gqrx-sdr/gqrx/issues/1275 https://github.com/gnuradio/gnuradio/pull/6854 PR: 272543 Reported by: trasz Obtained from: GNU Radio team (GH pull request: 6854) MFH: 2023Q3
This commit is contained in:
parent
b19367a266
commit
35f73836d1
@ -1,7 +1,7 @@
|
|||||||
PORTNAME= gnuradio
|
PORTNAME= gnuradio
|
||||||
DISTVERSIONPREFIX= v
|
DISTVERSIONPREFIX= v
|
||||||
DISTVERSION= 3.8.4.0
|
DISTVERSION= 3.8.4.0
|
||||||
PORTREVISION= 11
|
PORTREVISION= 12
|
||||||
CATEGORIES= comms astro hamradio
|
CATEGORIES= comms astro hamradio
|
||||||
|
|
||||||
MAINTAINER= hamradio@FreeBSD.org
|
MAINTAINER= hamradio@FreeBSD.org
|
||||||
|
@ -0,0 +1,28 @@
|
|||||||
|
Use MAP_FIXED flag to ensure buffer halves are contiguous
|
||||||
|
|
||||||
|
(backport of ca44241)
|
||||||
|
|
||||||
|
--- gnuradio-runtime/lib/vmcircbuf_mmap_shm_open.cc.orig 2021-09-30 14:10:55 UTC
|
||||||
|
+++ gnuradio-runtime/lib/vmcircbuf_mmap_shm_open.cc
|
||||||
|
@@ -122,19 +122,11 @@ vmcircbuf_mmap_shm_open::vmcircbuf_mmap_shm_open(int s
|
||||||
|
throw std::runtime_error("gr::vmcircbuf_mmap_shm_open");
|
||||||
|
}
|
||||||
|
|
||||||
|
- // unmap the 2nd half
|
||||||
|
- if (munmap((char*)first_copy + size, size) == -1) {
|
||||||
|
- close(shm_fd); // cleanup
|
||||||
|
- perror("gr::vmcircbuf_mmap_shm_open: munmap (1)");
|
||||||
|
- throw std::runtime_error("gr::vmcircbuf_mmap_shm_open");
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- // map the first half into the now available hole where the
|
||||||
|
- // second half used to be.
|
||||||
|
+ // map the first half into the second half of the address space.
|
||||||
|
void* second_copy = mmap((char*)first_copy + size,
|
||||||
|
size,
|
||||||
|
PROT_READ | PROT_WRITE,
|
||||||
|
- MAP_SHARED,
|
||||||
|
+ MAP_SHARED | MAP_FIXED,
|
||||||
|
shm_fd,
|
||||||
|
(off_t)0);
|
||||||
|
|
@ -0,0 +1,44 @@
|
|||||||
|
Use MAP_FIXED flag to ensure buffer halves are contiguous
|
||||||
|
|
||||||
|
(backport of ca44241)
|
||||||
|
|
||||||
|
--- gnuradio-runtime/lib/vmcircbuf_mmap_tmpfile.cc.orig 2021-09-30 14:10:55 UTC
|
||||||
|
+++ gnuradio-runtime/lib/vmcircbuf_mmap_tmpfile.cc
|
||||||
|
@@ -107,19 +107,11 @@ vmcircbuf_mmap_tmpfile::vmcircbuf_mmap_tmpfile(int siz
|
||||||
|
throw std::runtime_error("gr::vmcircbuf_mmap_tmpfile");
|
||||||
|
}
|
||||||
|
|
||||||
|
- // unmap the 2nd half
|
||||||
|
- if (munmap((char*)first_copy + size, size) == -1) {
|
||||||
|
- close(seg_fd); // cleanup
|
||||||
|
- perror("gr::vmcircbuf_mmap_tmpfile: munmap (1)");
|
||||||
|
- throw std::runtime_error("gr::vmcircbuf_mmap_tmpfile");
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- // map the first half into the now available hole where the
|
||||||
|
- // second half used to be.
|
||||||
|
+ // map the first half into the second half of the address space.
|
||||||
|
void* second_copy = mmap((char*)first_copy + size,
|
||||||
|
size,
|
||||||
|
PROT_READ | PROT_WRITE,
|
||||||
|
- MAP_SHARED,
|
||||||
|
+ MAP_SHARED | MAP_FIXED,
|
||||||
|
seg_fd,
|
||||||
|
(off_t)0);
|
||||||
|
|
||||||
|
@@ -127,15 +119,6 @@ vmcircbuf_mmap_tmpfile::vmcircbuf_mmap_tmpfile(int siz
|
||||||
|
munmap(first_copy, size); // cleanup
|
||||||
|
close(seg_fd);
|
||||||
|
perror("gr::vmcircbuf_mmap_tmpfile: mmap(2)");
|
||||||
|
- throw std::runtime_error("gr::vmcircbuf_mmap_tmpfile");
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- // check for contiguity
|
||||||
|
- if ((char*)second_copy != (char*)first_copy + size) {
|
||||||
|
- munmap(first_copy, size); // cleanup
|
||||||
|
- munmap(second_copy, size);
|
||||||
|
- close(seg_fd);
|
||||||
|
- perror("gr::vmcircbuf_mmap_tmpfile: non-contiguous second copy");
|
||||||
|
throw std::runtime_error("gr::vmcircbuf_mmap_tmpfile");
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user