tty: Fix ->pgrp locking in tiocspgrp()

commit 54ffccbf053b5b6ca4f6e45094b942fab92a25fc upstream.

tiocspgrp() takes two tty_struct pointers: One to the tty that userspace
passed to ioctl() (`tty`) and one to the TTY being changed (`real_tty`).
These pointers are different when ioctl() is called with a master fd.

To properly lock real_tty->pgrp, we must take real_tty->ctrl_lock.

This bug makes it possible for racing ioctl(TIOCSPGRP, ...) calls on
both sides of a PTY pair to corrupt the refcount of `struct pid`,
leading to use-after-free errors.

RELEASE_NOTE=Fixed CVE-2020-29661

cos-patch: security-high
Fixes: 47f86834bbd4 ("redo locking of tty->pgrp")
Signed-off-by: Jann Horn <>
Reviewed-by: Jiri Slaby <>
Signed-off-by: Greg Kroah-Hartman <>
Change-Id: Ida97fd8d7e5e21724e9af173438c144ef7322f96
Reviewed-by: Vaibhav Rustagi <>
Tested-by: Cusky Presubmit Bot <>
1 file changed