В ядре Linux устранена следующая уязвимость: net: shaper: защитить от позднего создания иерархии Мы ищем netdev во время подготовки операций Netlink (предварительные обратные вызовы). и возьмите ссылку на него. Затем позже в теле обратного вызова мы берем его замок или RCU, которые являются настоящей защитой. Netdev может быть отменена регистрация между тем, как мы берем реф и время, когда мы его заблокируем.
Мы можем выделить иерархию после того, как промывка уже прошла, что может привести к утечке. Заранее возьмите блокировку экземпляра, это избавит нас от гонки и полностью устраняет необходимость в специальных обратных вызовах блокировки/разблокировки. В конце концов, если есть хоть какая-то вероятность того, что запись будет происходить одновременно со сбросом — мы снова возвращаемся к утечке иерархии.
Мы можем взять блокировку для устройств, которые не поддерживают шейперы, но здесь мы имеем дело только с операциями SET, а не с блокировкой будет оптимизация для случая ошибки.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: net: shaper: protect from late creation of hierarchy We look up a netdev during prep of Netlink ops (pre- callbacks) and take a ref to it. Then later in the body of the callback we take its lock or RCU which are the actual protections. The netdev may get unregistered in between the time we take the ref and the time we lock it. We may allocate the hierarchy after flush has already run, which would lead to a leak. Take the instance lock in pre- already, this saves us from the race and removes the need for dedicated lock/unlock callbacks completely. After all, if there's any chance of write happening concurrently with the flush - we're back to leaking the hierarchy. We may take the lock for devices which don't support shapers but we're only dealing with SET operations here, not taking the lock would be optimizing for an error case.