diff options
author | WhaleChang <whalechang@google.com> | 2024-05-06 14:03:10 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2024-05-09 06:24:35 +0000 |
commit | 16e3a8914572301116d54902666558a53fbbde25 (patch) | |
tree | bbb376d40112f34749c124755a09e8c7f621bc04 | |
parent | 25cd2f51a566ec3678957979c55b49112eaf638a (diff) | |
download | adhd-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.c | 3 | ||||
-rw-r--r-- | cras/src/server/cras_alsa_usb_io.c | 10 | ||||
-rw-r--r-- | cras/src/tests/alsa_ucm_unittest.cc | 3 |
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) { |