mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
media: cec: Serialize exclusive follower delivery
cec_receive_notify() reads the exclusive follower pointer without the
adapter lock. Serialize the no-follower check and message delivery
against mode changes and release.
Fixes: 9881fe0ca1 ("[media] cec: add HDMI CEC framework (adapter)")
Cc: stable@vger.kernel.org
Signed-off-by: Ruoyu Wang <ruoyuw560@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
This commit is contained in:
parent
8dcf23edaf
commit
1924d0788c
|
|
@ -2219,9 +2219,13 @@ static int cec_receive_notify(struct cec_adapter *adap, struct cec_msg *msg,
|
|||
* Unprocessed messages are aborted if userspace isn't doing
|
||||
* any processing either.
|
||||
*/
|
||||
mutex_lock(&adap->lock);
|
||||
if (!is_broadcast && !is_reply && !adap->follower_cnt &&
|
||||
!adap->cec_follower && msg->msg[1] != CEC_MSG_FEATURE_ABORT)
|
||||
!adap->cec_follower && msg->msg[1] != CEC_MSG_FEATURE_ABORT) {
|
||||
mutex_unlock(&adap->lock);
|
||||
return cec_feature_abort(adap, msg);
|
||||
}
|
||||
mutex_unlock(&adap->lock);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -2234,10 +2238,12 @@ static int cec_receive_notify(struct cec_adapter *adap, struct cec_msg *msg,
|
|||
* Send to the exclusive follower if there is one, otherwise send
|
||||
* to all followers.
|
||||
*/
|
||||
mutex_lock(&adap->lock);
|
||||
if (adap->cec_follower)
|
||||
cec_queue_msg_fh(adap->cec_follower, msg);
|
||||
else
|
||||
cec_queue_msg_followers(adap, msg);
|
||||
mutex_unlock(&adap->lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user