From 7002fe8ac39ef177987eaee0ce99a235e07067ad Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Fri, 3 May 2024 15:54:51 +0200 Subject: [PATCH] core: handle import errors better Check for NULL when importing a buffer and log a message instead of trying to deref the NULL pointer and crash. Add some more logging to mem when importing a bad fd. See #3998 --- src/pipewire/core.c | 5 ++++- src/pipewire/mem.c | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/pipewire/core.c b/src/pipewire/core.c index 2fe0eb79e..d18d6076b 100644 --- a/src/pipewire/core.c +++ b/src/pipewire/core.c @@ -81,7 +81,10 @@ static void core_event_add_mem(void *data, uint32_t id, uint32_t type, int fd, u pw_log_debug("%p: add mem %u type:%u fd:%d flags:%u", this, id, type, fd, flags); m = pw_mempool_import(this->pool, flags, type, fd); - if (m->id != id) { + if (m == NULL) { + pw_log_error("%p: can't import mem id:%u fd:%d: %m", this, id, fd); + pw_proxy_errorf(&this->proxy, -errno, "can't import mem id:%u: %m", id); + } else if (m->id != id) { pw_log_error("%p: invalid mem id %u, fd:%d expected %u", this, id, fd, m->id); pw_proxy_errorf(&this->proxy, -EINVAL, "invalid mem id %u, expected %u", id, m->id); diff --git a/src/pipewire/mem.c b/src/pipewire/mem.c index 3ef6db75b..6804c7d6c 100644 --- a/src/pipewire/mem.c +++ b/src/pipewire/mem.c @@ -611,7 +611,7 @@ struct pw_memblock * pw_mempool_import(struct pw_mempool *pool, struct memblock *b; if (fd < 0) { - pw_log_error("%p: cannot import invalid fd", pool); + pw_log_error("%p: cannot import invalid fd:%d", pool, fd); errno = EINVAL; return NULL; }