Problem Description:
The GETALL and SETALL commands in semctl(2) recorded the number
of semaphores in the target set, dropped the lock protecting the
set, allocated a buffer sized for that count, and reacquired the
lock. A sequence-number check was used to verify that the set had
not been replaced in the interim, but the sequence number wraps
after 0x8000 create/destroy cycles. By rapidly destroying and
recreating semaphore sets at the same index, another process can
cause the sequence number to wrap, allowing a set with a different
number of semaphores to pass validation. The subsequent copy then
reads or writes past the end of the allocated buffer.
Impact:
An unprivileged local user can trigger out-of-bounds reads and
writes on kernel heap memory, potentially leading to privilege
escalation.