/* Check whether timer is valid; global mutex must be held. */
static inline int
timer_valid (struct timer_node *timer)
{
  return timer && timer->inuse == TIMER_INUSE;
}


if some memory, casted to a timer_node struct, happens to have inuse field 
match the value of TIMER_INUSE the validation check passes, and it is attempted 
to be used.

What could be done is check if the passed in timer, is actually in
__timer_array, such that we only try to operate on the valid ones.

Not sure what glibc prior to 2.33 did to check/detect it.

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1940296

Title:
  SIGSEGV instead of EINVAL with invalid timer id in timer_delete()
  glibc 2.33

To manage notifications about this bug go to:
https://bugs.launchpad.net/glibc/+bug/1940296/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to