ALSA: core: Fix possible NULL dereference caused by kunit_kzalloc()

kunit_kzalloc() may return a NULL pointer, dereferencing it without
NULL check may lead to NULL dereference.
Add NULL checks for all the kunit_kzalloc() in sound_kunit.c

Fixes: 3e39acf56e ("ALSA: core: Add sound core KUnit test")
Signed-off-by: Zichen Xie <zichenxie0106@gmail.com>
Link: https://patch.msgid.link/20241126192448.12645-1-zichenxie0106@gmail.com
Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
Zichen Xie 2024-11-26 13:24:49 -06:00 committed by Takashi Iwai
parent db2eee6143
commit 9ad467a2b2

View File

@ -172,6 +172,7 @@ static void test_format_fill_silence(struct kunit *test)
u32 i, j; u32 i, j;
buffer = kunit_kzalloc(test, SILENCE_BUFFER_SIZE, GFP_KERNEL); buffer = kunit_kzalloc(test, SILENCE_BUFFER_SIZE, GFP_KERNEL);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, buffer);
for (i = 0; i < ARRAY_SIZE(buf_samples); i++) { for (i = 0; i < ARRAY_SIZE(buf_samples); i++) {
for (j = 0; j < ARRAY_SIZE(valid_fmt); j++) for (j = 0; j < ARRAY_SIZE(valid_fmt); j++)
@ -208,8 +209,12 @@ static void test_playback_avail(struct kunit *test)
struct snd_pcm_runtime *r = kunit_kzalloc(test, sizeof(*r), GFP_KERNEL); struct snd_pcm_runtime *r = kunit_kzalloc(test, sizeof(*r), GFP_KERNEL);
u32 i; u32 i;
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, r);
r->status = kunit_kzalloc(test, sizeof(*r->status), GFP_KERNEL); r->status = kunit_kzalloc(test, sizeof(*r->status), GFP_KERNEL);
r->control = kunit_kzalloc(test, sizeof(*r->control), GFP_KERNEL); r->control = kunit_kzalloc(test, sizeof(*r->control), GFP_KERNEL);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, r->status);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, r->control);
for (i = 0; i < ARRAY_SIZE(p_avail_data); i++) { for (i = 0; i < ARRAY_SIZE(p_avail_data); i++) {
r->buffer_size = p_avail_data[i].buffer_size; r->buffer_size = p_avail_data[i].buffer_size;
@ -232,8 +237,12 @@ static void test_capture_avail(struct kunit *test)
struct snd_pcm_runtime *r = kunit_kzalloc(test, sizeof(*r), GFP_KERNEL); struct snd_pcm_runtime *r = kunit_kzalloc(test, sizeof(*r), GFP_KERNEL);
u32 i; u32 i;
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, r);
r->status = kunit_kzalloc(test, sizeof(*r->status), GFP_KERNEL); r->status = kunit_kzalloc(test, sizeof(*r->status), GFP_KERNEL);
r->control = kunit_kzalloc(test, sizeof(*r->control), GFP_KERNEL); r->control = kunit_kzalloc(test, sizeof(*r->control), GFP_KERNEL);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, r->status);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, r->control);
for (i = 0; i < ARRAY_SIZE(c_avail_data); i++) { for (i = 0; i < ARRAY_SIZE(c_avail_data); i++) {
r->buffer_size = c_avail_data[i].buffer_size; r->buffer_size = c_avail_data[i].buffer_size;
@ -247,6 +256,7 @@ static void test_capture_avail(struct kunit *test)
static void test_card_set_id(struct kunit *test) static void test_card_set_id(struct kunit *test)
{ {
struct snd_card *card = kunit_kzalloc(test, sizeof(*card), GFP_KERNEL); struct snd_card *card = kunit_kzalloc(test, sizeof(*card), GFP_KERNEL);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, card);
snd_card_set_id(card, VALID_NAME); snd_card_set_id(card, VALID_NAME);
KUNIT_EXPECT_STREQ(test, card->id, VALID_NAME); KUNIT_EXPECT_STREQ(test, card->id, VALID_NAME);
@ -280,6 +290,7 @@ static void test_pcm_format_name(struct kunit *test)
static void test_card_add_component(struct kunit *test) static void test_card_add_component(struct kunit *test)
{ {
struct snd_card *card = kunit_kzalloc(test, sizeof(*card), GFP_KERNEL); struct snd_card *card = kunit_kzalloc(test, sizeof(*card), GFP_KERNEL);
KUNIT_ASSERT_NOT_ERR_OR_NULL(test, card);
snd_component_add(card, TEST_FIRST_COMPONENT); snd_component_add(card, TEST_FIRST_COMPONENT);
KUNIT_ASSERT_STREQ(test, card->components, TEST_FIRST_COMPONENT); KUNIT_ASSERT_STREQ(test, card->components, TEST_FIRST_COMPONENT);