Fixed                
                
            
            
                
                    Created: Oct 23, 2025   
                                            Updated: Oct 26, 2025                                    
                
                    
                                    
             
         
        
            
            
                                    
                        Resolved Date: Oct 26, 2025                    
                
                
                                    
                        Found In Version: 10.22.33.1                    
                
                                    
                        Fix Version: 10.22.33.16                    
                
                                        
                            Severity: Standard                        
                    
                                        
                            Applicable for: Wind River Linux LTS 22                        
                    
                                    
                        Component/s: Kernel                    
                
                
                             
         
                        
                In the Linux kernel, the following vulnerability has been resolved:[EOL][EOL]posix-timers: Ensure timer ID search-loop limit is valid[EOL][EOL]posix_timer_add() tries to allocate a posix timer ID by starting from the[EOL]cached ID which was stored by the last successful allocation.[EOL][EOL]This is done in a loop searching the ID space for a free slot one by[EOL]one. The loop has to terminate when the search wrapped around to the[EOL]starting point.[EOL][EOL]But that's racy vs. establishing the starting point. That is read out[EOL]lockless, which leads to the following problem:[EOL][EOL]CPU0\t  \t      \t     \t   CPU1[EOL]posix_timer_add()[EOL]  start = sig->posix_timer_id;[EOL]  lock(hash_lock);[EOL]  ...\t\t\t\t   posix_timer_add()[EOL]  if (++sig->posix_timer_id < 0)[EOL]      \t\t\t             start = sig->posix_timer_id;[EOL]     sig->posix_timer_id = 0;[EOL][EOL]So CPU1 can observe a negative start value, i.e. -1, and the loop break[EOL]never happens because the condition can never be true:[EOL][EOL]  if (sig->posix_timer_id == start)[EOL]     break;[EOL][EOL]While this is unlikely to ever turn into an endless loop as the ID space is[EOL]huge (INT_MAX), the racy read of the start value caught the attention of[EOL]KCSAN and Dmitry unearthed that incorrectness.[EOL][EOL]Rewrite it so that all id operations are under the hash lock.