Commit b0e2333a authored by wangdicheng's avatar wangdicheng Committed by Takashi Iwai
Browse files

ALSA: hda/conexant: Fix missing error check for jack detection



In cx_probe(), the return value of snd_hda_jack_detect_enable_callback()
is ignored. This function returns a pointer, and if it fails (e.g., due
to memory allocation failure), it returns an error pointer which must
be checked using IS_ERR().

If the registration fails, the driver continues to probe, but the jack
detection callback will not be registered. This can lead to a kernel
crash later when the driver attempts to handle jack events or accesses
the uninitialized structure.

Check the return value using IS_ERR() and propagate the error via
PTR_ERR() to the probe caller.

Fixes: 7aeb2590 ("ALSA: hda/conexant: Fix headset auto detect fail in cx8070 and SN6140")
Signed-off-by: default avatarwangdicheng <wangdicheng@kylinos.cn>
Link: https://patch.msgid.link/20260428080450.108801-1-wangdich9700@163.com


Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 077c593d
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -1175,6 +1175,7 @@ static void add_cx5051_fake_mutes(struct hda_codec *codec)
static int cx_probe(struct hda_codec *codec, const struct hda_device_id *id)
{
	struct conexant_spec *spec;
	struct hda_jack_callback *callback;
	int err;

	codec_info(codec, "%s: BIOS auto-probing.\n", codec->core.chip_name);
@@ -1190,7 +1191,12 @@ static int cx_probe(struct hda_codec *codec, const struct hda_device_id *id)
	case 0x14f11f86:
	case 0x14f11f87:
		spec->is_cx11880_sn6140 = true;
		snd_hda_jack_detect_enable_callback(codec, 0x19, cx_update_headset_mic_vref);
		callback = snd_hda_jack_detect_enable_callback(codec, 0x19,
				cx_update_headset_mic_vref);
		if (IS_ERR(callback)) {
			err = PTR_ERR(callback);
			goto error;
		}
		break;
	}