mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
ASoC: sma1307: Add NULL check in sma1307_setting_loaded()
All varibale allocated by kzalloc and devm_kzalloc could be NULL. Multiple pointer checks and their cleanup are added. This issue is found by our static analysis tool Signed-off-by: Chenyuan Yang <chenyuan0y@gmail.com> Link: https://patch.msgid.link/20250311015714.1333857-1-chenyuan0y@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
f37ab219a3
commit
0ec6bd1670
1 changed files with 28 additions and 0 deletions
|
@ -1723,6 +1723,11 @@ static void sma1307_setting_loaded(struct sma1307_priv *sma1307, const char *fil
|
|||
}
|
||||
|
||||
data = kzalloc(fw->size, GFP_KERNEL);
|
||||
if (!data) {
|
||||
release_firmware(fw);
|
||||
sma1307->set.status = false;
|
||||
return;
|
||||
}
|
||||
size = fw->size >> 2;
|
||||
memcpy(data, fw->data, fw->size);
|
||||
|
||||
|
@ -1736,6 +1741,12 @@ static void sma1307_setting_loaded(struct sma1307_priv *sma1307, const char *fil
|
|||
sma1307->set.header = devm_kzalloc(sma1307->dev,
|
||||
sma1307->set.header_size,
|
||||
GFP_KERNEL);
|
||||
if (!sma1307->set.header) {
|
||||
kfree(data);
|
||||
sma1307->set.status = false;
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(sma1307->set.header, data,
|
||||
sma1307->set.header_size * sizeof(int));
|
||||
|
||||
|
@ -1751,6 +1762,13 @@ static void sma1307_setting_loaded(struct sma1307_priv *sma1307, const char *fil
|
|||
sma1307->set.def
|
||||
= devm_kzalloc(sma1307->dev,
|
||||
sma1307->set.def_size * sizeof(int), GFP_KERNEL);
|
||||
if (!sma1307->set.def) {
|
||||
kfree(data);
|
||||
kfree(sma1307->set.header);
|
||||
sma1307->set.status = false;
|
||||
return;
|
||||
}
|
||||
|
||||
memcpy(sma1307->set.def,
|
||||
&data[sma1307->set.header_size],
|
||||
sma1307->set.def_size * sizeof(int));
|
||||
|
@ -1763,6 +1781,16 @@ static void sma1307_setting_loaded(struct sma1307_priv *sma1307, const char *fil
|
|||
= devm_kzalloc(sma1307->dev,
|
||||
sma1307->set.mode_size * 2 * sizeof(int),
|
||||
GFP_KERNEL);
|
||||
if (!sma1307->set.mode_set[i]) {
|
||||
kfree(data);
|
||||
kfree(sma1307->set.header);
|
||||
kfree(sma1307->set.def);
|
||||
for (int j = 0; j < i; j++)
|
||||
kfree(sma1307->set.mode_set[j]);
|
||||
sma1307->set.status = false;
|
||||
return;
|
||||
}
|
||||
|
||||
for (int j = 0; j < sma1307->set.mode_size; j++) {
|
||||
sma1307->set.mode_set[i][2 * j]
|
||||
= data[offset + ((num_mode + 1) * j)];
|
||||
|
|
Loading…
Add table
Reference in a new issue