Searched hist:"024 e01dead12c2b9fbe31216f2099401ebb78a4a" (Results 1 – 1 of 1) sorted by relevance
/linux/drivers/media/cec/usb/pulse8/ |
H A D | pulse8-cec.c | diff 024e01dead12c2b9fbe31216f2099401ebb78a4a Fri Nov 27 10:36:32 CET 2020 Hans Verkuil <hverkuil-cisco@xs4all.nl> media: pulse8-cec: fix duplicate free at disconnect or probe error
Commit 601282d65b96 ("media: pulse8-cec: use adap_free callback") used the adap_free callback to clean up on disconnect. What I forgot was that in the probe it will call cec_delete_adapter() followed by kfree(pulse8) if an error occurs. But by using the adap_free callback, cec_delete_adapter() is already freeing the pulse8 struct.
This wasn't noticed since normally the probe works fine, but Pulse-Eight published a new firmware version that caused a probe error, so now it hits this bug. This affects firmware version 12, but probably any version >= 10.
Commit aa9eda76129c ("media: pulse8-cec: close serio in disconnect, not adap_free") made this worse by adding the line 'pulse8->serio = NULL' right after the call to cec_unregister_adapter in the disconnect() function. Unfortunately, cec_unregister_adapter will typically call cec_delete_adapter (unless a filehandle to the cec device is still open), which frees the pulse8 struct. So now it will also crash on a simple unplug of the Pulse-Eight device.
With this fix both the unplug issue and a probe() error situation are handled correctly again.
It will still fail to probe() with a v12 firmware, that's something to look at separately.
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Reported-by: Maxime Ripard <mripard@kernel.org> Tested-by: Maxime Ripard <mripard@kernel.org> Fixes: aa9eda76129c ("media: pulse8-cec: close serio in disconnect, not adap_free") Fixes: 601282d65b96 ("media: pulse8-cec: use adap_free callback") Cc: <stable@vger.kernel.org> Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
|