summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWhaleChang <whalechang@google.com>2024-05-06 14:03:10 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2024-05-09 06:24:35 +0000
commit16e3a8914572301116d54902666558a53fbbde25 (patch)
treebbb376d40112f34749c124755a09e8c7f621bc04
parent25cd2f51a566ec3678957979c55b49112eaf638a (diff)
downloadadhd-16e3a8914572301116d54902666558a53fbbde25.tar.gz
cras: closer bounds check when using ucm_get_playback_number_of_volume_steps_for_dev
The UCM code should be just for checking the value itself BUG=b:318614025 TEST=bazel test //cras/src/tests:cras_alsa_usb_io_unittest.cc Change-Id: Id7d07abd2f4aa5cb8f35fb416faaf821a171b17b Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/adhd/+/5514345 Tested-by: chromeos-cop-builder@chromeos-cop.iam.gserviceaccount.com <chromeos-cop-builder@chromeos-cop.iam.gserviceaccount.com> Reviewed-by: Curtis Malainey <cujomalainey@chromium.org> Commit-Queue: Ching Yun Chang <whalechang@google.com>
-rw-r--r--cras/src/server/cras_alsa_ucm.c3
-rw-r--r--cras/src/server/cras_alsa_usb_io.c10
-rw-r--r--cras/src/tests/alsa_ucm_unittest.cc3
3 files changed, 10 insertions, 6 deletions
diff --git a/cras/src/server/cras_alsa_ucm.c b/cras/src/server/cras_alsa_ucm.c
index d5ac9836..a84aa546 100644
--- a/cras/src/server/cras_alsa_ucm.c
+++ b/cras/src/server/cras_alsa_ucm.c
@@ -962,9 +962,6 @@ int ucm_get_playback_number_of_volume_steps_for_dev(
if (rc) {
return rc;
}
- if (value < 0) {
- return -EINVAL;
- }
*playback_number_of_volume_steps = (int32_t)value;
return 0;
diff --git a/cras/src/server/cras_alsa_usb_io.c b/cras/src/server/cras_alsa_usb_io.c
index 6f00743c..5baa143c 100644
--- a/cras/src/server/cras_alsa_usb_io.c
+++ b/cras/src/server/cras_alsa_usb_io.c
@@ -1710,6 +1710,7 @@ static void configure_ucm_volume_settings(struct alsa_usb_output_node* output,
bool software_volume_needed) {
struct cras_ionode* node = &output->common.base;
int number_of_volume_steps = -1;
+ int rc = 0;
node->software_volume_needed = software_volume_needed;
syslog(LOG_INFO, "Use %s volume for %s with UCM.",
@@ -1721,8 +1722,13 @@ static void configure_ucm_volume_settings(struct alsa_usb_output_node* output,
CRAS_CHECK(!mixer_name || !software_volume_needed);
node->number_of_volume_steps = NUMBER_OF_VOLUME_STEPS_DEFAULT;
- ucm_get_playback_number_of_volume_steps_for_dev(aio->common.ucm, node->name,
- &number_of_volume_steps);
+ rc = ucm_get_playback_number_of_volume_steps_for_dev(
+ aio->common.ucm, node->name, &number_of_volume_steps);
+ if (!rc) {
+ // number_of_volume_steps is used as a denominator to calculate percentage,
+ // so it must be non-zero when set to node.
+ CRAS_CHECK(number_of_volume_steps > 0);
+ }
// If the developer wants to tune volume steps, must use HW volume.
CRAS_CHECK((number_of_volume_steps == -1) || !software_volume_needed);
diff --git a/cras/src/tests/alsa_ucm_unittest.cc b/cras/src/tests/alsa_ucm_unittest.cc
index 7a499cfd..bf6a5df5 100644
--- a/cras/src/tests/alsa_ucm_unittest.cc
+++ b/cras/src/tests/alsa_ucm_unittest.cc
@@ -1054,7 +1054,8 @@ TEST(AlsaUcm, GetPlaybackNumberOfVolumeSteps) {
EXPECT_EQ(10, playback_number_of_volume_steps);
rc = ucm_get_playback_number_of_volume_steps_for_dev(
mgr, "Dev2", &playback_number_of_volume_steps);
- EXPECT_EQ(-EINVAL, rc);
+ EXPECT_EQ(0, rc);
+ EXPECT_EQ(-1, playback_number_of_volume_steps);
}
TEST(AlsaUcm, GetMainVolumeMixerName) {