From 97d7062c74858ebd1109f9a6a93786347067a479 Mon Sep 17 00:00:00 2001 From: wormuz Date: Tue, 18 Aug 2026 03:17:08 +0300 Subject: [PATCH] libbladeRF: unlock the device mutex on the 8-bit format error path bladerf_sync_config() and bladerf_init_stream() take dev->lock, then return BLADERF_ERR_UNSUPPORTED without releasing it when an SC8_Q7 format is requested on a bladeRF1. The device is left locked, so every subsequent API call on that handle blocks forever. The caller sees a hang rather than the error that was actually returned. Found while auditing 2.6.0 changes; both call sites are in bladerf.c. --- host/libraries/libbladeRF/src/bladerf.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/host/libraries/libbladeRF/src/bladerf.c b/host/libraries/libbladeRF/src/bladerf.c index 5295552dc..1cb0fd11c 100644 --- a/host/libraries/libbladeRF/src/bladerf.c +++ b/host/libraries/libbladeRF/src/bladerf.c @@ -1117,6 +1117,7 @@ int bladerf_init_stream(struct bladerf_stream **stream, if (format == BLADERF_FORMAT_SC8_Q7 || format == BLADERF_FORMAT_SC8_Q7_META) { if (strcmp(bladerf_get_board_name(dev), "bladerf2") != 0) { log_error("bladeRF 2.0 required for 8bit format\n"); + MUTEX_UNLOCK(&dev->lock); return BLADERF_ERR_UNSUPPORTED; } } @@ -1216,6 +1217,7 @@ int bladerf_sync_config(struct bladerf *dev, if (format == BLADERF_FORMAT_SC8_Q7 || format == BLADERF_FORMAT_SC8_Q7_META) { if (strcmp(bladerf_get_board_name(dev), "bladerf2") != 0) { log_error("bladeRF 2.0 required for 8bit format\n"); + MUTEX_UNLOCK(&dev->lock); return BLADERF_ERR_UNSUPPORTED; } }