WSL2-Linux-Kernel/include/media
Hans Verkuil a896c674d5 media: cec: core: add adap_nb_transmit_canceled() callback
commit da53c36ddd upstream.

A potential deadlock was found by Zheng Zhang with a local syzkaller
instance.

The problem is that when a non-blocking CEC transmit is canceled by calling
cec_data_cancel, that in turn can call the high-level received() driver
callback, which can call cec_transmit_msg() to transmit a new message.

The cec_data_cancel() function is called with the adap->lock mutex held,
and cec_transmit_msg() tries to take that same lock.

The root cause is that the received() callback can either be used to pass
on a received message (and then adap->lock is not held), or to report a
canceled transmit (and then adap->lock is held).

This is confusing, so create a new low-level adap_nb_transmit_canceled
callback that reports back that a non-blocking transmit was canceled.

And the received() callback is only called when a message is received,
as was the case before commit f9d0ecbf56 ("media: cec: correctly pass
on reply results") complicated matters.

Reported-by: Zheng Zhang <zheng.zhang@email.ucr.edu>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Fixes: f9d0ecbf56 ("media: cec: correctly pass on reply results")
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-06-16 13:39:53 +02:00
..
davinci
drv-intf
i2c
tpg
cec-notifier.h
cec-pin.h
cec.h media: cec: core: add adap_nb_transmit_canceled() callback 2024-06-16 13:39:53 +02:00
demux.h
dmxdev.h
dvb-usb-ids.h
dvb_ca_en50221.h
dvb_demux.h
dvb_frontend.h
dvb_math.h
dvb_net.h media: dvb-core: Fix use-after-free due on race condition at dvb_net 2023-06-09 10:32:24 +02:00
dvb_ringbuffer.h
dvb_vb2.h
dvbdev.h media: dvb-core: Fix use-after-free due to race at dvb_register_device() 2023-06-09 10:32:24 +02:00
frame_vector.h
hevc-ctrls.h
imx.h
media-dev-allocator.h
media-device.h
media-devnode.h
media-entity.h
media-request.h
rc-core.h
rc-map.h
rcar-fcp.h
tuner-types.h
tuner.h
tveeprom.h
v4l2-async.h
v4l2-common.h media: v4l2: Fix v4l2_i2c_subdev_set_name function documentation 2022-11-03 23:59:14 +09:00
v4l2-ctrls.h
v4l2-dev.h
v4l2-device.h
v4l2-dv-timings.h
v4l2-event.h
v4l2-fh.h
v4l2-flash-led-class.h
v4l2-fwnode.h
v4l2-h264.h
v4l2-image-sizes.h
v4l2-ioctl.h
v4l2-jpeg.h
v4l2-mc.h
v4l2-mediabus.h
v4l2-mem2mem.h media: v4l2-mem2mem: add lock to protect parameter num_rdy 2023-08-26 14:23:23 +02:00
v4l2-rect.h
v4l2-subdev.h media: v4l: subdev: Fail graciously when getting try data for NULL state 2022-11-10 18:15:34 +01:00
videobuf-core.h
videobuf-dma-contig.h
videobuf-dma-sg.h
videobuf-vmalloc.h
videobuf2-core.h
videobuf2-dma-contig.h
videobuf2-dma-sg.h
videobuf2-dvb.h
videobuf2-memops.h
videobuf2-v4l2.h
videobuf2-vmalloc.h
vsp1.h