Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 41923e44 authored by Takashi Iwai's avatar Takashi Iwai Committed by Jaroslav Kysela
Browse files

[ALSA] hda-codec - Fix possible array overflow



dac_nids arrays in each codec support code may have up to 5 items
when assigned from the auto-configurator.  Some codec codes have
less numbers than the possible max.  This patch defines the constant
and fixes the array definitions.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarJaroslav Kysela <perex@perex.cz>
parent 7507e8da
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -310,16 +310,17 @@ enum {

extern const char *auto_pin_cfg_labels[AUTO_PIN_LAST];

#define AUTO_CFG_MAX_OUTS	5

struct auto_pin_cfg {
	int line_outs;
	hda_nid_t line_out_pins[5]; /* sorted in the order of
				     * Front/Surr/CLFE/Side
				     */
	/* sorted in the order of Front/Surr/CLFE/Side */
	hda_nid_t line_out_pins[AUTO_CFG_MAX_OUTS];
	int speaker_outs;
	hda_nid_t speaker_pins[5];
	hda_nid_t speaker_pins[AUTO_CFG_MAX_OUTS];
	int hp_outs;
	int line_out_type;	/* AUTO_PIN_XXX_OUT */
	hda_nid_t hp_pins[5];
	hda_nid_t hp_pins[AUTO_CFG_MAX_OUTS];
	hda_nid_t input_pins[AUTO_PIN_LAST];
	hda_nid_t dig_out_pin;
	hda_nid_t dig_in_pin;
+1 −1
Original line number Diff line number Diff line
@@ -72,7 +72,7 @@ struct ad198x_spec {
	unsigned int num_kctl_alloc, num_kctl_used;
	struct snd_kcontrol_new *kctl_alloc;
	struct hda_input_mux private_imux;
	hda_nid_t private_dac_nids[4];
	hda_nid_t private_dac_nids[AUTO_CFG_MAX_OUTS];

	unsigned int jack_present :1;

+1 −2
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ struct cmi_spec {

	/* playback */
	struct hda_multi_out multiout;
	hda_nid_t dac_nids[4];		/* NID for each DAC */
	hda_nid_t dac_nids[AUTO_CFG_MAX_OUTS];	/* NID for each DAC */
	int num_dacs;

	/* capture */
@@ -73,7 +73,6 @@ struct cmi_spec {
	unsigned int pin_def_confs;

	/* multichannel pins */
	hda_nid_t multich_pin[4];	/* max 8-channel */
	struct hda_verb multi_init[9];	/* 2 verbs for each pin + terminator */
};

+1 −1
Original line number Diff line number Diff line
@@ -85,7 +85,7 @@ struct conexant_spec {
	unsigned int num_kctl_alloc, num_kctl_used;
	struct snd_kcontrol_new *kctl_alloc;
	struct hda_input_mux private_imux;
	hda_nid_t private_dac_nids[4];
	hda_nid_t private_dac_nids[AUTO_CFG_MAX_OUTS];

};

+1 −1
Original line number Diff line number Diff line
@@ -238,7 +238,7 @@ struct alc_spec {
	unsigned int num_kctl_alloc, num_kctl_used;
	struct snd_kcontrol_new *kctl_alloc;
	struct hda_input_mux private_imux;
	hda_nid_t private_dac_nids[5];
	hda_nid_t private_dac_nids[AUTO_CFG_MAX_OUTS];

	/* hooks */
	void (*init_hook)(struct hda_codec *codec);
Loading